2011-10-28 13 views
1

私は特にNoSQLとCassandaraの初心者です。現時点では、Cassandraでベンチマークを行い、非常に遅い書き込みスループットを経験しています。Cassandraでの書き込みが非常に遅い

Cassandraは毎秒数十万の挿入を実行できますが、私はこれを観察していません。 1)8個のCQLクライアントから同時に100,000個の挿入を送信するとスループットは〜14470個/秒。 2)8つのThriftクライアントを介して同じ処理を実行すると、スループットは〜16300 /秒です。

私はカッサンドラのパフォーマンスを改善できると思いますが、チューニングするものはわかりません。以下のテスト条件を見て、何かアドバイスをしてください。ありがとうございました。

試験条件:

Cassandraのクラスタが3台のマシン上に展開されている1、各マシンは8つのコアのIntel(R)Xeonプロセッサ(R)CPUのE5420する@ 2.50GHzを有する、RAMは、16ギガバイト、ネットワークであります速度は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.はコミットログをローカルハードドライブに書き込まれ、データが光沢に書かれています。

4.鍵空間の説明

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.5msかかる場合、8スレッド/プロセスは1秒あたり16,000書き込みしか実行できません。

+0

はい、3つの同時Pythonスクリプトを使用して書き込みを行っています。あなたはその制限を意味するのですか?または私は何か間違っている? – Evgeny

+1

スレッド/プロセスがアクションを順番に実行していて、各アクションが100ミリ秒かかった場合、1秒間に10回しか実行できず、2スレッドで20秒間に1回だけ実行できます。 3つのスレッドを使用して、1秒間に100k回の操作を実行したい場合、各操作は0.03 msで完了する必要があります。クライアント側の並列性の欠如があなたの限界かもしれません。チェックする他のものは、サーバー(ディスクとCPUの両方)の負荷です。 – sbridges

2

特に、Pythonクライアントの場合、グローバルインタープリタロックのために、スレッドではなく別のプロセスとして各クライアントを実行すると、パフォーマンスが向上する場合があります。

その後、可能であればクライアントを複数のマシンに分割してみてください。

また、ワークロードが均等に分散されるようにクライアントが3つのノードすべてに接続していることを確認してください。

ローカルディスクではなく、Lustreにデータを書き込むことも重要な要素かもしれませんが、Lustreの経験はありません。

+0

ここで大きな問題はLustreです(EvgenyがCassandraメーリングリスト(http://www.mail-archive.com/[email protected]/msg18328.html)で同じ質問をしたときにAdrianが言及したように)また、Pythonから3ノードのカサンドラクラスターを最大限に活用するには、複数のマシンが必要です。 – jbellis