操作在计算行数时超时

时间:2018-01-03 13:50:50

标签: cassandra cassandra-3.0

我在2个数据中心有3个节点。在每个节点上,我使用相同的cqlshrc文件,只有以下几行:

[connection] 
request_timeout = 3600

复制策略如下:

class:NetworkTopologyStrategy, 'dc1' :2, 'dc2':1

我在数据库中插入了超过10万行。但是当我执行时 select count(*) from table,我得到"操作超时"在3个节点中的2个。即查询在一个节点中成功。

为什么查询在3个节点中有2个不成功,尽管每个节点都有相同的cqlshrc文件?

  • OS:RHEL 6
  • 卡桑德拉:3.0.14

1 个答案:

答案 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';