Cassandra 计算行数时操作超时

Cassandra 计算行数时操作超时,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我在2个数据中心有3个节点。在每个节点上,我使用的是相同的cqlshrc文件,只有以下几行: [connection] request_timeout = 3600 复制策略如下: class:NetworkTopologyStrategy, 'dc1' :2, 'dc2':1 我在数据库中插入了超过100000行。但是当我执行 从表中选择count(*),我在3个节点中的2个节点中得到“操作超时”。i、 e.查询在一个节点中成功 为什么尽管每个节点都有相同的cqlshrc文件,但在3个节

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

[connection] 
request_timeout = 3600
复制策略如下:

class:NetworkTopologyStrategy, 'dc1' :2, 'dc2':1
我在数据库中插入了超过100000行。但是当我执行
从表中选择count(*),我在3个节点中的2个节点中得到“操作超时”。i、 e.查询在一个节点中成功

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

  • 操作系统:RHEL 6
  • 卡桑德拉:3.0.14

在cassandra
count(*)中,
是一个非常昂贵的操作,需要扫描所有节点的所有行,只需给出计数,就可以生成超时异常。

因此,不要使用
count(*)
维护计数器表,例如:

CREATE TABLE page_view_counts (
    counter_value counter,
    url_name varchar,
    page_name varchar,
    PRIMARY KEY (url_name, page_name)
);
每当插入到基表中的新行增加计数加1时

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

在cassandra
count(*)
中,这是一个非常昂贵的操作,需要扫描所有节点中的所有行才能获得计数,并且可以生成超时异常。

因此,不要使用
count(*)
维护计数器表,例如:

CREATE TABLE page_view_counts (
    counter_value counter,
    url_name varchar,
    page_name varchar,
    PRIMARY KEY (url_name, page_name)
);
每当插入到基表中的新行增加计数加1时

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

您检查了日志文件中抛出超时的节点了吗?我在日志中只看到一条警告:“使用聚合查询时没有分区键”。除此之外,我什么都不懂你的数据是如何分发的?它在哪些节点上失败?它们在同一个dc上吗?我总共有3个节点和2个数据中心。命令成功的节点(节点1)与另一个节点(节点2)位于dc 1中。节点3位于dc 2中。在节点2和节点3上,该命令均不成功。在dc1:2和dc2:1中使用复制的网络拓扑策略是否检查日志文件以查找引发超时的节点?在日志中,我只能看到一条警告:“使用聚合查询而不使用分区键”。除此之外,我什么都不懂你的数据是如何分发的?它在哪些节点上失败?它们在同一个dc上吗?我总共有3个节点和2个数据中心。命令成功的节点(节点1)与另一个节点(节点2)位于dc 1中。节点3位于dc 2中。在节点2和节点3上,该命令均不成功。在dc1:2和dc2:1中使用复制的网络拓扑策略,但我不明白为什么每次查询都在3个节点中的一个节点上运行良好,而在另外两个节点上失败,尽管每个节点都有相同的cqlshrc文件。似乎在其他两个节点上,cqlshrc文件中给出的配置没有任何影响。但我不明白为什么每次查询都在这三个节点中的一个节点上运行良好,而在其他两个节点上失败,尽管每个节点都有相同的cqlshrc文件。似乎在其他2个节点上,cqlshrc文件中给出的配置没有影响。