高读延迟在卡桑德拉

问题描述:

我使用三台机器各自具有32 GB的RAM和4芯(在亚马逊AWS)高读延迟在卡桑德拉

我使用卡桑德拉的所有默认配置的集群上卡桑德拉2.1.12。

我使用它为我的网站事件分析具有约每天1 GB的数据有3

我的数据的replcation因子(时间序列数据)已发展到约85 GB每台机器现在是给上读取延迟大约4.5 s (4000 ms)

我的行很少更新所以,我没有使用LevelOrder Compaction。 而我写与编辑的周围.03ms

延迟表现良好:

这是ColumnFamily中的定义:

CREATE TABLE TimeSeriesData(
logyear int, 
logmonth int, 
logdate int, 
logdatetime timestamp, 
cookie text, 
sessionid text, 
... 
PRIMARY KEY (logyear, logmonth, logdate, logdatetime, cookie) 
) WITH CLUSTERING ORDER BY (logmonth ASC, logdate ASC, logdatetime ASC, cookie ASC) 
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 dclocal_read_repair_chance = 0.1 
AND default_time_to_live = 0 
AND gc_grace_seconds = 864000 
AND max_index_interval = 2048 
AND memtable_flush_period_in_ms = 0 
AND min_index_interval = 128 
AND read_repair_chance = 0.0 
AND speculative_retry = '99.0PERCENTILE'; 

展望由当前正在logyear我的分区键。所以,我的整个数据将在一个分区中。话虽如此,分区器负责在集群中的节点之间分配(通过分区键)行的组。

在这种情况下,它会是一个sinlge节点或不是?

此外,尽管读取单个分区的数据,为什么读取延迟非常差?

单个SSTable可以有多个分区,反之亦然?我正在使用org.apache.cassandra.dht.RandomPartitioner
Moverover,如上所述应该是列族的空闲分区密钥,每天增量数据为1GB。

+0

请添加一致性级别和追踪转储。它可能会帮助其他人 –

+0

我已添加更多详细信息。你可以请看看它。 – deenbandhu

您发布了您认为是单个问题的内容,但它可能涉及更多 - 潜在的许多不同问题,都表现为高延迟。

最有可能的解释是由于数据模型不佳导致高垃圾回收。但是,你已经给我们很少的继续。

看看nodetool cfstats - cfstats中的延迟是否与您看到的延迟相匹配?什么是最大分区大小?

+0

如果这是一个高垃圾收集的问题,那么我认为我的写作也会受到影响,但他们不是。 – deenbandhu

+0

我的CF统计现在显示的约23481毫秒 \t \t压实分区最小字节读取延迟:43388629个 \t \t压实分区最大字节数:158683580810个 \t \t压实分区意味着字节:19049359054 – deenbandhu

+2

你有一个破碎的数据模型 - 这些分区大小是不合理的,坦率地说,我感到震惊,你可以阅读任何东西。 –