2011-01-03 4 views
9

Что такое конечная согласованность в Cassandra, когда узлы в одном кластере не содержат копии одних и тех же данных, но данные распределяются между узлами. Теперь, когда один фрагмент данных записывается в одном месте (узле). Почему Кассандра не вернет последнее значение из этого единственного места записи? Как возникают множественные копии в этой ситуации?Смысл возможной последовательности в Кассандре?

ответ

1

Его клиент должен решить соответствующий уровень согласованности (ноль, любой, один, кворум или все). (Уровень согласованности управляет как поведением чтения, так и по записи на основе вашего репликационного фактора.) В одном кластере узлов уровни согласованности any, one, quorom и все эквивалентны.

+0

, но согласованность между данными, поскольку отдельные данные расположены в одном месте в кластере .. там несколько копий не копируются ... то какая последовательность? –

+0

на кластере с одним узлом вам не нужно беспокоиться о согласованности (в то время как вы не выполняете асинхронные записи (CL.ZERO, не используйте этот)). – Schildmeijer

+0

Мне жаль, что я не ошибся. Я имею в виду в кластере с несколькими узлами, данные распределяются/распределяются (и ** не реплицируются **), поэтому нет нескольких копий одного фрагмента данных между разными узлами в кластере n-node cassandra, то как определяется последовательность в этом случае, где есть, infact, нет нескольких копий? ... Надеюсь, вы получили мою точку зрения. –

2

Даже с коэффициентом репликации = 1 консистенция не обязательно является непосредственной, поскольку записи буферизуются на узле, на который вы отправляете их, и, следовательно, необязательно сразу же отправляются на узел, ответственный за этот ключ.

Но это зависит от того, какой уровень согласованности вы выберете.

В основном используется прецедент для Кассандры с коэффициентом репликации> 1, в котором последовательность становится более важной. RF = 3, как представляется, общая установка (как это позволяет Кворум чтению/записи с одним узлом недоступного)

+1

Сколько времени потребуется, прежде чем запись будет сброшена с memtable (буфер памяти) на диск (= на ответственный узел)? – Kozuch

0

Cassandra стремится к компромиссу латентности и консистенции доста , Это «в конечном итоге последовательное», модель для согласованности базы данных NoSQL, которая используется с распределенными настройками. Вместо того, чтобы поддерживать строгую согласованность, которая может действительно замедлить работу в масштабе, возможная согласованность обеспечивает высокую доступность - просто за счет того, что каждый экземпляр ваших данных не синхронизируется сразу со всеми серверами.

2

Консистенция Кассандры настраивается. Что можно настроить?
* Количество узлов, необходимых для согласования данных для чтения .. называть его R * Количество узлов, необходимых для согласования данных для записи .. называть его W
В случае 3 узлов, если мы выбрали 2R и 2W .. затем во время чтения, если 2 узла согласуются на значение, то есть истинное значение. Третий может иметь или не иметь одинаковое значение.
В случае записи, если выбрано 2W, тогда, если данные записаны на 2 узла, это считается достаточным. Эта модель непротиворечива.
Если R + w < = N, где N - количество узлов, оно будет в конечном итоге последовательным.
Cassandra сохраняет временную метку с каждым столбцом и каждым полем столбца, чтобы в итоге стать последовательным. Существует механизм, позволяющий достичь согласованного состояния.
Но, как я уже сказал, если R + W> N, то он устойчив. Вот почему согласованность считается перестраиваемой в Кассандре.

Смежные вопросы