Уровень согласованности и коэффициент репликации Cassandra

Я новичок в Кассандре. Предположим, у меня есть 3 узла, а коэффициент репликации (RF) пространства ключей равен 3.

  1. Могу ли я с уверенностью предположить, что если 2/3 узла не работают, я все равно получаю полные данные для запроса независимо от уровня согласованности?
  2. Удерживая 2/3 узлов отключенными, какой уровень согласованности обеспечит мне полные данные для запроса?

person Guda uma shanker    schedule 05.08.2017    source источник


Ответы (2)


Это зависит от того, какой уровень согласованности вы использовали для запросов на запись и чтение.

For strong consistency: R + W > N    
For eventual consistency: R + W =< N, where     
    - R is the consistency level of read operations     
    - W is the consistency level of write operations    
    - N is the number of replicas 

В нашем распоряжении R + W ‹= 3
Теперь предположим, что мы использовали QUORUM для операций чтения и ONE для записи.

    quorum = (sum_of_replication_factors / 2) + 1 = (3/2) + 1 = 2     
    read = 1   
    R + W <=3 is satisfied in our case.

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

Возвращаясь к вашему вопросу, если бы использовался только один узел, то в конечном итоге у вас не было бы согласованности. Вы можете использовать ONE как для чтения, так и для записи, но это не поможет. Предполагая, что узлы снова будут работать, я бы предпочел пользователя LOCAL_QUORUM для записи и TWO для чтения.

person Bigby    schedule 05.08.2017
comment
Итак, если я пишу в таблицу (RF равно 3) с согласованностью записи как ОДИН, Cassandra реплицирует мои данные или нет? - person Guda uma shanker; 08.08.2017
comment
Да, это будет, учитывая, что узлы подключены вовремя. Вам следует прочитать эту концепцию hinted-handoff Очень важно понимать, что происходит с чтением / записью, когда некоторые узлы не работают. - person Bigby; 10.08.2017

В вашем случае, поскольку имеется 3 узла и коэффициент репликации также равен 3, следовательно, каждый узел будет иметь все данные. Следовательно, даже если работает только 1/3 узла, вы все равно сможете получить полные данные. Однако согласованность данных (т.е. получаете ли вы последние данные или нет) в этом случае будет зависеть от используемой согласованности записи (я предполагаю, что, поскольку работает только 1/3 узла, поэтому согласованность чтения будет 1). Чтобы получить согласованные данные, согласованность записи должна быть 3 (используя условие, R + W> N для сильной согласованности). Только тогда вы получите согласованные данные при чтении, даже если работает только 1/3 узла.

person Vishal Sharma    schedule 12.02.2018