【问题标题】:ratio between unique hash key and range key in dynamo dbdynamo db中唯一哈希键和范围键之间的比率
【发布时间】:2014-04-30 00:39:11
【问题描述】:

如果我选择我的哈希键和范围键,使得唯一哈希键的数量非常少(最大:1000),而唯一的范围键更多,这会不会有问题?

唯一哈希和范围键的数量之间的比率是否会影响信息检索的性能?

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    如果有几个哈希键和多个范围键,这应该不是问题:

    1. 哈希键的数量不会太少
    2. 您的访问权限随机分布在哈希键中
    3. 您无需扩展到极端水平

    根据AWS Developer Guidelines for Working with Tables

    预置吞吐量取决于主键选择,并且 单个项目的工作负载模式。存储数据时,DynamoDB 将表中的项目划分为多个分区,并分发 数据主要基于散列键元素。提供的 与表相关的吞吐量也平均分配在 分区,不共享预配置吞吐量 分区。

    基本上,每个哈希键都驻留在单个节点(即服务器)上。实际上,它被冗余存储以防止数据丢失,但在此讨论中可以忽略。当您提供吞吐量时,您间接确定了散布散列键的节点数量。但是,无论您提供多少吞吐量,单个哈希键都受到单个节点可以处理的限制。

    解释我的三个警告:

    1.哈希键的数量不会太少
    您提到最多 1000 个哈希键,但问题是最小值是多少。例如,如果只有 10 个哈希键,那么您将很快达到每个键的吞吐量限制,并且实际上不会实现预配置的吞吐量。

    2.您的访问权限随机分布在哈希键中
    如果有少量“热”键,则拥有多少散列键并不重要。也就是说,如果您经常只读取或写入散列键的一小部分子集,那么您将达到存储这些键的节点的吞吐量限制。

    3.您无需扩展到极端水平
    即使假设您有 1000 个不同的哈希键并且您的访问权限是随机分布在它们之间的,如果您需要扩展到极端级别,您最终将达到每个哈希键位于单独节点上的点。也就是说,如果您提供足够的吞吐量以将每个哈希键分配给一个单独的节点(即您有 1000 多个节点),那么超出该级别的任何吞吐量都将不会实现,因为您将达到每个节点的每个键的限制.


    范围键与哈希键的比率对获取、扫描和查询性能应该几乎没有影响。

    据我了解,每个哈希键的范围键都有效地存储在某种可以很好扩展的索引中。但是,请记住,给定哈希键的所有行都一起存储在同一个节点上,因此您可能会遇到给定哈希键的数据过多的情况。 AWS Limits in DynamoDB 声明:

    对于有本地二级索引的表,item 有限制 集合大小:对于每个不同的哈希键值,总大小 所有表和索引项的大小不能超过 10 GB。取决于你的 项目大小,这可能会限制每个散列的范围键的数量 价值。

    【讨论】:

      【解决方案2】:

      据我所知,这无关紧要。负载分布取决于访问的“频率”而不是“可能的组合”。如果您的访问权限均匀分布在您正在使用的 1000 个密钥中,那么就可以了 - 这意味着通过 key1 获取的概率应该类似于获取 key10 或 key100 的概率。在内部,我猜他们会将您的 1000 个密钥分成 3 个组,每个组“可能”由 3 台机器提供服务。您需要确保您的访问几乎是统一的,以便所有 3 台机器获得统一的负载分担。

      【讨论】:

      • 如果您对回复感到满意,您能否将其标记为正确答案?
      猜你喜欢
      • 2020-06-17
      • 2022-08-02
      • 2016-12-09
      • 2021-08-03
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多