如果我只想查询:
1. Username, Xp, OtherUserData
2. User with the N-th highest Xp
我将如何做的数据结构和查询。
为1。我的结构类似于:
{用户名:{xp,otheruserdata}
我只需要查询2。还是有更好的选择?
最佳答案
我不完全确定你在问什么(xp是用户的分数吗?),但有个猜测:
要存储用户数据,请为每个用户创建一行,键入他们的用户名(假设这是唯一的和固定的),然后为每个项目创建一列:
username -> Xp other ...
value value ...
要维护高分表,请对所有用户(或高于某个阈值的用户)使用一行(可能在不同的列族中),使用列名称作为分数,并指定一个数字(longtype)比较器,以便按分数对列进行排序:
highscores -> 1000 1001 99999999 ...
user123 user345 user789 ...
然后,您可以通过查询该排序行中的最后或前n列来检索最高的n个分数。如果这行的分数太大,你可以把它去掉。
更新:正如您所指出的,多个用户可能有相同的分数。一个快速而肮脏的解决方案是将该值作为用户列表:
highscores -> 1000
"user123, user567, user899"
如果你不太可能得到大量相同分数的用户,这是可以容忍的,尽管很尴尬,因为你需要阅读、更新和编写列表。
您可以使用超级列,尽管通常不推荐使用这些超级列。
否则,您可能会使用composite column keys来区分用户,但保留按分数排序的列。
关于database - Cassandra 高分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9672192/