【问题标题】:get column position获取列位置
【发布时间】:2012-06-14 00:52:25
【问题描述】:

在 CassandraDB 中,使用有序列族。我知道你可以得到切片,但你能得到位置。例如,在这个数据模型中,我这样保存分数:

"Scores":
{
   "1000": "bob, lucas",
   "900": "tim"
   "800": "mario"
}

如果知道用户的得分为“900”并且他的昵称是“tim”,是否有可能知道他位于有序列族的第 2 位?

【问题讨论】:

    标签: nosql cassandra


    【解决方案1】:

    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 显然存在,因此您可以查询玩家的分数。

    然后,您可以通过简单地将所有得分高于玩家得分的总和相加来确定排名。由于分数存储在列名中,因此您可以使用标准切片查询来获取您的范围,而无需使用保持顺序的分区器(这会产生一些负面影响)。

    【讨论】: