加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:31:45 所属栏目:MsSql教程 来源:网络整理
导读:在我的db方案中,我需要一个自动增量主键.我怎么能实现这个功能? PS对于访问DynamoDB,我使用dynode,Node.js的模块. 解决方法 免责声明:我是Dynamodb-mapper项目的维护者 自动递增键直观的工作流程: 得到最后的柜台位置 添加1 使用新的数字作为对象的索引 保
在我的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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读