

# 适用于 DynamoDB 的 NoSQL 设计
<a name="bp-general-nosql-design"></a>

NoSQL 数据库系统（如 Amazon DynamoDB）使用其他数据管理模型，如键-值对或文档存储。从关系数据库管理系统转向 NoSQL 数据库系统（如 DynamoDB）时，务必了解重要区别和特定设计方法。

**Topics**
+ [关系数据设计和 NoSQL 之间的区别](#bp-general-nosql-design-vs-relational)
+ [NoSQL 设计的两个关键概念](#bp-general-nosql-design-concepts)
+ [了解 NoSQL 设计](#bp-general-nosql-design-approach)
+ [NoSQL Workbench for DynamoDB](#bp-general-nosql-workbench)

## 关系数据设计和 NoSQL 之间的区别
<a name="bp-general-nosql-design-vs-relational"></a>

关系数据库系统 (RDBMS) 和 NoSQL 数据库各有优劣：
+ 在 RDBMS 中，可以灵活查询数据，但查询成本相对较高，不能很好地扩展适应高流量情况（参见 [在 DynamoDB 中为关系数据建模的初始步骤](bp-modeling-nosql.md)）。
+ 在 NoSQL 数据库（如 DynamoDB）中，高效查询数据的方式有限，此外查询成本高且速度慢。

这些区别使得这两个系统的数据库设计不同：
+ 在 RDBMS 中，针对灵活性设计，不必担心实现细节或性能。查询优化通常不会影响架构设计，但标准化很重要。
+ 在 DynamoDB 中，对架构进行专门设计，尽可能快速低成本实现最常见和最重要的查询。根据业务使用案例的具体要求定制数据结构。

## NoSQL 设计的两个关键概念
<a name="bp-general-nosql-design-concepts"></a>

NoSQL 设计需要不同于 RDBMS 设计的思维模式。对于 RDBMS，可以创建标准化数据模型，不考虑访问模式。以后出现新问题和查询要求后，进行扩展。可以将每种类型的数据整理到各自的表中。

**NoSQL 设计的不同之处**
+ 相比之下，应该先了解需要解答的问题，然后再开始设计 DynamoDB 架构。事先了解业务问题和应用程序使用案例十分重要。
+ 应在 DynamoDB 应用程序中保留尽可能少的表。使用较少的表可以提高事物的可扩展性，减少权限管理需求，并降低 DynamoDB 应用程序的开销。此外还可以帮助降低总体备份成本。

## 了解 NoSQL 设计
<a name="bp-general-nosql-design-approach"></a>

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

具体来说，开始前务必了解应用程序访问模式的三个基本属性：
+ **数据大小**：了解一次存储和请求的数据量将有助于确定对数据进行分区的最有效方法。
+ **数据形状**：NoSQL 数据库处理查询时不会改变数据形状（RDBMS 系统会这样做），而是整理数据，使数据库中的数据形状与查询内容对应。这是加快速度并增强可扩展性的一个关键因素。
+ **数据速度**：DynamoDB 通过增加可用于处理查询的物理分区数量，并在这些分区高效分布数据来进行扩展。事先了解峰值查询负载可能有助于确定数据分区方式，从而最高效地使用 I/O 容量。

确定具体查询要求后，可以根据管理性能的一般原则整理数据：
+ **将相关数据放在一起。**   研究表明，将相关数据保存在一个地方的“引用局部性”原则是提高 NoSQL 系统性能和缩短响应时间的关键因素，就像许多年前人们发现它对优化路由表很重要一样。

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

  例外情况是指涉及大量时间序列数据，或数据集具有明显不同访问模式的情况。具有反向索引的单个表通常支持简单查询创建和检索应用程序所需的复杂层次数据结构。
+ **使用排序顺序。**   如果键设计能够一起排序，可以将相关项目组织在一起，高效查询。这是一个重要的 NoSQL 设计策略。
+ **分布查询。**   大量查询不能集中在数据库的某个部分，这样可能超出 I/O 容量，这一点也很重要。应设计数据键，在尽可能多的分区均匀分布流量，从而避免“热点”。
+ **使用全局二级索引。**   通过创建特定全局二级索引，可以实现与主表支持的查询不同的查询，并且仍然快速，成本低。

这些通用原则转化为一些常见设计模式，用于在 DynamoDB 中高效建模数据。

## NoSQL Workbench for DynamoDB
<a name="bp-general-nosql-workbench"></a>

 [NoSQL Workbench for DynamoDB](workbench.md) 是一个跨平台的客户端 GUI 应用程序，可用于现代数据库开发和运营。它适用于 Windows、macOS 和 Linux 系统。NoSQL Workbench 是一个可视化开发工具，提供数据建模、数据可视化、示例数据生成和查询开发功能，可帮助您设计、创建、查询和管理 DynamoDB 表。通过 NoSQL Workbench for DynamoDB，您可以构建新数据模型，或根据现有模型设计符合应用程序数据访问模式的模型。您还可以在过程结束时导入和导出设计的数据模型。有关更多信息，请参阅 [使用 NoSQL Workbench 构建数据模型](workbench.Modeler.md)。