gpt4 book ai didi

amazon-dynamodb - 两个 DynamoDB 扫描段可以包含相同的哈希键吗?

转载 作者:行者123 更新时间:2023-12-05 05:01:51 24 4
gpt4 key购买 nike

我正在扫描一个巨大的表(> 1B 文档),所以我正在使用并行扫描(每个工作人员使用一个段)。

该表有一个散列键和一个排序键。

直觉上,一个段应该包含一组散列键(包括它们的所有排序键),因此一个散列键不应出现在多个段中,但我还没有找到任何文档表明这一点。

有谁知道 DynamoDB 在这种情况下的表现如何?

谢谢

最佳答案

这是一个有趣的问题。我认为很容易找到一份文件,说明每个段包含一系列不相交的散列键,并且相同的散列键不能出现在多个段中 - 但我也没有找到任何这样的文件。我很好奇是否还有其他人可以找到这样的文件。与此同时,我可以尝试提供额外的直觉,说明为什么你的猜想可能是正确的——但也可能是错误的:

我的第一直觉是你是对的:

DynamoDB 使用散列键(也称为分区键)来决定在众多存储节点中的哪个节点存储此数据的副本。共享相同分区键(具有不同排序键 值)的所有项都按排序键顺序存储在一起,因此它们可以按顺序一起查询。 DynamoDB 在分区键上使用散列函数来决定每个项目的位置(因此得名“散列键”)。

现在,如果DynamoDB需要将扫描所有数据的任务划分为“段”,那么最明智的做法是将哈希值的空间(即哈希键的哈希函数)划分为不同的大小相等的碎片。这种划分很容易做到(只需按 TotalSegments 进行数字划分),它确保每个段中的项目数量大致相同(假设有许多不同的分区),并确保扫描每个段涉及不同的存储节点,因此并行扫描可以比单个存储节点能够进行的速度更快。

但是,有迹象表明这可能不是全部。

DynamoDB documentation声称

In general, there is no practical limit on the number of distinct sort key values per partition key value.

这意味着至少在理论上,您的整个数据库(可能是 1 PB)可能位于具有数十亿个不同排序键的单个分区中。由于亚马逊的单个存储节点确实有大小限制,这意味着 DynamoDB 必须(除非上述说法不正确)支持将单个巨大分区拆分为多个存储节点。这意味着当 GetItem 查找特定项目时,DynamoDB 需要知道哪个排序键 在哪个存储节点上。这也意味着并行扫描可能 - 可能 - 将这个巨大的分区分成几部分,所有部分都扫描相同的分区但其中的排序键范围不同。我不确定我们能否完全排除这种可能性。我猜它永远不会在您只有较小的分区时发生。

关于amazon-dynamodb - 两个 DynamoDB 扫描段可以包含相同的哈希键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62533603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com