3

80 GB の XML データを MySQL にインポートするには、5 日以上かかる必要がありますか?

私は現在、サイズが約 80GB の XML ファイルをインポートしています。使用しているコードはこの要点にあり、すべてが正常に機能している間、ほぼ 5 日間連続して実行されており、完了に近づいていません...

テーブルの平均サイズはおよそ次のとおりです。

Data size: 4.5GB
Index size: 3.2GB
Avg. Row Length: 245
Number Rows: 20,000,000

さらに情報が必要な場合はお知らせください。

サーバー仕様:

これは Linode VPS であることに注意してください

インテル Xeon プロセッサー L5520 - クアッド コア - 2.27GHZ 4GB 合計 RAM

XML サンプル

https://gist.github.com/2510267

ありがとう!


この問題についてさらに調査したところ、これは平均的なようです。輸入率を改善する方法を説明するこの回答を見つけました。

4

3 に答える 3

2

大いに役立つことの 1 つは、行ごとに 1 回ではなく、頻繁にコミットしないことです。数百行ごとに 1 つのコミットから始めて、そこから調整することをお勧めします。

また、存在チェックを行う場所で現在行っていること-それをダンプします。実行する必要があるクエリの数が大幅に増加しています。代わりに、ON DUPLICATE KEY UPDATE(標準に準拠していない MySQL 拡張機能) を使用して、複製がINSERT自動的に正しいことを行うようにします。

最後に、XML からツールでの使用に適したテキスト形式に変換するツールを作成し、mysqlimport代わりにそのバルク ローダーを使用することを検討してください。これにより、XML の解析に必要な時間とデータベースの取り込みに必要な時間が明確に分離され、目的に合わせて設計されたツールを使用してデータベースのインポート自体も高速化されます (INSERTまたはUPDATEコマンドでmysqlimportはなく、特殊なLOAD DATA INFILE拡張機能を使用します)。

于 2012-04-27T15:50:41.760 に答える
0

これは(おそらく)速度の問題とは関係ありませんが、iterparseの動作がロジックに適合しているかどうかを再確認することをお勧めします。開始イベントが発生した時点で、ノードのテキスト値がロードされている場合とされていない場合があり(解析したデータのチャンク内に収まるかどうかによって異なります)、かなりランダムな動作を得ることができます。

于 2012-04-27T15:12:37.313 に答える
0

似たようなことを試みた後、あなたのコードを見ずに3つの簡単な提案があります

  1. 高性能のためにコードを最適化するlxmlを使用したPythonでの高性能XML解析 は、見るのに最適な記事です。
  2. pypyを調べてください
  3. Pythonがネイティブに実行しない複数のCPUを利用するようにコードを書き直してください

これらのことを行うことで、私が取り組んだ同様のプロジェクトの速度が大幅に向上しました。おそらく、コードとサンプルxmlを投稿した場合は、より詳細なソリューションを提供できます。(編集、申し訳ありませんが要点を逃しました...)

于 2012-04-27T15:21:48.707 に答える