2016-01-01 3 views
3

Кассандру драйвера 3.1 NodeJS: Кассандры драйвер 3.0.0Cassandra уровень согласованности и IF NOT EXISTS вопрос относительно клаузулы

пространство ключей создается с помощью следующего оператора:

CREATE IF NOT ключевого пространства EXISTS XXXXXX с репликацией = {'class': 'SimpleStrategy', 'replication_factor': 2};

Несмотря на то, что коэффициент репликации равен 2, я запускаю только один экземпляр для целей разработки с уровнем согласованности, установленным в ONE. Вот проблема, когда я пытаюсь вставить любую запись с предложением IF NOT EXISTS, я получаю ошибку уровня согласованности. Но заявления без IF NOT EXISTS работают нормально. Вот бревно из cqlsh:

cqlsh:xxxxxx> CONSISTENCY; 
Current consistency level is ONE. 
cqlsh:xxxxxx> insert into accounts(account_id) values('test'); 
cqlsh:xxxxxx> insert into accounts(account_id) values('test1') if not exists; 
Traceback (most recent call last): File "/usr/bin/cqlsh.py", line 1258, in perform_simple_statement result = future.result() File "/usr/share/cassandra/lib/cassandra-driver-internal-only-3.0.0-6af642d.zip/cassandra-driver-3.0.0-6af642d/cassandra/cluster.py", line 3122, in result raise self._final_exception Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level QUORUM" info={'required_replicas': 2, 'alive_replicas': 1, 'consistency': 'QUORUM'} 

ответ

3

«если не существует» условие для Паксоса использует различные настройки согласованности в «SERIAL СОГЛАСОВАННОСТИ», который может иметь значение SERIAL или LOCAL_SERIAL.

Параметр SERIAL означает, что для всех реплик потребуется кворум, а LOCAL_SERIAL означает, что ему потребуется кворум в локальном центре обработки данных. При коэффициенте репликации 2, кворум - 2 реплики.

К сожалению, для «SERIAL CONSISTENCY» нет LOCAL_ONE или ONE, поэтому в вашем случае вам понадобится две копии, чтобы быть живой для вашей вставки, если она не существует для успеха.

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