Я прочитал довольно много статей и много вопросов/ответов о SO о Cassandra, но я до сих пор не могу понять, как Cassandra решает, к какому node (s) следует при чтении данных.
Во-первых, некоторые предположения о мнимом кластере:
- Стратегия репликации = простая
- Использование Random Partitioner
- Кластер из 10 узлов
- Коэффициент репликации 5
Здесь мое понимание того, как пишет работа, основанная на различных статьях Datastax и других сообщениях в блоге, которые я читал:
- Клиент отправляет данные в случайный node
- "random" node определяется на основе хеша MD5 первичного ключа.
-
Данные записываются в файл commit_log и memtable, а затем разворачиваются 4 раза (с RF = 5).
-
Затем выбираются 4 следующих узла в кольце, и данные сохраняются в них.
До сих пор так хорошо.
Теперь возникает вопрос, когда клиент отправляет в кластер запрос на чтение (скажем, CL = 3), как Кассандра знает, какие узлы (5 из 10 как худший сценарий) ему нужно связаться, чтобы получить это данные? Разумеется, это не будет для всех 10 узлов, поскольку это будет неэффективно.
Правильно ли я полагаю, что Cassandra снова выполнит хэш MD5 первичного ключа (запроса) и выберет node в соответствии с этим, а затем ходит по кольцу?
Также, как работает сетевая топология? если у меня несколько центров обработки данных, как Кассандра знает, какие узлы в каждой DC/Rack содержат данные? Из того, что я понимаю, только первый node является очевидным (поскольку хэш первичного ключа привел к тому, что node явно).
Извините, если вопрос не очень ясен и, пожалуйста, добавьте комментарий, если вам нужна более подробная информация о моем вопросе.
Большое спасибо,