質問
大きな(> 1GB)XMLファイルをMySQLデータベースにダンプする最速の方法は何ですか?
データ
問題のデータは、StackOverflow Creative CommonsDataDumpです。
目的
これは、私が構築しているオフラインのStackOverflowビューアで使用されます。これは、インターネットにアクセスできない場所で学習/コーディングを行うことを検討しているためです。
プロジェクトが終了したときに、これを残りのStackOverflowメンバーシップにリリースして、自分で使用できるようにしたいと思います。
問題
もともと、私はXMLからの読み取り/DBへの書き込みを一度に1レコードずつ行っていました。これは私のマシンで実行するのに約10時間かかりました。私が使用しているハックタスティックコードは、500レコードを配列にスローし、挿入クエリを作成して500すべてを一度にロードします(例: " INSERT INTO posts VALUES (...), (...), (...) ... ;
")。これは高速ですが、実行にはまだ数時間かかります。明らかにこれは最善の方法ではないので、このサイトの頭脳がより良い方法を知ってくれることを願っています。
制約
- デスクトップアプリケーション(つまり、WinForms)としてC#を使用してアプリケーションを構築しています。
- データベースとしてMySQL5.1を使用しています。これは、「
LOAD XML INFILE filename.xml
」などの機能はMySQL 5.4以降でのみ使用できるため、このプロジェクトでは使用できないことを意味します。この制約は主に、プロジェクトが私以外の人々にも役立つことを望んでいるためであり、MySQLのベータ版を使用するように強制したくはありません。 - データロードをアプリケーションに組み込みたい(つまり、「このアプリケーションを実行する前に、「foo」を使用してMySQLにダンプをロードする」という指示はありません)。
- MySQL Connector / Netを使用しているので、
MySql.Data
名前空間内のすべてが受け入れられます。
あなたが提供できるどんなポインタにも感謝します!
これまでのアイデア
XMLファイル全体を列にロードし、XPathを使用して解析するストアドプロシージャ
- ファイルサイズは、デフォルトで1 MBに設定されているmax_allowed_packet変数の制限の対象となるため、これは機能しませんでした。これは、データダンプファイルのサイズをはるかに下回っています。