我的那些数据变化不足以不在我的postgres表中。 我想从这些数据中获得最高分。 我试图找出一种方法来考虑:
1。使用Hash + CRON经常构建有序集
在这种情况下,我有很多用户数据存储在哈希中,如下所示:
u:25463:d = { "xp":45124, "lvl": 12, "like": 15; "liked": 2 }
u:2143:d = { "xp":4523, "lvl": 10, "like": 12; "liked": 5 }
如果我想获得更高级别的前15名。我不认为我可以用一个命令来做到这一点。我想我需要扫描所有u:x:d数据并从中构建有序集合。我错了吗? 在这种情况下表现怎么样?
2.Multiple Ordered sets
在这种情况下,我复制了数据。 我仍然需要第一个案例,但我也更新了不同的排序集中的数据,我不需要使用CRON来构建它们。
我觉得最好的方法是第一个,但如果我有1000000个用户怎么办?
还是有另一种方式吗?
答案 0 :(得分:1)
一种可能性是使用单个有序集合+哈希。
排序集只是用作查找,它会将用户哈希的密钥存储为值,将其级别存储为分数。
每当你添加一个新玩家/更新他们的等级时,你都会设置散列,并将该项插入到有序集中。您可以在基于事务的管道或lua脚本中执行此操作,以确保它们同时运行,从而保持数据的一致性。
获得顶级玩家意味着抓住排序集中的顶级条目,然后使用该组中的键,以查找具有散列的那些玩家的完整数据。
希望有所帮助。