Я думаю, что этот вопрос лучше всего использовать в списке рассылки cassandra-user; вот где люди.
Cassandra не имеет автоматической балансировки нагрузки еще, но он может сделать это в недалеком будущем. Теперь это может быть ветвь 0,5.
По существу, когда вы загружаете узел в уже запущенную систему, он должен найти место в кольце, которое лучше всего загрузит баланс и разместит его там. Если вы добавляете узлы по одному (т. Е. Дождаться того, что один узел завершит загрузку перед добавлением другого), это должно работать очень хорошо, при условии, что распределение ключей не слишком сильно изменится с течением времени.
Однако ваши ключи могут меняться со временем (особенно если они основаны на времени), поэтому вам может понадобиться обходной путь.
Это зависит от того, что вы хотите отсканировать по диапазону. Если вам нужно всего лишь сканировать PART ключа, вы можете хэшировать бит, который вы не хотите использовать для сканирования, и использовать его в качестве первой части ключа.
я буду использовать термин «раздел» здесь для обозначения части ключа вы не хотите, чтобы диапазон сканирования
function makeWholeKey(partition, key) {
return concat(make_hash(partition), partition, key);
}
Теперь, если вы хотите, чтобы диапазон сканирования клавиш в пределах данного раздела , вы можете варьировать сканирование между makeWholeKey (p, start) и makeWholeKey (p, end)
Но если вы хотите отсканировать разделы, вам не повезло.
Но вы можете сделать свои узлы маркерами, которые равномерно распределены по диапазону вывода make_hash(), и вы получите равномерно распределенные данные (при условии, что у вас есть разделы ENOUGH, которые не все объединяются на одном или два значения хеширования)
Я нашел более подробную информацию о идее «добавить хеш к ключам» в этом блоге http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/ – deepblue