面向的 NoSQL 设计 - Amazon DynamoDB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

面向的 NoSQL 设计

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

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

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

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

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

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

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

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

NoSQL 设计的两个关键概念

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

NoSQL 设计有何不同

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

  • 应在 DynamoDB 应用程序中保留尽可能少的表。

了解 NoSQL 设计

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

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

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

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

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

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

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

    作为一般规则,应在 DynamoDB 应用程序中保留尽可能少的表。

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

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

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

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

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