Фон:
Я новичок в Кассандре и все еще пытаюсь сосредоточиться на внутренней работе.
Я думаю об использовании Cassandra в приложении, которое будет иметь только ограниченное количество узлов (менее 10, чаще всего 3). В идеале каждый узел в моем кластере должен иметь полную копию всех данных приложения. Итак, я подумываю установить коэффициент репликации на размер кластера. Когда добавляются дополнительные узлы, я бы изменил пространство ключей, чтобы увеличить параметр репликации (восстановление nodetool, чтобы гарантировать получение необходимых данных).
Я бы использовал NetworkTopologyStrategy для репликации, чтобы воспользоваться знаниями о центрах обработки данных.
Как на самом деле работает разбиение в этой ситуации? Я читал о комбинации узлов и ключей разделов, образующих кольцо в Cassandra. Если все мои узлы «несут ответственность» за каждый фрагмент данных, независимо от значения хеш-функции, вычисленного секционером, могу ли я иметь только кольцо из одного ключа раздела?
Есть ли у этого типа развертывания Cassandra огромные недостатки? Я предполагаю, что в фоновом режиме будет происходить много асинхронной репликации, поскольку данные распространяются на каждый узел, но это одна из целей дизайна, поэтому я согласен.
Уровень согласованности при чтении, вероятно, обычно будет «one» или «local_one».
Уровень согласованности при записи обычно составляет «два».
Актуальные вопросы, на которые нужно ответить:
- Является ли коэффициент репликации == размер кластера общей (или даже разумной) стратегией развертывания, если не считать очевидного случая кластера из одного?
- Действительно ли у меня есть кольцо из одного раздела, в котором все возможные значения, сгенерированные разделителем, поступают в один раздел?
- Считается ли каждый узел «ответственным» за каждую строку данных?
- Если бы я использовал последовательность записи «один», всегда ли Cassandra записывает данные на узел, с которым связывается клиент?
- Есть ли другие недостатки этой стратегии, о которых я не знаю?