【问题标题】:LWT and Consisteny in CassandraCassandra 中的 LWT 和一致性
【发布时间】:2019-07-11 14:58:03
【问题描述】:

这似乎是我的错误,

1) 我创建了一个复制因子为“3”的键空间

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

注意:这是一个单节点集群,我还是保持复制因子为3,这样我以后会在集群中添加新节点

2) 我将一致性级别设置为 ONE

 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');

这按预期工作,因为一致性级别为 1

5) 现在我尝试使用 LWT 插入查询(如果不存在)

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

现在失败了 NoHostAvailable: 错误

有人能解释一下如何解决这个问题吗?如何以 1 的一致性执行此 LWT?

【问题讨论】:

    标签: cassandra cassandra-3.0 lwt


    【解决方案1】:

    Lwt 在后台使用串行一致的电平,并且由于 RF 为 3 ,它期望 s 2 节点启动。因此,操作按预期失败。阅读this了解更多信息。

    【讨论】:

    • 我理解这个问题,但是是否可以将一致性设置为 '1' 并将复制因子设置为 '3' 并执行任何 LWT 查询?
    • 没有..但是你为什么要为一个节点设置 RF 3?
    • 我有一个场景,两个节点会宕机一段时间,在此期间我需要支持使用 IF 条件(如 column = '')进行读写,所以我使用降级重试使写入支持保持一致的策略为 1
    • 在这种情况下您可以执行简单的 INSERT 吗?
    • 不,我需要执行IF语句,在UPDATE的情况下需要
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2018-06-13
    • 1970-01-01
    • 2021-11-24
    • 2014-10-13
    • 2015-08-08
    • 2017-02-23
    相关资源
    最近更新 更多