我在DynamoDB中创建了一个表“分数”来存储游戏的分数。
该表具有以下属性:
现在我想查询游戏的“前十名”分数(排行榜)。
在DynamoDB中,不可能在没有分区键的情况下创建索引。
那么,如何以可伸缩的方式执行此查询呢?
发布于 2018-01-15 15:35:46
不是的。您将始终需要分区键。DynamoDB能够按比例提供所需的速度,因为它使用物理上相近的分区键存储记录,而不是在100个不同的磁盘(或SSD,甚至服务器)上存储记录。
如果您有一个成熟的查询用例(这就是DynamoDB设计的目的)。“前10个月分数”,然后您可以将datetime散列为派生的datetime属性,如12/01/2017、01/01/2018等,然后使用它作为分区键,这样在同一个月中生成的所有分数都将被“分解”到同一个分区中,以获得最佳的查找性能。然后,您可以将评分作为排序键。
当然,您可以有其他表格(或LSI)的每周和每天的分数。或者,您甚至可以选择最细粒度的桶,并在应用程序代码中自己总结结果。您将需要拉更多的10多个记录,以获得足够接近100%的准确性,在汇总水平.我不知道。试试看。如果我处理的是金钱/佣金,那么我就不会依赖它,而是那些在乎我的游戏成绩:)
注意:如果您决定使用此路由,那么我将使用整数偏移,例如UNIX时代(四舍五入以表示本月的第一个午夜),而不是使用"12/10/2017“等作为分区值。我用友好的日期来更好地说明这种方法。
https://stackoverflow.com/questions/48253296
复制相似问题