Amazon dynamodb 如何有效地分割dynamoDB分区?

Amazon dynamodb 如何有效地分割dynamoDB分区?,amazon-dynamodb,Amazon Dynamodb,我有一个用例,其中生成的分区数量很低,这就产生了节流问题 假设我的项目有几个字段,其中三个是organizationId、createdTime和itemType。我们正在尝试实现分页,并希望按照createdTime的降序检索项目 我们拥有的GSI是organizationId(哈希)和createdTime(范围)(非常糟糕)。我们选择此选项的原因是,这是我们可以按整个组织的排序顺序检索项目的唯一方法。后来,我们开始将itemType附加到organizationId,然后散列键变成orga

我有一个用例,其中生成的分区数量很低,这就产生了节流问题

假设我的项目有几个字段,其中三个是
organizationId、createdTime和itemType
。我们正在尝试实现分页,并希望按照createdTime的降序检索项目

我们拥有的GSI是organizationId(哈希)和createdTime(范围)
(非常糟糕)。我们选择此选项的原因是,这是我们可以按整个组织的排序顺序检索项目的唯一方法。后来,我们开始将itemType附加到organizationId,然后散列键变成
organizationId itemType
。但是这些项目类型就像其中的一小部分,所以我们仍然看到节流问题

我想让这个性能更高效。如果我们将记录拆分为10/20/50个随机分区,那么收集所有数据并按排序顺序给出数据将是一项非常繁重的操作,而且非常耗时。我知道这是最糟糕的

我知道对于许多在dynamoDB上工作的人来说,应该有很多这样的用例。在迪纳摩,人们是如何做到这一点的?您是否认为dynamoDB的用例是错误的,或者有任何改进的想法(比如计数器..每个计数器分区都有有限的记录集..如果有任何并发操作发生,请锁定计数器分区..等等)


您的想法/建议将真正帮助我们解决这个庞大的用例。

您只需为每个记录分配一个uniq id/哈希,并在uniqid上创建一个仅哈希表即可

然后根据需要添加尽可能多的GSI索引。
例如:OrganizationID+createdTime

大多数情况下,使用带有投影属性=键的GSI索引是最好的选择,因为它体积小、速度快,可以在一个查询中提取数千项。此外,表读取更便宜,在非一致性读取的情况下甚至便宜10倍,而非仅键索引也会更新GSI,从而导致写入成本降低

仅适用于钥匙的完美案例:
显示分页的数据,对于50/100个项目的每个区块,执行项目的批处理


此外,不必为itemType创建另一个索引,您可以使用filterExpression仅选择所需的itemType,并执行尽可能多的查询,直到获得所需数量的记录以返回,然后通过批读取丰富数据。您只需为每个记录分配一个uniq id/哈希,并在uniqid上创建一个仅哈希表即可

然后根据需要添加尽可能多的GSI索引。
例如:OrganizationID+createdTime

大多数情况下,使用带有投影属性=键的GSI索引是最好的选择,因为它体积小、速度快,可以在一个查询中提取数千项。此外,表读取更便宜,在非一致性读取的情况下甚至便宜10倍,而非仅键索引也会更新GSI,从而导致写入成本降低

仅适用于钥匙的完美案例:
显示分页的数据,对于50/100个项目的每个区块,执行项目的批处理


另外,不是为itemType创建另一个索引,您可以使用filterExpression仅选择所需的项目类型,并执行尽可能多的查询,直到获得所需数量的记录以返回,然后通过批读取来丰富数据。您的答案没有给出您试图投射的内容的清晰程度。您的答案没有给出您试图投射的内容的清晰程度。