2012-06-13 2 views
0

В CassandraDB, используя упорядоченное семейство столбцов. Я знаю, что вы можете получить кусочки, но можете ли вы получить позицию. Например, в этом DataModel откладываю оценки, как это:получить позицию столбца

"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), вы можете рассматривать ключи как ведра с именами столбцов как конкретные баллы. PlayerScores явно существует, поэтому вы можете запросить счет для игрока.

Затем вы можете определить рейтинг, просто суммировав итоговые суммы всех баллов, превышающих общие для игрока. Поскольку баллы хранятся в именах столбцов, вы можете использовать стандартный запрос среза, чтобы получить свой диапазон, не используя для использования сохраняющего порядок разделителя (который имеет некоторые отрицательные побочные эффекты).

Смежные вопросы