Amazon DynamoDB
开发人员指南 (API 版本 2012-08-10)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

面向 DynamoDB 的 NoSQL 设计

NoSQL 数据库系统 (如 Amazon DynamoDB) 使用替代模型来管理数据,如键-值对或文档存储。从关系数据库管理系统 (RDBMS) 切换到 NoSQL 数据库系统 (如 DynamoDB) 时,务必了解关键差异和特定设计方法。

关系数据设计和 NoSQL 之间的差异

关系数据库系统 (RDBMS) 和 NoSQL 数据库各有优劣:

  • 在 RDBMS 中,可以灵活地查询数据,但查询成本相对较高,并且在高流量的情况下无法有效扩展 (请参阅在 DynamoDB 为关系数据建模的初始步骤)。

  • 在 NoSQL 数据库 (如 DynamoDB) 中,有效查询数据的方式有限,否则查询成本高且速度慢。

这些差异使这两个系统之间的数据库设计有很大的不同:

  • 在 RDBMS 中,可以设计灵活性,而不必担心实现细节或性能。查询优化通常不会影响架构设计,但是,标准化非常重要。

  • 在 DynamoDB 中,对架构进行专门设计,以尽可能地加快最常见和最重要的查询的速度并尽可能降低其成本。数据结构是针对业务使用案例的特定要求定制的。

NoSQL 设计的两个关键概念

NoSQL 设计需要不同于 RDBMS 设计的思维模式。对于 RDBMS,可继续创建标准化数据模型,而不考虑访问模式。之后,在出现新问题和查询要求时,可以扩展它。可以将每种类型的数据整理到其表中。

NoSQL 设计是不同的:

  • 相比之下,对于 DynamoDB,在了解需要解答的问题之前,您不应开始设计架构。预先了解业务问题和应用程序使用案例十分重要。

  • 应在 DynamoDB 应用程序中保留尽可能少的表。大多数精心设计的应用程序只需要一个表。

了解 NoSQL 设计

设计 DynamoDB 应用程序的第一步是确定系统必须满足的特定查询模式。

具体来说,在开始前,务必了解应用程序的访问模式的三个基本属性:

  • 数据大小:了解一次存储和请求的数据量将有助于确定对数据进行分区的最有效方法。

  • 数据形状:NoSQL 数据库不会在处理查询时重塑数据(如 RDBMS 系统所做的一样),而是整理数据以便数据在数据库中的形状与查询内容对应。这是加快速度并增强可扩展性的一个关键因素。

  • 数据速度:DynamoDB 通过增加可用于处理查询的物理分区的数量并通过跨这些分区有效分发数据来进行扩展。预先了解峰值查询负载可能有助于确定数据分区方式,从而最高效地使用 I/O 容量。

确定特定查询要求后,可根据管理性能的一般准则整理数据:

  • 将相关数据放在一起。   20 年前的路由表优化研究发现,“参考位置”是加快响应时间的最重要因素:将相关数据集中放置到一个位置。在今天的 NoSQL 系统中同样如此,将相关数据保留在最近位置会对成本和性能产生重大影响。不是跨多个表分发相关数据项目,而是在 NoSQL 系统中尽可能紧密地保留相关项目。

    作为一般规则,应在 DynamoDB 应用程序中保留尽可能少的表。如之前所强调的,大多数精心设计的应用程序只需要一个表,除非出于特定理由要使用多个表。

    例外是涉及大量时间序列数据的情况或具有明显不同的访问模式的数据集 — 但这些都是例外。具有反向索引的单个表通常可启用简单查询来创建和检索应用程序所需的复杂层次数据结构。

  • 使用排序顺序。   可将相关项目组织起来并进行有效查询,前提是它们的键设计可促使它们一起排序。这是一个重要的 NoSQL 设计策略。

  • 分发查询。   同样重要的是,大量的查询不能集中在数据库的某个部分,它们会超出 I/O 容量。相反,您应该设计数据键以跨尽可能多的分区均匀分发流量,从而避免“热点”。

  • 使用全局二级索引。   通过创建特定的全局二级索引,可启用主表支持的查询以外的查询,而且这仍然是快速且相对便宜的。

这些一般准则将转化为可用于在 DynamoDB 中为数据高效建模的一些常见设计模式。