在我的db方案中,我需要一个自动增量主键.我怎样才能实现这个功能?
PS要访问DynamoDB,我使用dynode,模块用于Node.js.
在我的db方案中,我需要一个自动增量主键.我怎样才能实现这个功能?
PS要访问DynamoDB,我使用dynode,模块用于Node.js.
免责声明:我是Dynamodb mapper项目的维护者
自动增量密钥的直观工作流程:
这只是为了解释根本的 idea .永远不要这样做,因为它不是原子的.在特定的工作负载下,您可能会将相同的ID分配给2+个不同的对象,因为它不是原子的.这将导致数据丢失.
解决方案是使用atomic ADD操作和UpdateItem中的ALL_NEW:
在最坏的情况下,应用程序在保存对象之前崩溃,但绝不会冒险两次分配相同的ID.
还有一个问题:在哪里存储最后一个ID值?我们 Select 了:
{
"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
如果你有什么问题,尽管问.