图 2:梦幻足球数据库的 ERD
访问模式:
按玩家 ID 查找 Gamer 详细信息 。
获取某个 Gamer 的。
文章插图
按球员 ID 查找的详细信息 。
获取给定的。
获取一个中的所有 Gamer,按照(总积分) 排序 。
注意:在实际游戏中,梦幻足球游戏会有其他访问模式 。我们选择这些常见模式用于演示的目的 。
建模实体项目
在为建模架构时,您应尝试以合理的成本和可接受的性能,构造项目和项目集合来满足访问模式的要求 。项目集合的定义是具有相同分区键值但排序键值不同的一组项目 。如果主键定义合适,的灵活架构允许您在同一个表中存储不同类型的实体,例如或。这样可以进行更高效的跨实体查询 。对于此示例应用程序数据库,我们首先对顶级实体进行建模 。
在下表中,请注意我们为分区键(PK)和排序键(SK)使用通用名称 。这是因为我们计划利用的架构灵活性,在表中存储多个实体类型 。我们使用的另一种建模技术是为 PK 值加上实体名称前缀 。Gamer 实体的模式为 Gamer#,实体则使用模式 # 。我们这样做的原因有二 。首先,为了满足基表中的主键唯一性约束,并在使用通用标识符的情况下,避免表中不同项目类型之间的重叠 。其次,如果我们选择使用此属性作为二级索引的排序键,则这样可以在排序键表达式中使用选择性的with (开头为) 模式 。这些基本实体满足第一种(按照玩家 ID 获取 Gamer)和第三种(按照球员 ID 获取 )访问模式 。
在中,顾名思义,分区键定义了数据如何分布在底层存储层中 。选择高基数的分区键属性值非常重要,因为在一段时间以后,随着应用程序中请求率的增加,这可以实现数据的均匀分布 。要了解更多信息,请参阅 the RightKey(选择合适的分区键) 。如下表所示,您可以使用分区键快速标识实体 。分区键值作为根(实体)项目的排序键重复,因此可以将它们与其他项目类型区分开来 。
排序键通常用来与其他实体建立一对多关系的模型 。但是,对于顶级实体项目,我们将重复使用分区键,将其作为表示实体数据的项目的排序键 。例如,Gamer的 PK 值为Gamer#,而主项目的 SK 值 Gamer# 表示。您也可以使用其他命名惯例,例如或,但是如果您需要创建二级索引,并使用基本排序键作为全局二级索引的分区键,则这可能会成为扩展限制 。
the RightKey:
一对多关系建模
在中有多种方法可以对一对多关系进行建模 。我们将在以下部分中探讨项目集合 – 如何在中对一对多关系建模中介绍的一些技术 。
项目集合 – 如何在中对一对多关系建模:
▌对全局二级索引使用分区键过载
我们可以使用作为全局二级索引(GSI)的分区键值,用于获取踢指定位置的所有球员 。通过 GSI,您可以使用替代键查询表中的数据 。如果没有 GSI,我们只能查询基表的主键 。在示例中,我们创建了一个名为 GSI1 的 GSI,具有两个名为的属性,用于保存 GSI 分区键值 。与基表架构类似,我们在 GSI 键中使用分区键过载,以允许不同的实体驻留在同一个索引中 。在应用这种设计模式时,我们必须使用实体作为的前缀,这就得到了值# 。此 GSI 符合第四种访问模式:按获取。
我们在这里的做法是过载 GSI,这使得我们能够获取给定上的所有 ,同时允许以后将 GSI 用于其他查询 。使用 GSI,您可以选择只投射自己感兴趣的属性,这比投射所有属性的性能更好,成本效益更高 。例如,我们通过查询 GSI1: = “#”,可以获得为中场的所有(实体) 。我们选择不为使用 GSI 写入分片,因为对于给定的球员的基数很低 。有关这种设计技术的更多信息,请参阅对选择性表查询使用全局二级索引写入分片 。
- 更轻便使用Siri!iOS 17让你用Siri的效率倍增
- hgroup元素的使用
- 长期使用AS进行工作的伙伴-强烈推荐 AS主题推荐
- odoo招聘模块使用流程
- WGCNA的使用
- 超级变式BOM下单,VA01-CU51-CS62的搭配使用
- 虚拟机磁盘阵列 RAID0 RAID1 RAID5 RAID10 搭建演示使用R
- 系统应用使用FileProvider的坑
- vagrant使用_使用Vagrant的Kubernetes上的Java EE
- 使用Vagrant的Kubernetes上的Java EE 7和WildFly