0
在CassandraDB中,使用有序列系列。我知道你可以得到切片,但你能得到位置。例如,在這個數據模型我保存的分數是這樣的:獲取列位置
"Scores":
{
"1000": "bob, lucas",
"900": "tim"
"800": "mario"
}
是否有可能,知道用戶的得分爲「900」,他的暱稱是「添」,要知道他在2位有序的列家族?
在CassandraDB中,使用有序列系列。我知道你可以得到切片,但你能得到位置。例如,在這個數據模型我保存的分數是這樣的:獲取列位置
"Scores":
{
"1000": "bob, lucas",
"900": "tim"
"800": "mario"
}
是否有可能,知道用戶的得分爲「900」,他的暱稱是「添」,要知道他在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),你可以把這些鍵看作是具有列名作爲特定分數的桶。玩家分數顯然存在,所以你可以查詢一名玩家的分數。
然後,您可以通過簡單總結所有分數的總和大於玩家的總數來確定排名。由於分數存儲在列名稱中,因此您可以使用標準分片查詢來獲取您的範圍,而無需使用保留順序的分區器(它具有一些負面影響)。