我创建了一张表"得分"在DynamoDB中存储游戏的分数。
该表具有以下属性:
现在我想查询"前10"游戏得分(排行榜)。
在DynamoDB中,无法创建没有分区键的索引。
那么,我如何以可扩展的方式执行此查询?
答案 0 :(得分:1)
没有。您将始终需要分区键。 DynamoDB能够提供所需的大规模速度,因为它存储的记录具有相同的分区密钥物理,而不是100个不同的磁盘(或SSD,甚至是服务器)。
如果您有一个成熟的查询用例(这是DynamoDB的设计目的),例如“前10个每月得分”然后您可以将日期时间哈希到派生的月属性,例如12/01/2017,01/01/201,依此类推,然后使用它作为您的分区键,以便在同一个月生成的所有分数将“bucketized”到同一分区中,以获得最佳查找性能。然后,您可以将得分作为排序键。
当然,您可以为每周和每日分数提供其他表格(或LSI)。或者您甚至可以选择最精细的存储桶,并在应用程序代码中自行总结结果。您可能需要提取超过10条记录才能在总体水平上足够接近达到100%的准确度......我不知道。测试一下。如果我处理的是金钱/佣金,我会不会依赖它,而是关注那些关心的游戏分数:)
注意:如果您决定使用此路线,而不是使用“12/10/2017”等作为分区值,我会使用整数偏移,例如UNIX纪元(四舍五入代表本月的第一个午夜),以便更容易计算/编码。我使用友好日期来更好地说明方法。