2011-12-06 124 views
6

我是NoSQL和Cassandra的新手。我正在嘗試設置以實現僅內存緩存解決方案。我正在通過從100000行文件逐行讀取並使用Hector插入Cassandra進行處理。我注意到每秒大約6000個插入物的吞吐量非常低。整個寫操作約20.5秒,這是我們的應用程序所不能接受的。我們需要每秒100000個插入。我正在使用4GB RAM的Windows 7計算機上進行測試。Cassandra的低寫入性能

我在做只插入測試。

請讓我知道我要去哪裏錯了。請建議我如何改進每秒插入。

Keyspace: Keyspace1 
     Read Count: 0 
     Read Latency: NaN ms. 
     Write Count: 177042 
     Write Latency: 0.003106884242157228 ms. 
     Pending Tasks: 0 
       Column Family: user 
       SSTable count: 3 
       Space used (live): 17691 
       Space used (total): 17691 
       Number of Keys (estimate): 384 
       Memtable Columns Count: 100000 
       Memtable Data Size: 96082090 
       Memtable Switch Count: 1 
       Read Count: 0 
       Read Latency: NaN ms. 
       Write Count: 177042 
       Write Latency: NaN ms. 
       Pending Tasks: 0 
       Key cache capacity: 150000 
       Key cache size: 0 
       Key cache hit rate: NaN 
       Row cache capacity: 150000 
       Row cache size: 0 
       Row cache hit rate: NaN 
       Compacted row minimum size: 73 
       Compacted row maximum size: 924 
       Compacted row mean size: 784 

我已經試過幾個方法可以設置行高速緩存和關鍵緩存:

  1. 通過卡桑德拉CLI

  2. 通過NodeCmd:JAVA org.apache.cassandra.tools.NodeCmd - p 7199 setcachecapacity Keyspace1用戶150000 150000

+0

您使用的是什麼類型的磁盤存儲?它是SSD還是HDD或內存文件系統?運行時應用程序使用多少CPU用戶/系統? (在任務管理器中) –

+0

磁盤存儲器是硬盤。總CPU約爲40%。 –

+2

一年前我們做了一些測試後,我們發現Cassandra比PostgreSQL要慢,直到Cassie擁有4臺以上的服務器。所以我並不感到驚訝。 –

回答

8

多少個線程/進程你用來執行插入? Hector調用是同步的,所以如果你只在客戶端使用1個線程,那可能是你的瓶頸。

+0

我只使用一個線程。我會嘗試多個線程。 –

9

我不會描述每秒6000次寫入「慢」 - 但Cassandra可以做得更好。但請注意,Cassandra是專爲持久寫入而設計的,因此性能可能會低於僅限內存的緩存解決方案。如sbridges所說,你無法使用單一客戶端從Cassandra中獲得完整的性能。嘗試使用多個客戶端線程,進程或機器。

我不認爲你會在單個節點上每秒獲得100,000次寫入。在適度的硬件上,我每秒只能獲得大約2萬到25萬次的寫入數據(儘管Cassandra自從做了基準測試以來速度明顯加快)。對於單個客戶端而言,每秒6000個似乎對單個商品節點來說是正確的。

隨着節點的集羣,你絕對可以得到每秒100,000個(見http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html對於最近的1,000,000基準每秒寫入!)

行高速緩存和密鑰緩存是幫助讀取性能,而不是寫性能。

此外,請確保您批量寫入(如果適用) - 這將減少網絡開銷。

+0

批量插入增加了很多性能。我從5k插入/秒傳遞到20-25k插入/秒。我有3個節點。 6個CPU與32 GB RAM – davidlebr1