AWS DynamoDB 结构的特点是层次结构清晰,其中表充当顶级实体。与关系数据库不同,表之间没有严格的关系。每个表代表一个独特且独立的实体,允许灵活的数据建模。
性能控制发生在表级别,这意味着开发人员有机会单独优化每个表的性能,而不会影响数据库中的其他表。数据或项目以 DynamoDB 的特殊 JSON 格式存储,这不仅可以实现高效存储,还可以快速检索。
它是强制性的,而架构的其余部分则保持灵活。主键可以是简单的(只有一个属性)或复合的(两个属性:分区键和排序键)。这种灵活性也适用于表中的其他可选属性。
下图以计算机游戏数据为例展示了表格的结构。这里的主键 分时度假业主名单 由分区键(玩家 ID)和排序键(游戏 ID)组成。各个属性并非适用于每个条目,因此非常灵活。
此处以表格形式呈现的数据由 DynamoDB 以 JSON 格式存储在后台,这就是为什么该数据库也可以称为文档数据库。对于上面示例的第一行,JSON 文件如下所示:
前缀 S 和 N 分别表示存储在属性中的字符串 (S) 和数字 (N) 数据类型。 Boolean (B) 和 null (N) 也可以用作简单数据类型。其他可用的数据类型包括列表 (L) 和映射 (M) 以及字符串集 (SS) 类型。
DynamoDB 中的索引
在 DynamoDB 中,使用索引可以实现更高效的数据查询。有两种类型的指数:本地二级指数(LSI)和全球二级指数(GSI)。
本地二级索引 (LSI)
LSI 基于与表主键相同的分区键,但具有不同的排序键。重要的是它是一个复合键。 LSI 的创建限制为每个表最多 5 个索引,并且索引元素的大小不能超过 10 GB。另外,LSI必须在建表时定义,以后不能添加。
全球二级指数(GSI)
GSI 允许使用相同或不同的分区键作为表的主键。 GSI 可以是简单密钥或复合密钥。每个表最多可以有 20 个 GSI,并且索引项没有大小限制。 GSI可以随时创建和删除,并允许跨分区查询。值得注意的是,GSI 仅提供潜在的一致性(见下文)。
数据一致性
AWS DynamoDB 的一致性模型在控制读写操作方面发挥着关键作用。为了保证DynamoDB的高可用性,需要存储的数据采用分布式的方式存储。基本上,AWS遵循可能的一致性原则。这意味着一旦写入数据,就不能立即保证数据的所有副本在任何给定时间都是相同的。尽管如此,使用 DynamoDB,可以根据应用程序为读写操作选择一定程度的一致性。