2016-08-09 5 views
0

私はFlaskで構築されたPythonアプリケーションを使用しています。これは、多くのデータレコード(10k-250k +レコードから一度に)のインポートを可能にします。今のところは、このような時に1つのレコードを挿入することにより、カサンドラデータベースに挿入します。Pythonを使用して大量のデータをCassandraに効率的に挿入する方法は?

for transaction in transactions: 
    self.transaction_table.insert_record(transaction) 

このプロセスは非常に遅いです。この一括データをより効率的に挿入するために使用できるベストプラクティスのアプローチはありますか?

+1

明らかなことは、Cassandraがサポートする一括照会クエリを試すことです。また、クエリを作成して再利用すると、実際には一括して挿入するほうが早いかもしれません。しかし、250kレコードを高速にインポートすることは期待しないでください。仕事を労働者に委任すべきでしょうか? – freakish

答えて

1

これにはバッチステートメントを使用できます。例とドキュメントはdatastax documentationから入手できます。また、これに加えて、子作業者や非同期クエリを使用することもできます。

ベストプラクティスの観点から、各バッチにが1つのパーティションキーしか含まれていない場合は、より効率的です。これは、ノードをさまざまなパーティションキーのコーディネーターとして使用したくないため、個々のノードに直接連絡する方が速くなるためです。

各レコードに異なるパーティションキーがある場合、一部の子ワーカーとの1つの準備済みのステートメントがうまくいく可能性があります。

TokenAware load balancing policyを使用して、別のノードを介して調整するのではなく、関連するノードに直接接続することもできます。

1

最も簡単な解決策は、データからCSVファイルを生成し、COPYコマンドを使用してインポートすることです。それは数百万行まではうまくいくはずです。より複雑なシナリオでは、sstableloaderコマンドを使用できます。

関連する問題