LWT и Consisteny в Кассандре

Кажется, это ошибка для меня,

1) Я создал пространство ключей с коэффициентом репликации как '3'

 CREATE KEYSPACE IF NOT EXISTS replicationtest WITH replication = {'class':'SimpleStrategy','replication_factor' : 3};

ПРИМЕЧАНИЕ. Это кластер с одним узлом, но я оставил коэффициент репликации равным 3, так что позже я добавлю новые узлы в кластер.

2) Я установил уровень согласованности как ОДИН

 cqlsh:replicationtest> CONSISTENCY ONE

3) Я создал "тестовую таблицу"

CREATE TABLE IF NOT EXISTS testtable("partitionId" text, "name" text, "value" text, primary key ("partitionId","name"));

4) Теперь я попробовал простой запрос INSERT

INSERT INTO testtable("partitionId", "name", "value") VALUES ('testtable','testname', 'testvalue');

ЭТО РАБОТАЕТ, КАК ОЖИДАЕМЫЙ, поскольку УРОВЕНЬ согласованности ЕДИНИЦЫ

5) Теперь я попробовал запрос INSERT с LWT (ЕСЛИ НЕ СУЩЕСТВУЕТ)

INSERT INTO testtable("partitionId", "name", "value") VALUES ('testtable','testnameanew', 'testvaluenew') IF NOT EXISTS; 

ТЕПЕРЬ ЭТО НЕ УДАЛОСЬ СNoHostAvailable:ОШИБКА

Может кто-нибудь объяснить, как это исправить? Как выполнить этот LWT с последовательностью как 1?

Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
0
0
177
1

Ответы 1

Lwt использует последовательный последовательный уровень под капотом, и, поскольку RF равен 3, он ожидает, что узел 2 будет наверху. Следовательно, операция завершается неудачно, как и ожидалось. Прочтите это для получения дополнительной информации.

Я понимаю проблему, но нельзя ли установить согласованность как «1» и коэффициент репликации как «3» и выполнять какие-либо запросы LWT?

Harry 31.10.2018 09:15

Нет .. но почему вы устанавливаете RF 3 для одного узла?

Laxmikant 31.10.2018 09:29

У меня есть сценарий, в котором два узла будут отключены какое-то время, в течение этого времени мне нужна поддержка записи и чтения с использованием условия IF (например, column = ''), поэтому я использую политику повторных попыток перехода на более раннюю версию, которая делает поддержку записи с согласованностью как 1

Harry 31.10.2018 09:34

Можно ли в таком случае выполнить простой INSERT?

Laxmikant 31.10.2018 10:10

Нет, мне нужно выполнить оператор IF, это требуется в случае UPDATE

Harry 31.10.2018 10:19

@ Гарри, вы используете cql или java?

Horia 31.10.2018 13:24

Я пробовал cqlsh, python и nodejs, все говорят то же самое для LWT :( @Horia

Harry 31.10.2018 13:25

Возможно, ScalarDB может решить ваш вариант использования. Я не уверен, будет ли это (поскольку он основан на LWT), но, возможно, стоит взглянуть. К сожалению, то, что вы описываете, является нормальным поведением. На 3-м шаге принятие предложения производится с помощью SERIAL / LOCAL_SERIAL CL. Только 4-й шаг, фиксация мутации, выполняется на нужном вам CL ONE.

Horia 31.10.2018 13:34

Другие вопросы по теме