2013-04-11 91 views
3

我想設計我的集羣,並且希望根據表/列家族的大小設置適當的key_cache和row_cache大小 。 與mysql類似,我們在Cassandra/CQL中有類似的東西嗎?如何以MB爲單位獲取Cassandra Table/ColumnFamily大小

SELECT table_name AS "Tables", 
round(((data_length + index_length)/1024/1024), 2) "Size in MB" 
FROM information_schema.TABLES 
WHERE table_schema = "$DB_NAME"; 

或者任何其他方式分別查找數據大小和索引的大小。

或者每個節點需要什麼配置才能將我的表完全放入內存 而不考慮任何複製因素。

回答

1

鍵緩存和行緩存的工作方式不同。瞭解計算大小的差異很重要。

密鑰緩存是文件中用於行位置的偏移緩存。它基本上是一個從(鍵,文件)到偏移量的映射。因此縮放鍵緩存大小取決於行數,而不是總體數據大小。您可以在'nodetool cfstats'中的'Number of keys'參數中找到行數。注意這是每個節點,而不是總數,但這就是你想要決定緩存大小。默認大小爲min(堆的5%(以MB爲單位),100MB),這對大多數應用程序來說可能已足夠。這裏的一個微妙之處在於行可能存在於多個文件(SSTables)中,數量取決於您的寫入模式。但是,這種重複在約節點工具的估計計數中佔(大約)。

行緩存緩存實際行。要獲得此大小的估計值,可以使用'nodetool cfstats'中的'Space used'參數。但是,行緩存會緩存反序列化的數據,並且只會包含最新的副本,因此大小可能會大不相同(更高或更低)。

還有第三個可配置緩存 - 您的操作系統文件系統緩存。在大多數情況下,這實際上比行緩存更好。它避免了在內存中複製數據,因爲在使用行緩存時,最有可能的數據也將在文件系統緩存中。從文件系統緩存中的SSTable讀取僅比我實驗中的行緩存慢30%(前一段時間,可能不再有效,但不太可能有顯着差異)。行緩存的主要用例是當您想要確保緩存一個相對較小的CF時。否則使用文件系統緩存可能是最好的。

總之,Cassandra默認使用大型密鑰緩存,沒有行緩存對大多數設置來說都是最好的。如果您知道您的訪問模式不適用於默認設置,或者您遇到性能問題,則只能使用緩存。

+0

讓我告訴你我的應用程序設計。所以基本上,我有一個Web服務,並且每個請求應用程序執行大約500 <#ofDatabaseQueries <1000。總行數約爲10億,隨着時間的推移它會不斷增加,每行不超過100庫侖(按照表格),並且沒有列有大量數據。顯然,我將使用雲並在不同節點之間分發數據,但出於測試目的,我正在使用單個節點。我認爲最好的方法是緩存所有行,以便每個請求的數據庫查詢數可以正確處理。 – piyush 2013-04-11 12:53:21

+0

行緩存可能是一個很好的選擇,但如果可以的話,您應該嘗試減少每個請求的數據庫查詢數。 Cassandra可能每個節點每秒處理10k次讀取,因此每個節點每秒只有10個請求。 – Richard 2013-04-11 12:59:11

+0

從哪裏得到這個數字10k讀取/秒/節點,是不是取決於硬件?這是一個很好的信息順便說一句,你可以分享一些鏈接,我可以看到這些性能相關的信息。 查詢/請求並不都是唯一的,所以我猜,行緩存會對我有幫助,我是cassandra的新手,我正在閱讀關於它的所有內容。 – piyush 2013-04-11 13:20:52

相關問題