当前位置:  开发笔记 > 编程语言 > 正文

Cassandra一致性级别和IF NOT EXISTS子句问题

如何解决《Cassandra一致性级别和IFNOTEXISTS子句问题》经验,为你挑选了1个好方法。

Cassandra 3.1 NodeJS驱动程序:cassandra-driver 3.0.0

使用以下语句创建Keyspace:

创建KEYSPACE如果不是EXXTS xxxxxx WITH REPLICATION = {'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'}

Jim Meyer.. 5

paxos的"if not exists"子句使用"SERIAL CONSISTENCY"的不同一致性设置,其值可以是SERIAL或LOCAL_SERIAL.

SERIAL设置意味着它将需要所有副本的仲裁,而LOCAL_SERIAL意味着它将需要本地数据中心的仲裁.复制因子为2,法定人数为2个副本.

遗憾的是,"SERIAL CONSISTENCY"没有LOCAL_ONE或ONE设置,因此在您的情况下,如果不存在则需要两个副本才能为您的插入成功.



1> Jim Meyer..:

paxos的"if not exists"子句使用"SERIAL CONSISTENCY"的不同一致性设置,其值可以是SERIAL或LOCAL_SERIAL.

SERIAL设置意味着它将需要所有副本的仲裁,而LOCAL_SERIAL意味着它将需要本地数据中心的仲裁.复制因子为2,法定人数为2个副本.

遗憾的是,"SERIAL CONSISTENCY"没有LOCAL_ONE或ONE设置,因此在您的情况下,如果不存在则需要两个副本才能为您的插入成功.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有