【问题标题】:DynamoDB Primary Key strategyDynamoDB 主键策略
【发布时间】:2016-03-14 23:27:07
【问题描述】:

我是第一次涉足 DynamoDB(使用 boto3),但我不确定如何定义我的分区键。我习惯了SQL,在这里你可以使用AUTO_INCREMENT来确保Key总是增加。

我在 DynamoDB 中没有看到这样的选项 - 相反,当使用 put_item 时,“主键属性是必需的” - 我认为这意味着我必须明确定义值(事实上,如果我把它关掉,我得到botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: Missing the key id in the item)

如果已经有 id 为 1、2、3、...N 的行,我自然希望我插入的下一行具有主键 N+1。但我不知道如何生成 - here 给出的解决方案都是不完美的。

我是否应该独立生成主键值,也许通过散列项目的其他值?如果我这样做,是不是有(小)散列冲突的机会?话又说回来,既然 DynamoDB 似乎确定了partition based on a hash of the Partition Key,我有什么理由不简单地使用一个随机的足够长的字符串?

【问题讨论】:

    标签: amazon-web-services primary-key amazon-dynamodb boto3


    【解决方案1】:

    DynamoDb 不支持生成密钥,您必须自己指定一个。您无法可靠地生成顺序 ID。

    一种常见的方法是使用 UUID。

    【讨论】:

    • 谢谢!那么,如果主键是一个本质上随机的值,它的用途是什么?为什么 DyanmoDB 不自己生成 - 或者,换句话说,提前知道/确定项目的主键对我有什么好处?
    • 我认为这是一个技术决策,因为它是一个分布式数据存储。我现在只是在猜测,但是当数据共享(分布在多个实例中)时,确定顺序系列中的下一个数字将成为瓶颈。所有人都必须共享一个柜台。
    • 我同意 DanneJ 的观点。虽然,如果你坚持实现没有瓶颈的顺序序列,但会有一点延迟,我建议你尝试使用stateful.co。这是一个开源的原子计数器服务。
    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多