存储大型项目和属性的最佳实践 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

存储大型项目和属性的最佳实践

Amazon DynamoDB 将您在表中存储的每件项目的大小限制为 400 KB(参见)。Amazon DynamoDB 中的服务、账户和表限额如果应用程序需要存储的项目数据超出 DynamoDB 限制允许,可以尝试压缩一个或多个大型属性,或者将项目拆分为多个项目(按照排序键高效索引)。还可以将项目作为对象存储在 Amazon Simple Storage Service (Amazon S3) 中,然后将 Amazon S3 对象标识符存储在 DynamoDB 项目中。

作为最佳实践,在写入项目时,应使用该ReturnConsumedCapacity参数来监控接近最大项目大小 400 KB 的项目大小并发出警报。超过最大项目大小将导致写入尝试失败。监控项目大小并发出警报将使您能够在项目大小问题影响应用程序之前缓解这些问题。

压缩大型属性值

压缩大型属性值可以让属性值符合 DynamoDB 的项目限制,降低存储成本。诸如 GZIP 或 LZO 之类的压缩算法会生成二进制输出,然后您可以将其存储在项目中的Binary属性类型中。

举个例子,假设一个存储论坛用户写的消息的表。此类消息通常包含很长的文本字符串,这些文本可供压缩。虽然压缩可以减小项目的大小,但缺点是压缩的属性值对筛选没有用处。

有关演示如何在 DynamoDB 中压缩此类消息的示例代码,请参见以下内容:

垂直分区

处理大项目的另一种解决方案是将它们分解为较小的数据块,然后按分区键值关联所有相关项目。然后,您可以使用排序键字符串来识别存储在其旁边的关联信息。通过执行此操作并按相同的分区键值对多个项目进行分组,您就是在创建一个项目集合

有关此方法的更多信息,请参阅:

在 Amazon S3 中存储大型属性值

如前所述,还可以使用 Amazon S3 存储无法放入 DynamoDB 项目的大型属性值。可以将它们作为对象存储在 Amazon S3 中,然后将对象标识符存储在 DynamoDB 项目中。

还可使用 Amazon S3 的对象元数据支持,提供返回至 DynamoDB 中父项目的链接。将项目的主键值作为对象的 Amazon S3 元数据存储在 Amazon S3 中。这样做通常有助于维护 Amazon S3 对象。

例如,考虑 为 DynamoDB 中的代码示例创建表和加载数据 章节中的 ProductCatalog 表。此表中的项目存储商品价格、描述、书的作者以及其他产品尺寸的信息。如果要存储的每个产品的图片过大,无法放入项目,可以将图片存储在 Amazon S3 而不是 DynamoDB 中。

实施此策略时,请记住以下几点:

  • DynamoDB 不支持跨 Amazon S3 和 DynamoDB 的事务。因此,应用程序必须处理任何故障,包括清理孤立的 Amazon S3 对象。

  • Amazon S3 限制对象标识符长度。因此组织数据时必须确保,不会生成过长对象标识符或违反其他 Amazon S3 约束。

有关如何使用 Amazon S3 的更多信息,请参阅 Amazon Simple Storage Service 用户指南