在一致性ONE的读取查询期间,Cassandra超时

时间:2015-09-21 07:44:13

标签: cassandra database nosql

我对cassandra db有问题,希望有人可以帮助我。我有一个表“日志”。在日志表中,我插入了大约10000行。一切正常。我可以做一个

select count(*) from

一旦我用TTL 50插入100000行,我收到错误

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 2.1.8,2节点

  

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

有人知道我做错了吗?

get

2 个答案:

答案 0 :(得分:1)

该错误消息表示READ操作有问题。很可能是READ超时。您可能需要使用较大的读取超时时间更新Cassandra.yaml,如SO answer中所述。

200秒示例:

read_request_timeout_in_ms: 200000

如果更新不起作用,您可能需要调整Cassandra的JVM设置。请参阅DataStax" Tuning Java Ops"了解更多信息

答案 1 :(得分:1)

count()是一个非常昂贵的操作,想象一下Cassandra需要扫描所有节点的所有行,只是为了给你计数。如果有少量行可行,但对于较大的数据,则应使用其他方法来避免超时。

其中一个查询示例:

从test.log中选择day,date,ip,iid,request,src,tid,txt,其中day ='Saturday'和date ='2017-08-12 00:00:00'和ip ='127.0 0.1 “

说明: