为DynamoDB表生成综合分区键

时间:2018-09-26 12:26:15

标签: amazon-web-services nosql amazon-dynamodb

对于DynamoDB,我确定这是一个琐碎且常见的问题,但是Google或AWS文档没有太大帮助。

我的问题很简单:

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

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

这是AWS docs中的示例架构-它使用递增数字作为分区键。但是我无法想到一种在应用程序级别(而不是在数据库级别提供DynamoDB不能提供的原子事务的数据库级别)生成非重叠序号的方法

1 个答案:

答案 0 :(得分:2)

几乎可以肯定,您希望分区键是一个唯一的东西,而无需参考现有数据,这是因为分区键的唯一性已在您的业务逻辑中假设(例如产品的序列号或电子邮件地址)用户)或因为它是通用的(最简单的方法是成为GUID,时间戳或其他一些一次性属性)。

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

如果您实际上确实需要一个递增的数字分区键,则您的应用程序中将需要有一个服务为您生成服务。您可以将其实现为单独的动态表,仅包含一行,并带有一个“计数器值”字段,您可以使用ADD update expression对其进行递增。扩展此实现会有问题。