2011-10-28 55 views
1

我在NoSQL和Cassandara特別是新手。目前正在與Cassandra進行一些基準測試,並且寫入吞吐量非常慢。 1)當我通過8個CQL客戶端同時發送100000個插入數據時,吞吐量爲〜14470個插入數據,每個插入數據流量爲14470個插入數據,每個插入數據流量爲14470個插入數據秒。 2)當我通過8個Thrift客戶端做同樣的事情時,吞吐量是每秒約16300個插入。非常緩慢的寫在卡桑德拉

我認爲卡桑德拉的表現可以改善,但我不知道調整什麼。請看下面的測試條件並提供一些建議。謝謝。

測試條件:

1.卡桑德拉集羣部署在三臺機器,每臺機器具有8個內核英特爾(R)至強(R)CPU E5420 @ 2.50GHz,RAM是16GB,網絡速度是1000Mb/s。

2.的數據樣本是*

set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['order_id'] = '1.0'; 
set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['security'] = 'AA1'; 
set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['price'] = '47.1'; 
set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['volume'] = '300.0'; 
set MM[utf8('1:exc_source_algo:20100105000000.000000:ENTER:0')]['se'] = '1'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['order_id'] = '2.0'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['security'] = 'AA1'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['price'] = '44.89'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['volume'] = '310.0'; 
set MM[utf8('2:exc_source_algo:20100105000000.000000:ENTER:0')]['se'] = '1'; 
set MM[utf8('3:exc_source_algo:20100105000000.000000:ENTER:0')]['order_id'] = '3.0'; 
set MM[utf8('3:exc_source_algo:20100105000000.000000:ENTER:0')]['security'] = 'AA2'; 
set MM[utf8('3:exc_source_algo:20100105000000.000000:ENTER:0')]['price'] = '0.35'; 

3.提交日誌被寫入本地硬盤驅動器上時,數據被寫在光澤。

KEYSPACE描述

Keyspace: MD: 
    Replication Strategy: org.apache.cassandra.locator.NetworkTopologyStrategy 
    Durable Writes: true 
    Options: [datacenter1:1] 
    Column Families: 
    ColumnFamily: MM 
     Key Validation Class: org.apache.cassandra.db.marshal.BytesType 
     Default column value validator: org.apache.cassandra.db.marshal.BytesType 
     Columns sorted by: org.apache.cassandra.db.marshal.BytesType 
     Row cache size/save period in seconds: 0.0/0 
     Key cache size/save period in seconds: 200000.0/14400 
     Memtable thresholds: 2.3249999999999997/1440/496 (millions of ops/minutes/MB) 
     GC grace seconds: 864000 
     Compaction min/max thresholds: 4/32 
     Read repair chance: 1.0 
     Replicate on write: true 
     Built indexes: [] 

回答

2

是否使用8個線程/進程做寫?如果每次寫入需要0.5 ms,那麼8個線程/進程每秒只能執行16,000次寫入。

+0

是的,我正在使用三個併發的Python腳本進行寫操作。你的意思是限制?或者我做錯了什麼? – Evgeny

+1

如果您有1個線程/進程按順序執行操作,並且每個操作需要100 ms,則每秒只能執行10個操作,而2個線程可以每秒執行20個操作。使用3個線程,如果你想每秒獲得100k個操作,每個操作必須在0.03ms內完成。這種客戶端並行性的缺乏可能是您的限制。其他要檢查的是服務器上的負載(包括磁盤和CPU)。 – sbridges

2

特別是對於Python客戶端,由於全局解釋器鎖定,您可能會將每個客戶端作爲單獨的進程而不是線程運行,從而可能會看到更好的性能。

之後,如果可能,嘗試將客戶端分割到多臺機器上。

另外,請確保您的客戶正在聯繫所有三個節點,以便工作負載均勻分佈。

將數據寫入Lustre而不是本地磁盤可能是一個因素,但我沒有Lustre的經驗。

+0

同意,這裏最大的問題是Lustre(正如Adrian在Evony在Cassandra郵件列表中提出同樣的問題時提到的那樣 - http://www.mail-archive.com/[email protected]/msg18328.html) ,您可能需要多臺機器才能從Python中最大化出3節點的Cassandra集羣。 – jbellis