Как Кассандра находит узел, который содержит данные?

Я прочитал довольно много статей и много вопросов / ответов на SO о Cassandra, но я все еще не могу понять, как Cassandra решает, на какой узел (ы) идти, когда он читает данные.

Сначала несколько предположений о воображаемом кластере:

Стратегия репликации = простаяИспользование Случайного РазделителяКластер из 10 узловКоэффициент репликации 5

Вот мое понимание того, как работает запись, основываясь на различных статьях Datastax и других постах в блоге, которые я прочитал:

Клиент отправляет данные на случайный узел«Случайный» узел определяется на основе хеша MD5 первичного ключа.

Данные записываются в commit_log и memtable, а затем распространяются 4 раза (с RF = 5).

Затем выбираются 4 следующих узла в кольце и в них сохраняются данные.

Все идет нормально.

Теперь возникает вопрос: когда клиент отправляет запрос на чтение (скажем, с CL = 3) в кластер, как Cassandra узнает, с какими узлами (5 из 10 в худшем случае) ему необходимо связаться, чтобы получить эти данные? Конечно, это не все 10 узлов, поскольку это было бы неэффективно.

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

Кроме того, как работает случай с топологией сети? если у меня несколько центров обработки данных, как Cassandra узнает, какие узлы в каждом DC / Rack содержат данные? Из того, что я понимаю, очевиден только первый узел (поскольку хэш первичного ключа явно привел к этому узлу).

Извините, если вопрос не очень понятен, и, пожалуйста, добавьте комментарий, если вам нужна более подробная информация о моем вопросе.

Большое спасибо,

Ответы на вопрос(1)

Ваш ответ на вопрос