dynamodb中的自动递增整数

Auto-increment integer in dynamodb

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

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

如本 SO post (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 数据进行的 RDS 集成感兴趣 API,它将对自动递增 ID 提供更多本机支持,但会丢失它并忘记它对 DynamoDB 的缩放。