首页 > 解决方案 > 为 DynamoDB 表生成合成分区键

问题描述

我确信这是一个关于 DynamoDB 的微不足道且常见的问题,但 Google 或 AWS 文档并没有太大帮助。

我的问题很简单:

生成分区键的模式是什么?

在 RDBMS 中,这非常简单,例如使用标识列 (MSSQL) 或序列 (Postgres)。但是,当涉及到 DynamoDB(我想这适用于任何 NoSQL 数据库)时,尚不清楚如何生成分区键——它应该是一个 GUID 还是一个在表本身中维护的序列?

这是来自AWS 文档的示例模式- 它使用递增的数字作为分区键。但是我想不出一种在应用程序级别生成非重叠序列号的方法(而不是在提供 DynamoDB 不提供的原子事务的数据库级别)

标签: amazon-web-servicesnosqlamazon-dynamodb

解决方案


几乎可以肯定,您希望分区键是您知道是唯一的东西,而不参考现有数据,因为它的唯一性在您的业务逻辑中被假定(如产品的序列号或用户的电子邮件地址)或者因为它是普遍唯一的(最简单的方式是作为 GUID、时间戳或其他一些一次性属性)。

大规模生成顺序唯一标识符实际上很难进行,而且大多数 RDBMS 实现实际上并不像您期望的那样严格(例如,它们通常不保证不会跳过数字,只保证它们会是唯一且单调递增的)。如果您认为需要在表中使用递增的 id,请仔细考虑为什么以及是否可以避免这样做。

如果你确实需要一个递增的数字分区键,你需要在你的应用程序中有一个服务来为你生成它。您可以将其实现为一个单独的 dynamodb 表,该表仅包含一行,并带有一个“计数器值”字段,您可以使用ADD 更新表达式递增该字段。扩展此实现将是有问题的。


推荐阅读