Cassandra OperationTimedOut

时间:2016-06-06 14:45:51

标签: cassandra

从my_table中选择count(*)会给我OperationTimedOut: errors={}, last_host=127.0.0.1

我已尝试更改cassandra.yaml中 request_timeout_in_ms 和cqlshrc.sample中 request_timeout 的值。 (两者都在C:\ Programs \ DataStax-DDC \ apache-cassandra \ conf)但没有成功。

如何增加超时?

1 个答案:

答案 0 :(得分:1)

select count(*)没有按你的想法行事。它实际上很昂贵,因为它逐行计算行数。您可以使用带有计数器的单独列族跟踪记录数,对于您在表中执行的每次插入,都需要递增。例如

CREATE TABLE IF NOT EXISTS my_table_counter (
  mykey text,
  count counter, 
  PRIMARY KEY (mykey)
);

然后对于表中的每个插入,执行计数器更新:

INSERT into my_table (mykey, mydata) VALUES (?, ?);
UPDATE my_table_counter SET count = count + 1 WHERE mykey = ?;

要计算:

SELECT count FROM my_table_counter WHERE mykey = ?

请注意,计数器不是幂等的,因此在极少数情况下,您的数据可能会被低估或过度计数。此外,上面的代码假定您只插入一个新密钥。

如果您需要精确计数,Cassandra可能不适合这种情况。此外,如果您没有使用唯一键插入,则可能需要考虑使用轻量级事务和插入(IF NOT EXISTS)并仅在应用事务时更新计数器。