2

大きなCSVファイルをMonetDBにインポートする必要がありますが、ファイルを2つに分割して、次のような2つのスクリプトを実行できるかどうか疑問に思っています。

mclient -u monetdb -d mydb < import1.sql
mclient -u monetdb -d mydb < import2.sql

どこ

  • import1.sqlは、file1.csvを使用してSQLcopy命令を発行し、
  • import2.sqlは、file2.csvcopyを使用してSQL命令を発行します

これはもっと速いでしょうか?これはうまくいくでしょうか?

ありがとう

4

1 に答える 1

6

MonetDBは、同時トランザクション(つまり、データへの変更)にオプティミスティック同時実行制御を使用します。これは、多くのスレッドが同じデータを操作できることを意味します。ただし、書き込みの競合は、たとえばロックによって予期および回避されることはなく、トランザクションをコミットする前(つまり、すべての実際の作業が完了したとき)にのみ検出されます。

作成したシナリオは、基本的にこの戦略の最悪のケースです。まったく同じデータを変更する2つの同時トランザクションです。両方ともしばらくの間実行され、一方はコミットされ、もう一方はロールバックされてから再起動されます。

肝心なのは:それをしないでください:-)。できることは、copy intoステートメントに「LOCKED」サフィックスを追加することです。これにより、シングルユーザーモードで実行しているときにロードを大幅に高速化できます(MonetDBのドキュメントを参照)。

于 2012-02-07T23:16:16.037 に答える