使用 Amazon DynamoDB 构建可扩展的梦幻足球数据库模型

当今的在线游戏生成了远超从前的数据量,请求速率攀升到每秒数百万次 。对于这些数据密集型游戏,开发者必须选择能够在任意规模下稳定提供低延迟性能的数据库,而且数据库必须具备吞吐量弹性,能够适应流量高峰,不会在活动量较少的时段出现代价高昂的过度预置 。这就是 成为游戏行业中备受欢迎的数据库服务的原因 。是一种采用无服务器架构的键-值 NoSQL 数据库,可实现稳定的低延迟结果和高可用性,无论您的游戏每月生成一个请求还是每秒生成一百万个请求,管理开销都很低 。游戏开发者使用的一些主要原因包括:
以下架构图描绘了一款生产就绪性游戏,该游戏运行在上并由支持 。在这篇文章中,我们将在热门梦幻足球游戏类型的背景下,重点介绍表的设计概念 。
图 1:以为后端的生产就绪型游戏示例架构
在这篇文章中,我们将讨论虚拟的梦幻足球游戏的访问模式,然后演示我们为满足这些模式而设计的表架构 。我们重点介绍梦幻足球联赛游戏,在这种游戏中,好友们可以开展竞赛,用现实世界中的足球运动员创建最佳球队名单,并进行排名赛 。是游戏玩家使用的应用程序的后端数据库,随着足球赛季进展,玩家用它来管理球队和跟踪得分 。我们讨论在对表建模时的注意事项,用以支持对游戏中功能(例如球队选择、分数和排行榜)的访问模式 。
功能页面:
梦幻足球:
()
如何在中进行数据建模
如果您不熟悉数据建模,请务必注意,您不应使用关系数据库的建模技术在中对数据建模 。使用时,您必须在创建数据模型之前定义访问模式 。对于大多数工作负载,其目标是创建一个可以在任意规模下都表现出高性能且经济高效的数据模型 。为此,您必须知道应用程序的访问模式属性,例如数据大小、数据配置和数据速度 。
一般而言,打造数据库架构需要四个步骤:
了解使用案例 。
构造实体关系图(ERD,- ) 。
列出您的查询或伪查询(定义访问模式) 。
将伪查询映射到对应的操作 。
为包括 (兼容)在内的大多数非关系数据库设计架构时,这些技术同样适用 。作出这种权衡的好处包括规模大、性能高 。要了解使用案例,通常需要记录工作负载的要求(事务速率、延迟和持久性) 。如果您不知道访问模式是什么,那么应该研究类似的应用程序 。对于梦幻足球使用案例,您应该知道联赛、球队和足球运动员(球员)代表什么,以及游戏中如何访问每个实体 。接下来,您应该创建一个 ERD,用于帮助您发现实体之间的关系 。创建 ERD 后,您可以创建排序的查询列表,根据查询在游戏中的使用频率确定先后顺序 。此时,您还可以创建一些示例数据来模拟查询和响应 。最后,使用适用于的 NoSQL 或电子表格,将您的查询映射到架构 。映射是定义分区架构、二级索引和写入分片(如果您的设计需要分片)的过程 。
(兼容):
适用于的 NoSQL :
写入分片:
梦幻足球游戏数据库(ERD 和访问模式)
无论您是使用构建新应用程序还是从其他数据存储迁移,数据建模流程中的第一步通常都是创建 ERD 。在确定应用程序中的实体及其关系后,您可以使用任何常用的 ERD 表示格式来构建 ERD 。
在我们游戏的 ERD 中有五个不同的实体 。Gamer (玩家) 实体存储有关玩游戏的玩家的信息(玩家是通过手机或 Web 浏览器玩游戏的用户) 。玩家创建球员的(球员名单),可以参加任意数量的(联赛) 。为简单起见,在本例中,指定的一支球队只能参加一个联赛 。(球员名单) 实体(也称为比赛周球员名单)是由玩家每周创建的(球员) 集合,其大小固定 。(球员) 可以加入一个联赛中的多只球队 。(球员) 属于一个(位置),例如中场或守门员 。请注意,我们没有为足球俱乐部创建实体;它们可以建模为(球员) 中的一个属性,因为该应用程序没有需要按照足球俱乐部进行排序或查询的读取模式 。