1

私が取り組んでいるアプリでは、非常に大きな XML ファイル (サイズが 2GB ものファイル) を処理する必要があります。Saxon Java ライブラリを使用して、これらのファイルに対していくつかの XQuery コマンドを実行したいと考えています。

一度にファイル内のレコードの小さなセットのみがメモリに保持され、ファイルがそのような小さなデータのセットで処理されるように、これを行うにはどうすればよいですか (ファイル全体を一度に処理するのではなく)--そして同時に、XQuery コマンドの出力は正しいはずですか? XQuery コマンドを実行するには、RAM が 0.5GB しかないマシンを使用したいと考えています。そのため、XML 全体を一度にメモリにロードすることはできません。

4

2 に答える 2

1

このような機能に到達するための最良の (しかし複雑な) 方法は、可能な XQuery コマンドを制限することです (つまり、考えられるすべてのユース ケースを列挙します)。その後、ファイルプロセスごとに1回、SAXまたはStAXの方法を使用して、XMLファイル全体の内部「インデックス」を作成し、検索キーをXMLファイルのオフセット(開始および終了)にマップします。これらのオフセットは、XML ファイルの小さいながらも整形式の部分を指している必要があります。この部分は、スタンドアロンでロードして分析し、指定された XQuery と一致するかどうかを確認できます。

もう 1 つの方法は、XML ファイルを (再び SAX または StAX を使用して) ディスクベースの一時データベース (Apache Derby など) に解析し、独自の XQuery => SQL トランスレーターまたはインタープリターを作成して、このファイル データにアクセスすることです。OutOfMemoryException は発生しませんが、そのようなメソッドのパフォーマンスは...一度使用したファイルには最適ではない可能性があります。

于 2012-12-10T14:32:35.883 に答える