带有ifNotExists的Datastax Cassandra插入
我已经创建了一个键空间带有ifNotExists的Datastax Cassandra插入,cassandra,cassandra-2.0,datastax-java-driver,Cassandra,Cassandra 2.0,Datastax Java Driver,我已经创建了一个键空间 CREATE KEYSPACE xyz WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '1', 'datacenter1': '1'} AND durable_writes = true; 我只有两个节点,DC1和datacenter1节点都已启动。现在,当我试图执行一批insert语句时 Insert insert = QueryBuilder.insertInto(keyspace,
CREATE KEYSPACE xyz WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '1', 'datacenter1': '1'} AND durable_writes = true;
我只有两个节点,DC1和datacenter1节点都已启动。现在,当我试图执行一批insert语句时
Insert insert = QueryBuilder.insertInto(keyspace, table).ifNotExists()
.value("home", fieldsToUpdate.getHome())
.value("subCategoryName", fieldsToUpdate.getSubCategoryName())
.value("id", fieldsToUpdate.getId());
batch.add(insert);
session.execute(batch);
我听到一个例外的说法
Caused by: com.datastax.driver.core.exceptions.UnavailableException: Not enough replica available for query at consistency QUORUM (2 required but only 1 alive)
当我删除.ifNotExists()时,批处理将毫无例外地执行
使用datastax驱动程序版本2.1.7
我应该如何解决这个问题
编辑:
Nodetool状态
abhisheks-MacBook-Pro:bin abhishekagarwal$ sudo ./nodetool status
objc[3398]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 192.168.1.111 19.81 MB 256 ? f2651124-abdf-486a-a6d7-53327bc2d98c RAC1
UN 192.168.1.5 5.22 MB 256 ? d0c72798-1186-4bcb-9e0f-634964a3d083 rack1
Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless
问题是您已定义密钥空间,以便在“datacenter1”中保留一个副本,在数据中心“DC1”中保留一个副本。但是您没有名为“DC1”的数据中心,因此如果不存在
子句,则无法在两个数据中心中获得副本的仲裁
因此,您应该这样定义键空间:
CREATE KEYSPACE xyz WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '1'}
你能显示“nodetool状态”的输出吗。这将有助于诊断问题。