Cassandraはこの機能をすぐには提供しませんが、3つの別々の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は明らかに存在するため、プレーヤーのスコアを照会できます。
次に、プレーヤーのスコアよりも大きいすべてのスコアの合計を単純に合計することで、ランキングを決定できます。スコアは列名に格納されるため、標準のスライスクエリを使用して、順序を保持するパーティショナー(いくつかのマイナスの副作用があります)を使用せずに範囲を取得できます。