获取列位置

2024-04-04

在 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(使用前将#替换为@)

获取列位置 的相关文章

随机推荐