1

現在、2つのバックエンドコンポーネントを持つトランザクションシステムを実装しています。

  • コンポーネントAは初期XML応答を生成します
  • コンポーネントBは初期応答XMLを変更します

結果のXMLはリクエスターに返送されます。これは高負荷で行う可能性が高いため、CPU/メモリ効率の高い方法でこれを実行したいと思います。

全体的なメモリ使用率を厳しく制限しながら、上記を実行するための最良の方法は何ですか?

具体的には、コンポーネントAの出力のDOM解析を実行し、それをコンポーネントBに渡してメモリ内で変更するのが最善ですか?よりメモリ効率の良いSAXを使用してこれを行うためのより良い方法はありますか?SAXまたはDOMを介してこれを行う標準ライブラリはありますか?

洞察をありがとう。

-ラジ

4

3 に答える 3

3

一般に、SAXはDOMよりもメモリ効率が高く、処理のためにドキュメント全体をメモリにロードする必要がないためです。ただし、答えは、「コンポーネントBが初期応答XMLを変更する」要件の詳細によって異なります。

  • 各変更が独自のXMLサブツリーに対してローカルである場合(つまり、ツリーのルートにつながるすべてのノードからのデータが必要な場合がありますが、兄弟は必要ない場合)、SAXの方がうまく機能します。
  • 変更で結果を生成するために兄弟を参照する必要がある場合は、兄弟を格納するための独自のデータ構造を構築する必要がないため、DOMの方がうまく機能します。
于 2012-06-18T19:54:03.450 に答える
1

XSL-T変換を最初のXML応答に適用するコンポーネントBのアスペクトまたはフィルターは、それを実現するためのクリーンな方法である可能性があります。メモリ使用率は、リクエストのサイズとメモリ内のインスタンスの数によって異なります。CPUはこれら2つの要因にも依存します。

DOMでは、変更する前にXMLドキュメント全体がメモリに常駐している必要があります。変更が必要な要素が2つしかない場合は、SAXが適切な代替手段です。

于 2012-06-18T19:35:19.877 に答える
0

SAXは、イベントベースの解析ユーティリティです。beginDocument()、startElement()、endElement()などのイベントが通知されます。保存したいものをメモリに保存します。必要なイベントのみを制御します。これにより、解析の速度が大幅に向上し、メモリの使用量が減少します。メモリに保存しているものの内容と量によっては、メモリ効率が高くなる可能性があります一般的なケースでは、SAXはDOMよりもメモリ効率が高くなります。DOMは、ドキュメントを処理するためにドキュメント全体をメモリに保存します。

于 2012-06-18T19:54:56.560 に答える