[英]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 范围内。 还有其他领域,但对这个问题并不感兴趣。
在访问模式方面,我需要:
ID
不时更新这些值。 我想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 空间的值( a3
或r1
或其他),并从开始对 SK 进行范围查询,限制为 1。
如果没有拼图具有所选的难度级别(将难度加一个并重试)或者查询中不存在拼图 ID(将难度添加一个并循环以获取下一个难度的头拼图),则添加特殊处理。
结果应该是非常有效和负担得起的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.