Кажется, это ошибка для меня,
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?
Lwt использует последовательный последовательный уровень под капотом, и, поскольку RF равен 3, он ожидает, что узел 2 будет наверху. Следовательно, операция завершается неудачно, как и ожидалось. Прочтите это для получения дополнительной информации.
Нет .. но почему вы устанавливаете RF 3 для одного узла?
У меня есть сценарий, в котором два узла будут отключены какое-то время, в течение этого времени мне нужна поддержка записи и чтения с использованием условия IF (например, column = ''), поэтому я использую политику повторных попыток перехода на более раннюю версию, которая делает поддержку записи с согласованностью как 1
Можно ли в таком случае выполнить простой INSERT?
Нет, мне нужно выполнить оператор IF, это требуется в случае UPDATE
@ Гарри, вы используете cql или java?
Я пробовал cqlsh, python и nodejs, все говорят то же самое для LWT :( @Horia
Возможно, ScalarDB может решить ваш вариант использования. Я не уверен, будет ли это (поскольку он основан на LWT), но, возможно, стоит взглянуть. К сожалению, то, что вы описываете, является нормальным поведением. На 3-м шаге принятие предложения производится с помощью SERIAL / LOCAL_SERIAL CL. Только 4-й шаг, фиксация мутации, выполняется на нужном вам CL ONE.
Я понимаю проблему, но нельзя ли установить согласованность как «1» и коэффициент репликации как «3» и выполнять какие-либо запросы LWT?