2016-07-15 69 views
1

我使用三臺機器各自具有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

回答

3

您發佈了您認爲是單個問題的內容,但它可能涉及更多 - 潛在的許多不同問題,都表現爲高延遲。

最有可能的解釋是由於數據模型不佳導致高垃圾回收。但是,你已經給我們很少的繼續。

看看nodetool cfstats - cfstats中的延遲是否與您看到的延遲相匹配?什麼是最大分區大小?

+0

如果這是一個高垃圾收集的問題,那麼我認爲我的寫作也會受到影響,但他們不是。 – deenbandhu

+0

我的CF統計現在顯示的約23481毫秒 \t \t壓實分區最小字節讀取延遲:43388629個 \t \t壓實分區最大字節數:158683580810個 \t \t壓實分區意味着字節:19049359054 – deenbandhu

+2

你有一個破碎的數據模型 - 這些分區大小是不合理的,坦率地說,我感到震驚,你可以閱讀任何東西。 –