0

CassandraDBで、順序付けられた列ファミリーを使用します。私はあなたがスライスを得ることができることを知っています、しかしあなたは位置を得ることができます。たとえば、このデータモデルでは、次のようなスコアを保存します。

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

ユーザーのスコアが「900」で、ニックネームが「tim」であることを知っていて、彼が順序付けられた列ファミリーの2番目の位置にいることを知ることは可能ですか?

4

1 に答える 1

2

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は明らかに存在するため、プレーヤーのスコアを照会できます。

次に、プレーヤーのスコアよりも大きいすべてのスコアの合計を単純に合計することで、ランキングを決定できます。スコアは列名に格納されるため、標準のスライスクエリを使用して、順序を保持するパーティショナー(いくつかのマイナスの副作用があります)を使用せずに範囲を取得できます。

于 2012-06-13T16:52:25.250 に答える