Cassandra:在 cqlsh 中使用带有 'IF NOT EXISTS' 的 INSERT INTO 时出错

Cassandra : Error while using INSERT INTO with 'IF NOT EXISTS' from within cqlsh

我创建了一个名为 'test' 的 Table。

CREATE TABLE test1(
   link text PRIMARY KEY,
   title text,
   descp text,
   pubdate text,
   ts timestamp
   ); 

然后我插入一条记录到:

INSERT INTO test1(title,link,descp,pubdate, ts) VALUES('T3','http://link.com/a3','D3','date3', toTimestamp(now())) IF NOT EXISTS;

这会导致错误(cqlsh 中的红色文本):NoHostAvailable

Cassandra 安装程序在 Mac OS El Capitain 上使用 Cassandra 3.9 版。 关键 space 是这样的:

CREATE KEYSPACE testkeyspace
WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};

这是我根据Whosebug上的答案更改的配置参数:

start_rpc: true (from false)
start_native_transport: true (from false)

不过,我似乎无法确定为什么我不能 运行 在插入语句的末尾使用这些关键字的 INSERT INTO 语句 "IF NOT EXISTS"

请注意,我使用 "cassandra -f"

启动了 Cassandra

如果你知道这里出了什么问题,请帮忙。

尝试的可能性,许多驱动程序现在使用 LOCAL_ONE 作为默认的一致性级别。使用 SimpleStrategy,您可能会遇到这样的情况:即使所有节点都已启动,如果 DC 中的 none 个节点具有数据,此请求也会失败 (CASSANDRA-12053)。这应该作为 UnavailableException 而不是 NoHostAvailable 公开,但值得尝试使用网络拓扑 RF。

这是一个 1 节点集群吗?复制因子 > 节点数无疑会导致问题,因此将每个评论设置为 1 是个好主意。

查询时 cassandra 是否仍然 运行?对于 -f,您需要将 Cassandra 运行 保持在前台,否则 cqlsh 将失去其连接并给出 NoHostAvailable 异常。