首页 > 解决方案 > dynamodb 中的自增整数

问题描述

我正在为发票应用程序建模 dynamodb 图,我正在寻找生成需要从 1 递增到 X 的唯一发票 ID。在 2019 年,有一个解决方案可以解决将 aws appsync 和 dynamodb 作为数据源的此类问题?

标签: amazon-dynamodbaws-amplifyaws-appsync

解决方案


在 DynamoDB 中不推荐使用自动递增整数模式,尽管可以使用应用程序级逻辑实现类似的东西。DynamoDB 表根据表的分区键分布到许多逻辑分区。然后根据它们的排序键在该分区内对项目进行排序。你需要决定什么样的结构对你的应用有意义,以及自动递增对你的应用意味着什么。最简单的情况是省略排序键并将自动递增的 id 视为分区键,这将保证其唯一性,但也意味着每一行都存在于自己的分区中,因此列出所有发票必须是Scan和因此不会保留对您的应用可能有意义或可能没有意义的顺序。

正如这篇 SO 帖子(How to use auto increment for primary key id in dynamodb)中所述,您可以使用如下代码:

const params = {
  TableName: 'CounterTable',
  Key: { HashKey : 'auto-incrementing-counter' },
  UpdateExpression: 'ADD #a :x',
  ExpressionAttributeNames: {'#a' : "counter_value"},
  ExpressionAttributeValues: {':x' : 1},
  ReturnValues: "UPDATED_NEW" // ensures you get value back the new key
};
new AWS.DynamoDB.DocumentClient().update(params, function(err, data) {});

以原子方式递增存储在由分区键“auto-incrementing-counter”指定的CounterTable行中的整数。在原子增量之后,您可以使用返回的 id 创建新的Invoice

您可以使用 DynamoDB 和 AppSync 实现此模式,但首先要确定它是否适合您的用例。您可能还对通过 RDS 数据 API 进行的 RDS 集成感兴趣,该 API 将对自动递增 ID 提供更多本机支持,但会失去它并忘记它对 DynamoDB 的扩展。


推荐阅读