数据库 – 如何在DynamoDB中创建UUID?

前端之家收集整理的这篇文章主要介绍了数据库 – 如何在DynamoDB中创建UUID?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的db方案中,我需要一个自动增量主键.我怎么能实现这个功能

PS对于访问DynamoDB,我使用dynode,Node.js的模块.

解决方法

免责声明:我是Dynamodb-mapper项目的维护者

自动递增键直观的工作流程:

>得到最后的柜台位置
>添加1
>使用新的数字作为对象的索引
>保存新的计数器值
>保存对象

这只是为了解释基本思想.不要这样做,因为它不是原子的.在某些工作负载下,您可以将相同的ID分配给2个不同的对象,因为它不是原子的.这将导致数据丢失.

解决方案是使用原子ADD操作以及ALL_NEW的UpdateItem

>原子地生成一个ID
>使用新的数字作为对象的索引
>保存对象

在最坏的情况下,应用程序在保存对象之前崩溃,但不会有两次分配相同ID的风险.

还有一个问题:在哪里存储最后的ID值?我们选择了:

{
    "hash_key"=-1,#0 was judged too risky as it is the default value for integers.
    "__max_hash_key__y"=N
}

当然,为了可靠地工作,所有插入数据的应用程序都必须意识到这个系统,否则你可能再次覆盖数据.

最后一步是使流程自动化.例如:

When hash_key is 0:
    atomically_allocate_ID()
actual_save()

有关实现细节(Python,对不起),请参阅https://bitbucket.org/Ludia/dynamodb-mapper/src/8173d0e8b55d/dynamodb_mapper/model.py#cl-67

告诉你事实真相,我的公司并没有在生产中使用它,因为大多数时候最好是为用户找到一个ID,一个事务,一个日期时间,…

我在dynamodb-mapper’s documentation中写了一些例子,可以很容易地推断出Node.JS

如果您有任何问题,请随时问.

猜你在找的MsSQL相关文章