2016-07-28 13 views
0

現在、私は現在のデータベースを別のデータベースに移行しようとしています。そのプロセスは残念ながらpythonを伴います。私はそれをシングルスレッド化することができましたが、1Mのデータを完了するのには非常に時間がかかりました。 Javaのエグゼキュータや先物のようなPythonにも同様のメソッドがありますか? user_listは、私は単一の挿入を行う代わりに、単一のスレッドの時点で例えば8を挿入する8つの並行スレッドを実行する場合、それはより速く全体の多くになると思います1000/1MDB挿入用のマルチスレッドPython

for data in user_list: 
    q = """ insert into users(id,name,address,password) 
     Values({id},{name},{address},{password}) 
     """.format(id=data['id'],name=data['name'],address=data['address'],password=data['password']) 
    db.command(q) 

の塊であることを

ノート

+0

どのDBを使用していますか?より速いかもしれませんが、スレッドごとに別々のdb接続が必要です。あなたのDBが "一括挿入"または "バッチ挿入"をサポートしているかどうか最初に確認します。通常、一度に1行挿入するよりもはるかに高速です。 – ErikR

+0

ああ、私は同時にn挿入を行うために1つの接続を使用することはできませんか?私は現在、SQLをorientdbにインポートしています。 @ErikR – kenlz

+0

いいえ - スレッドごとに1つの接続が必要です。私の答えも見てください。 – ErikR

答えて

1

あなたがorientdbを使用しているというコメントでは、 の文字がSQL Batchであると言います。

SQL BATCHを使用すると、行はパラレルに挿入されませんが、各コマンドのラウンドトリップは回避されます。

またpyorientライブラリを使ってPythonからSQL BATCHを使用することができます。

https://github.com/mogui/pyorient#execute-orientdb-sql-batch

が並列にデータを挿入するには、各スレッドの 1、複数の接続を作成する必要があります。

+0

YupはSQL Batchを使用して終了しましたが、各列を解析する代わりに、別々のCSVをクラスとしてエクスポートしました。それは今のところやります。 ありがとう:) – kenlz