在 Cassandra DB 中,使用有序列族。我知道你能得到切片,但你能得到位置吗?例如,在此数据模型中,我保存如下分数:
"Scores":
{
"1000": "bob, lucas",
"900": "tim"
"800": "mario"
}
知道用户的分数为“900”并且他的昵称是“tim”,是否有可能知道他位于有序列族的位置 2?
Cassandra 不提供开箱即用的此功能,但您可以使用三个单独的 CF 自行实现此功能。考虑这种情况:
"Scores":
{
"1000": "bob, lucas"
"900": "tim"
"800": "mario"
}
"PlayerScores":
{
"bob": "1000"
"lucas": "1000"
"tim": "900"
"mario": "800"
}
"ScoreTotals":
{
"1000":
{
"1000":2
}
"900":
{
"900":1
}
"800":
{
"800":1
}
}
ScoreTotals CF 将与计数器列一起使用,以便在用户每次达到该分数时递增/递减该值。如果您的分数有额外的粒度(例如 910 与甚至 900),您可以将键视为存储桶,其中列名称作为特定分数。 PlayerScores 显然存在,因此您可以查询玩家的分数。
然后,您只需将所有大于玩家得分的总分相加即可确定排名。由于分数存储在列名称中,因此您可以使用标准切片查询来获取范围,而无需使用保留顺序的分区器(这有一些负面影响)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)