Лучшей практикой Cassandra является использование RandomPartitioner - это дает вам «бесплатную» балансировку нагрузки, если ваши токены распределены равномерно.К сожалению, со случайным разделителем запросы на диапазон строк (т.е. get_range_slices) возвращают ключи в случайном порядке.
Это хорошо для подкачки по всему семейству столбцов (и если это то, что вы хотите, то ваш подход будет работать).Но если вы просто хотите пролистать меньший непрерывный диапазон клавиш строк, это не сработает.
Один из способов решить эту проблему - использовать широкие строки и составные столбцы.Например, семейство столбцов, которое выглядит следующим образом:
{
row1 -> {column1: value1, column2: value2},
row2 -> {column3: value3, column4: value4},
...
}
будет транспонировано, чтобы выглядеть так:
{
row1-10 -> {
[row1, column1]: value1, [row1, column2]: value2,
[row2, column3]: value3, [row2, column4]: value4,
...
}
...
}
И вы можете выполнить запрос диапазона, выполнив фрагмент столбца (get_slice) в правой строке, между правыми столбцами.т. е.
get_range_slice(start=row1, end=row2)
становится:
get_slice(row=row1-10, start=[row1, null], end=[row2, null])
Обратите внимание на нулевое второе измерение на ключах столбцов.
Хитрость заключается в том, чтобы выбрать ключи строк ('bucket')так, что ваши столбцы не станут слишком большими (это будет плохо работать для обычной Cassandra), но при этом ваши запросы не будут нуждаться в слишком большом количестве строк.Это будет зависеть от вашего среднего размера запроса и распределения ваших uuids, но хорошим кандидатом может быть использование UUID1 в качестве ключей строки и [UUID2, UUID3] в качестве первых измерений ключей столбца.