我正在为发票应用程序建模一个动态模型图,我正在寻找生成需要从1递增到X的唯一发票ID。在2019年,有一种解决此类问题的解决方案,其中包含aws appsync和dynamodb作为数据源?
答案 0 :(得分:0)
在DynamoDB中,不建议使用自动递增整数模式,尽管可以使用应用程序级逻辑来实现类似的功能。 DynamoDB表根据表的分区键分配到许多逻辑分区。然后,根据其排序键在该分区内对项目进行排序。您将需要确定哪种结构对您的应用有意义,以及自动递增对您的应用意味着什么。最简单的情况是省略排序键,并将自动递增的id视为分区键,这样既可以保证其唯一性,又会暗示每一行都位于其自己的分区中,因此列出所有发票必须为扫描,因此不会保留可能对您的应用有意义的顺序。
如本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来创建新的发票。
您可以使用DynamoDB和AppSync实施此模式,但首先要确定的是它是否适合您的用例。您可能还对通过RDS数据API进行RDS集成感兴趣,该API将对自动递增ID提供更多的本机支持,但会迷失于它的设置而忘记了DynamoDB的扩展。