我在2个数据中心有3个节点。在每个节点上,我使用相同的cqlshrc文件,只有以下几行:
[connection]
request_timeout = 3600
复制策略如下:
class:NetworkTopologyStrategy, 'dc1' :2, 'dc2':1
我在数据库中插入了超过10万行。但是当我执行时
select count(*) from table
,我得到"操作超时"在3个节点中的2个。即查询在一个节点中成功。
为什么查询在3个节点中有2个不成功,尽管每个节点都有相同的cqlshrc文件?
答案 0 :(得分:4)
在cassandra count(*)
是一项非常昂贵的操作,需要扫描所有节点的所有行,只是为了给你计数,并且可以生成超时异常。
所以不要使用count(*)
维护一个计数器表,例如:
CREATE TABLE page_view_counts (
counter_value counter,
url_name varchar,
page_name varchar,
PRIMARY KEY (url_name, page_name)
);
每当插入基表的新行增加计数加一个
UPDATE page_view_counts
SET counter_value = counter_value + 1
WHERE url_name = 'stackoverflow.com' AND page_name = 'questions';
现在点击计数就像下面那样
SELECT * FROM page_view_counts
WHERE url_name = 'stackoverflow.com' AND page_name = 'questions';