Использование только одного ряда для классификации может быть довольно опасным, поскольку каждый ряд размещается только на одном экземпляре Cassandra. Таким образом, все игроки в вашей системе будут писать на этот ОДИН ключ - на одной машине - с риском перегрузки узла в вашем кластере. Это может привести к сбою всего кластера из-за странной цепной реакции узлов, пытающихся взять на себя нагрузку сбитого узла, когда он пытается восстановиться (это происходило на наших производственных машинах из-за ошибки, в которой был жестко закодированный тест). ключ получит все записи, которые должны были быть в отдельных строках для всех).
Решением было бы объединение ваших пользователей по их оценкам:
- 0-> 1000 = ковшА
- 1001 -> 5000 = ковш B
- 5001 -> 15000 = bucketC
и т. д.
Я бы посоветовал уменьшить ведра нижнего уровня.
И напишите свой столбец с именами столбцов как составной:
CompositeType (LongType, UTF8Type)
так, например, если вы используете UUID в качестве идентификатора игрока и longs в качестве счета, у нас будет:
- 500089845: f7bc41d8-c1c6-489c-bb2c-f86fccc7681c
- 4100085589: 2ae91e9f-1512-4ef8-8441-9f48e21fb11b
вы можете сделать это с конкатенацией строк, но вам нужно будет записать все ведущие нули, чтобы компаратор UTF8 сравнивал все оценки в правильном порядке.
- 000000500089845: f7bc41d8-c1c6-489c-bb2c-f86fccc7681c
- 000004100085589: 2ae91e9f-1512-4ef8-8441-9f48e21fb11b
без начальных нулей будет
- 000004100085589: 2ae91e9f-1512-4ef8-8441-9f48e21fb11b
- 000000500089845: f7bc41d8-c1c6-489c-bb2c-f86fccc7681c
Таким образом, вам не нужно читать, чтобы изменить вектор, json, составной столбец или суперколонку людей, имеющих одинаковые оценки, поскольку каждый счет представляет собой отдельный столбец. Вы можете поместить любую нужную информацию в столбец, чтобы можно было получить все за одно чтение (без необходимости извлекать информацию об игроке с другим чтением, лично я сделал бы это с сериализованным объектом json или byte, который содержит все, что мне нужно) .
Чтобы прочитать: запрос с инвертированным диапазоном (самый высокий сначала) в строках, которые вы хотите, добьется цели.
Вы можете варьировать разновидности своей системы, изменяя при этом и структуру сегментов, если у вас достаточно рядов для касания всех узлов, таким образом, распределяя нагрузку по вашему токен-кольцу.
надеюсь, что это было полезно