データを含む大きなXMLドキュメント(〜10 mb)があります。このXMLを解析し、データベースを調べて更新する必要があります。3つのケースがあります:
- 前回から新しいデータがXMLに存在します-それをDBに挿入します
- アイテムが変更されました-DBで更新してください
- アイテムは前回からXMLから削除されています-DBで無効としてマークしてください
前回XMLをチェックしてからアイテムのデータが変更されていない場合は、何もしません。XMLの各アイテムには独自のIDがあるため、データベースから簡単に取得できます。
ただし、このようなアイテムを反復処理するのは非常に時間がかかりますが、データベースのリレーショナルな側面が必要です(XMLはユーザーが購入できるアイテムを表すため、アイテムの新しいIDを生成して、それらを一括ロードすることはできません)。
XMLをループして各アイテムを個別に検索するのは非常に遅いため、これを実装するための最良の方法は何でしょうか。
これは、PHPを使用してMySQLデータベースに組み込まれます。
==編集==
このプロセスの基本的なループは次のとおりです。
while ($data = get_next_bit_of_data_from_xml())
{
// this next line is the slow part
if ($object = get_object_from_database($data['id']))
{
// update $object
// ...
// persist
$object->save();
}
// build new object and persist
// ...
}
スクリプトが非常に遅い理由は、XMLのエントリごとにオブジェクトがすでに存在するかどうかを確認する必要があるため、LOADDATAINFILEのようなバルク操作を使用できないためです。
したがって、既存のデータとの参照整合性を維持しながらデータを一括ロードできる別のアプローチを誰かが提案できるかどうか、本当に疑問に思っています。