large datasetsには、XML形式の何百万ものレコードがあります。これらのデータセットは、特定の時点までのデータベースの完全なデータダンプです。2つの大きなデータセットの違いを確認するにはどうすればよいですか?
2つのダンプの間に新しいエントリが追加され、既存のエントリが変更または削除されている可能性があります。スキーマは変更されず、すべてのエントリに一意のIDがあるとします。
これらの2つのデータセット(削除と更新を含む)間のデルタを判断する最良の方法は何ですか?
私の計画は、すべてをRDBMSにロードしてそこから実行することです。
まず、古いダンプをロードします。新しいダンプを別のスキーマにロードしますが、そうすることで、そのエントリが新しいか、既存のエントリの更新であるかどうかを確認します。 「はい」の場合は、「変更」と呼ばれる新しいテーブルにIDを記録します。
これがすべて完了したら、古いダンプをすべてのエントリに渡し、新しいダンプに一致するレコード(つまり、同じID)があるかどうかを確認します。そうでない場合は、変更にログを記録します。
IDでレコードを検索すると、O(log n)
操作であると仮定すると、O(n log n)
時間内にすべてを実行できるはずです。
IDと最終更新日だけでレコードの有無を調べることで違いを判断できるため、すべてをメインメモリにも読み込むことができました。時間の複雑さは同じですが、ディスクI/Oが少なくて済むという利点があります。
提案? (注:これは何よりもパフォーマンスに関する質問のほうが多い)
「私が決めることができますので...桁違いにこの速く作るべきです」。 "これは何よりもパフォーマンスの問題です"。 ...メモリでこれを行うsoooははるかに速くなり、主にパフォーマンスに関心があります。あなた自身の質問にあなたが答えたように聞こえる。 – Gerrat