存储数据并同时订购列表的最佳方式
Best way to store data and have ordered list at the same time
我有那些变化很大的数据,不会出现在我的 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 有序集
在这种情况下,我复制了数据。
我仍然需要第一种情况,但我也更新了不同排序集中的数据,我不需要使用 CRON 来构建它们。
我觉得最好的方法是第一种,但是如果我有 1000000 个用户呢?
或者有其他方法吗?
一种可能性是使用单个排序集 + 哈希。
排序集将仅用作查找,它将用户散列的键存储为值,将用户的级别存储为分数。
任何时候你添加一个新玩家/更新他们的级别,你都需要设置哈希,并将项目插入到排序集中。您可以在基于事务的管道或 lua 脚本中执行此操作,以确保它们同时 运行,从而使您的数据保持一致。
获得顶级玩家意味着获取排序集中的顶级条目,然后使用该集合中的键,使用哈希值查找这些玩家的完整数据。
希望对您有所帮助。
我有那些变化很大的数据,不会出现在我的 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 有序集
在这种情况下,我复制了数据。 我仍然需要第一种情况,但我也更新了不同排序集中的数据,我不需要使用 CRON 来构建它们。
我觉得最好的方法是第一种,但是如果我有 1000000 个用户呢?
或者有其他方法吗?
一种可能性是使用单个排序集 + 哈希。
排序集将仅用作查找,它将用户散列的键存储为值,将用户的级别存储为分数。
任何时候你添加一个新玩家/更新他们的级别,你都需要设置哈希,并将项目插入到排序集中。您可以在基于事务的管道或 lua 脚本中执行此操作,以确保它们同时 运行,从而使您的数据保持一致。
获得顶级玩家意味着获取排序集中的顶级条目,然后使用该集合中的键,使用哈希值查找这些玩家的完整数据。
希望对您有所帮助。