2013-06-11 54 views
1

我們有一個32節點的Cassandra集羣,每個節點使用Murmur3分區程序時大約有100Gb。它具有時間序列數據,我們在兩列上構建二級索引以執行範圍查詢。目前,羣集在所有數據批量加載並重建所有二級索引的情況下都很穩定。當我們使用cql客戶端或hector執行範圍查詢時,就會出現這個問題,只是行數的查詢花費了大量的時間,而且大多數情況下會導致節點由於內存問題而失敗。節點有8GB內存,Cassandra MAX堆被分配到4 GB。有沒有人遇到過這樣的問題?有更好的方法來做計數查詢嗎?Cassandra內存不足以查詢cql查詢

回答

1

我有類似的問題,通常可以通過重新設計模式來解決您計劃針對Cassandra中的數據執行的查詢來解決這個問題。對於時間序列數據,根據查詢情況,最好使用寬度較大的表格。如果您的查詢需要1個小時的粒度數據,那麼最好有一個寬表格,每個小時將所有時間戳記的數據點存儲在一行中,這樣您只需讀取1行就可以獲得1小時所需的全部數據。

既然你說數據是批量加載的,我假設你可能已經把所有的數據放到一個表中,這就是爲什麼get_count查詢需要花費大量時間。我們有一個8GB內存的集羣,但已經將堆大小設置爲3 GB,因爲在4GB時,內存利用率幾乎總是在8GB [完全利用率]。

+0

Vinay,謝謝你的回覆。我正在按照您的建議重新設計我的模式。你還可以談談你如何在cassandra中加載數據..使用客戶端寫入或cassandra/hadoop bulkoutformat技術? – amey

+0

我沒有要求加載任何現有數據。我修改了[YCSB](https://github.com/brianfrankcooper/YCSB/)以生成並插入我的應用程序所需的數據。具有多個寬表證明瞭爲我的應用程序提供單個表格更有效 –