XML文書のサイズを取得する方法
2022-01-18 22:48:31
XML文書は、形式からサイズまで確定しているわけではありません。数行のものもあれば、数メガバイトになるものもあります。XML文書のサイズを知る必要があるのか、と思われるかもしれません。しかし、パフォーマンスが重要視される場合、XML文書のサイズを知ることは必須です。
パフォーマンスの観点から、XML文書の処理方法には2つのタイプがある。バッチ処理方式は、文書群を短時間でパースするものである。リアルタイム処理方式は、文書をリアルタイムに処理する方式である。バッチ処理方式の性能は、一定時間にどれだけの文書を処理したかで測ることができ、リアルタイム方式の性能は、同様の測定方法を用いますが、文書を処理するのにかかる時間という意味で測ります。
シナリオ シナリオ
Webサーバーのようなリアルタイムに動作するシステムがあるとします。このシステムは、顧客からリアルタイムで注文を受け、その注文に即座に対応する必要があります。
この仕組みは、バッチ処理では当然できない。簡単な試算として、これが10個のアイテムしかない非常に単純な注文で、結果として得られるXML文書がそれぞれおよそ4KBと比較的小さいとします。この場合、DOMを使って受信した文書をパースしてください。
注文が1時間に数件程度であれば、まだシステム性能は問題ないでしょう。しかし、長い目で見れば、注文数が非常に多くなり、システム・パフォーマンスを改善しなければならないと実感するときが来るでしょう。
さて、負荷の増大に対応するために、パフォーマンスの向上を考え始めているようですね。注文書はすでに小さくなっており、大きな文書にまとめる意味はありません。縦軸に考えれば、この時点で既存のシステムの処理能力を上げることができますし、横軸に考えれば、システムを追加して負荷を分散させることができます。
もうひとつ、まったく別の分野、大規模なデータウェアハウスを扱う場合を見てみましょう。ウェブサーバーとは全く異なり、平均300MBのXMLドキュメントをFTPで転送することになります。もしあなたがまだDOMを使ってXMLドキュメントを解析しているなら、すぐに大きな問題にぶつかるでしょう。その代わりに、SAXを使えば、受信したXML文書をあらかじめ全部メモリに読み込むことなく、直接パースすることができるようになります。
原稿サイズの変更
XMLドキュメントのサイズを変更する必要がある特殊な状況に遭遇することがあります。先ほどと同じように XML ドキュメントをリアルタイムで処理する Web サーバーがあり、すべてのドキュメントのサイズが 4KB ではなく 400MB で、メモリを大量に消費するため DOM アプローチが使えないと想像してください。しかし、これはリアルタイム・システムですから、パフォーマンスが重要です。SAXを使うこともできますが、それを許す時間と強力なプロセッサーが必要です。
この場合、文書サイズを変更することで、システムの実行性能を向上させることができます。例えば、400MBのドキュメントを40MBのもの10個に分割したり、10MBのドキュメントを40個に小さくしたりすることで、400MBのドキュメントを処理するよりも効率的に処理することができます。こうすることで、DOMメソッドでファイルをメモリに読み込んで処理し、各文書要求にタイムリーに対応することができます。また、無関係なドキュメントを一掃することも可能です。
バッチ処理のアプローチでも似たような状況があります。何千もの4KBサイズのドキュメントをDOMを通して一括して処理することを想像してみてください。この場合、1000個のドキュメントを1つの4MBのファイルにまとめるのがベストです。これは、それぞれのドキュメントが(DOMであれSAXであれ)読み込むのにシステム時間を要するからです。1000のドキュメントを1つにまとめることで、1つのドキュメントを読み込むだけでよくなり、その時間は1000分の1になります。
パフォーマンスの観点から、XML文書の処理方法には2つのタイプがある。バッチ処理方式は、文書群を短時間でパースするものである。リアルタイム処理方式は、文書をリアルタイムに処理する方式である。バッチ処理方式の性能は、一定時間にどれだけの文書を処理したかで測ることができ、リアルタイム方式の性能は、同様の測定方法を用いますが、文書を処理するのにかかる時間という意味で測ります。
シナリオ シナリオ
Webサーバーのようなリアルタイムに動作するシステムがあるとします。このシステムは、顧客からリアルタイムで注文を受け、その注文に即座に対応する必要があります。
この仕組みは、バッチ処理では当然できない。簡単な試算として、これが10個のアイテムしかない非常に単純な注文で、結果として得られるXML文書がそれぞれおよそ4KBと比較的小さいとします。この場合、DOMを使って受信した文書をパースしてください。
注文が1時間に数件程度であれば、まだシステム性能は問題ないでしょう。しかし、長い目で見れば、注文数が非常に多くなり、システム・パフォーマンスを改善しなければならないと実感するときが来るでしょう。
さて、負荷の増大に対応するために、パフォーマンスの向上を考え始めているようですね。注文書はすでに小さくなっており、大きな文書にまとめる意味はありません。縦軸に考えれば、この時点で既存のシステムの処理能力を上げることができますし、横軸に考えれば、システムを追加して負荷を分散させることができます。
もうひとつ、まったく別の分野、大規模なデータウェアハウスを扱う場合を見てみましょう。ウェブサーバーとは全く異なり、平均300MBのXMLドキュメントをFTPで転送することになります。もしあなたがまだDOMを使ってXMLドキュメントを解析しているなら、すぐに大きな問題にぶつかるでしょう。その代わりに、SAXを使えば、受信したXML文書をあらかじめ全部メモリに読み込むことなく、直接パースすることができるようになります。
原稿サイズの変更
XMLドキュメントのサイズを変更する必要がある特殊な状況に遭遇することがあります。先ほどと同じように XML ドキュメントをリアルタイムで処理する Web サーバーがあり、すべてのドキュメントのサイズが 4KB ではなく 400MB で、メモリを大量に消費するため DOM アプローチが使えないと想像してください。しかし、これはリアルタイム・システムですから、パフォーマンスが重要です。SAXを使うこともできますが、それを許す時間と強力なプロセッサーが必要です。
この場合、文書サイズを変更することで、システムの実行性能を向上させることができます。例えば、400MBのドキュメントを40MBのもの10個に分割したり、10MBのドキュメントを40個に小さくしたりすることで、400MBのドキュメントを処理するよりも効率的に処理することができます。こうすることで、DOMメソッドでファイルをメモリに読み込んで処理し、各文書要求にタイムリーに対応することができます。また、無関係なドキュメントを一掃することも可能です。
バッチ処理のアプローチでも似たような状況があります。何千もの4KBサイズのドキュメントをDOMを通して一括して処理することを想像してみてください。この場合、1000個のドキュメントを1つの4MBのファイルにまとめるのがベストです。これは、それぞれのドキュメントが(DOMであれSAXであれ)読み込むのにシステム時間を要するからです。1000のドキュメントを1つにまとめることで、1つのドキュメントを読み込むだけでよくなり、その時間は1000分の1になります。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XSLについて - XSLチュートリアル
-
xpath入門_Power Node Java Academy
-
UTF8からGB2312への乱雑なコード問題の解決策
-
htmlに埋め込まれたxmlデータがツリー構造の関係で島を形成する仕組みについて
-
XML不正文字(エスケープ文字)
-
WML Script 標準関数ライブラリ集
-
XAMLチュートリアル 翻訳者:SixSix 構文への導入
-
xslt を使って xml を xhtml にパースするためのコード
-
XPath入門 - XSLチュートリアル - 3
-
xmlをxsltスタイルでxhtmlにパースするクラス TransformBinder (FFとIE7.0に対応)