从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)但没有成功。
如何增加超时?
答案 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)并仅在应用事务时更新计数器。