4

2 つの大きな XML ファイル (3GB、80000 レコード) があります。1 つは別の更新されたバージョンです。変更された (追加/更新/削除された) レコードを特定したい。ファイルにはいくつかのタイムスタンプがありますが、信頼できるかどうかはわかりません。ファイル内のレコードの順序と同じです。

ファイルが大きすぎて、XML としてメモリにロードできません (1 つでも、両方でもかまいません)。

私が考えていた方法は、IDのメモリ内マップを使用してレコードレベルで最初のファイル内のコンテンツオフセットのある種の解析/インデックス作成を行い、次に2番目のファイルをストリーミングし、ランダムアクセスを使用してそれらのレコードを比較することです両方に存在します。これにはおそらく 2 ~ 3 回のパスが必要ですが、問題ありません。しかし、それを可能にする簡単なライブラリ/アプローチが見つかりません。VTDNavHuge を使用した vtd-xml は興味深いように見えますが、事前に保存された場所に基づいたランダム アクセスの再アクセスとレコードの読み込みをサポートしているかどうかを (ドキュメントから) 理解できません。

Java ライブラリ/ソリューションが推奨されますが、C# も許容されます。

4

1 に答える 1

1

違いが見つかるまで、SAX または StAX を使用して両方のドキュメントを同時に解析し、終了します。ドキュメントをメモリに保持しません。どの標準 XML ライブラリも S(t)AX をサポートします。唯一の問題は、要素の異なる順序が重要でないと考える場合です...

于 2013-07-23T01:19:28.303 に答える