一致性1读取查询期间的Cassandra超时

一致性1读取查询期间的Cassandra超时,cassandra,database,nosql,Cassandra,Database,Nosql,我对卡桑德拉数据库有问题,希望有人能帮助我。我有一张“日志”表格。在日志表中,我插入了大约10000行。一切正常。我能做一件事 select * from select count(*) from 一旦我用TTL 50插入100000行,我就会收到一个错误 select count(*) from 版本:cassandra 2.1.8,2个节点 一致性1(1)响应读取查询期间的Cassandra超时 是必需的,但只有0个副本响应) 有人知道我做错了什么吗 CREATE TABLE test

我对卡桑德拉数据库有问题,希望有人能帮助我。我有一张“日志”表格。在日志表中,我插入了大约10000行。一切正常。我能做一件事

select * from

select count(*) from
一旦我用TTL 50插入100000行,我就会收到一个错误

select count(*) from
版本:cassandra 2.1.8,2个节点

一致性1(1)响应读取查询期间的Cassandra超时 是必需的,但只有0个副本响应)

有人知道我做错了什么吗

CREATE TABLE test.log (
    day text,
    date timestamp,
    ip text,
    iid int,
    request text,
    src text,
    tid int,
    txt text,
    PRIMARY KEY (day, date, ip)
) WITH read_repair_chance = 0.0
   AND dclocal_read_repair_chance = 0.1
   AND gc_grace_seconds = 864000
   AND bloom_filter_fp_chance = 0.01
   AND caching = { 'keys' : 'ALL', 'rows_per_partition' : 'NONE' }
   AND comment = ''
   AND compaction = { 'class' : 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' }
   AND compression = { 'sstable_compression' : 'org.apache.cassandra.io.compress.LZ4Compressor' }
   AND default_time_to_live = 0
   AND speculative_retry = '99.0PERCENTILE'
   AND min_index_interval = 128
   AND max_index_interval = 2048;

该错误消息表示读取操作有问题。很可能是读取超时。您可能需要更新您的Cassandra.yaml,以获得更大的读取超时时间,如本文所述

例如200秒:

read_request_timeout_in_ms: 200000
如果更新不起作用,您可能需要调整Cassandra的JVM设置。有关更多信息,请参见DataStax的“”

count()是一项成本非常高的操作,想象一下Cassandra需要扫描所有节点中的所有行才能获得计数。如果行数较少,但数据较大,则应使用其他方法避免超时

  • 首先,我们必须逐行检索以计算金额,并忘记计数(*)
  • 我们应该进行几个(几十个,几百个?)查询,并按分区和聚类键进行过滤,并对每个查询检索到的行数求和
  • 在您的示例中,day是分区键,复合键由两列组成:date和ip
  • 使用cqlsh命令行客户端很可能不可能做到这一点,所以您应该自己编写一个脚本。流行编程语言的官方驱动程序:
此类查询之一的示例:

从test.log中选择日期、日期、ip、iid、请求、src、tid、txt,其中日期为“星期六”,日期为“2017-08-12 00:00:00”,ip为“127.0 0.1”

备注:

  • 如果您只需要计算计数,什么都不需要,可能对谷歌的工具有感觉

  • 如果Cassandra拒绝在不允许筛选的情况下运行您的查询,则表示查询效率低下


从中选择计数*(*)将不会执行。我不确定你是否输入了一个错误,或者这就是你想要运行的。另外,你能用TTL发布你插入的完整语句吗?嗨,nathan<代码>使用TTL 10将值('2015-09-01','2015-09-01 08:01:00','11.111.111.111',1,3,'GET/Member….','Process.CreateTransaction','Transaction Created')插入test.log(日期,日期,ip,tid,iid,请求,src,txt)中大约有100000行。ttl过期后,我尝试从test.log执行
选择count(*)