繁体   English   中英

DynamoDB 表结构 - 按没有任何 hash 键的数字字段排序

[英]DynamoDB table structure - sort by numeric field without any hash key

我有一堆(编辑:250 万)拼图,我想在 DynamoDB 中存储和查询。

每个谜题的相关结构如下:

ID 困难 其他字符串 ...
ab 1500 foo1 ...
x0 1645 foo2 ...
c2 1645 foo3 ...
d5 1431 foo4 ...
盎司 1500 foo5 ...

每个ID都是一个唯一的字符串。 每个Difficulty都是一个数值,大致在 0-3000 范围内。 还有其他领域,但对这个问题并不感兴趣。

在访问模式方面,我需要:

  1. 通过ID不时更新这些值。
  2. 获取给定范围内的随机拼图,例如 1500 +/- 50。

我想ID最好是HASH KEY ,但不相信我可以将Difficulty字段作为SORT KEY ,因为可能存在重复值。 没有其他需要对数据进行分区,因此不需要任何其他类型的复合键,imo。

我是否应该将ID作为HASH KEY并进行scan操作以获取随机拼图,按Difficulty过滤? 这可能吗? 有没有更好的方法来 model 这个数据? 我想在SORT KEY中设置难度(以某种方式)将有助于加快搜索速度并使用更少的资源来这样做。

非常感谢

我建议创建一个 GSI,将评级作为分区键,将拼图 ID 作为排序键。

鉴于有 250 万个谜题和 3,000 个难度等级,每个等级大约有 1,000 个谜题。

因此,要选择一个评分为 1500 +/- 50 的随机拼图,您首先(在数据库之外,在您的中间件中)随机选择一个评分以在 1450 和 1550 之间使用,然后您对该 GSI PK 编号进行查询以选择一个随机谜题内。

如何在查询中随机选择? 我建议你(再次在数据库之外)随机选择一个适合拼图 ID 空间的值( a3r1或其他),并从开始对 SK 进行范围查询,限制为 1。

如果没有拼图具有所选的难度级别(将难度加一个并重试)或者查询中不存在拼图 ID(将难度添加一个并循环以获取下一个难度的头拼图),则添加特殊处理。

结果应该是非常有效和负担得起的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM