2012-06-13 109 views
0

在CassandraDB中,使用有序列系列。我知道你可以得到切片,但你能得到位置。例如,在這個數據模型我保存的分數是這樣的:獲取列位置

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

是否有可能,知道用戶的得分爲「900」,他的暱稱是「添」,要知道他在2位有序的列家族?

回答

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甚至900),你可以把這些鍵看作是具有列名作爲特定分數的桶。玩家分數顯然存在,所以你可以查詢一名玩家的分數。

然後,您可以通過簡單總結所有分數的總和大於玩家的總數來確定排名。由於分數存儲在列名稱中,因此您可以使用標準分片查詢來獲取您的範圍,而無需使用保留順序的分區器(它具有一些負面影響)。