現在、LIBXML :: SAXParser :: Callbacksを使用して、140,000個の製品のデータを含む大きなXMLファイルを解析しています。タスクを使用して、これらの製品のデータをRailsアプリにインポートしています。
前回のインポートが完了するまでに10時間弱かかりました。
rake asi:import_products --trace 26815.23s user 1393.03s system 80% cpu 9:47:34.09 total
現在の実装の問題は、XMLの複雑な依存関係構造が意味することです。つまり、製品ノード全体を追跡して、適切に解析する方法を知る必要があります。
理想的には、各製品ノードを単独で処理し、XPATHを使用できるようにする方法が必要です。ファイルサイズにより、XMLファイル全体をメモリにロードする必要があるメソッドを使用できなくなります。元のXMLの形式やサイズを制御できません。プロセスで使用できるメモリは最大で3GBです。
これより良い方法はありますか?