XMLでのやりとりのオーバーヘッドを減らすには?
XML文書の形式でデータをやりとりすると、バイナリデータでやりとりするよりも容量が増えて、その分のオーバーヘッドが大きいと聞きました。なにか回避策はあるのでしょうか?

回答/富士ソフトABC株式会社 技術センター
2001/6/28

 XML文書には「可読性に優れている」「データの操作が容易」などの特長があります。この「可読性に優れている」面を考えるとき、分かりやすさを優先させるとどうしても要素名(タグ名)が冗長になってしまいます。要素名は、開始タグと終了タグにそれぞれ使用されるので、要素名が長ければ、それだけXML文書のデータ量がかさむことになります。

 テキストデータであるXML文書を利用したデータ交換を考えると、バイナリよりもデータ量が多くなることによって、ネットワークへの負荷が高くなります。また、XML文書の処理においても、データを操作する場合に要素名が長かったり、XML文書の容量が大きいことは、文字列読み込みの時間が長くなったり、メモリ容量を圧迫したりしますので、処理速度の低下につながることになります。

 これらはXML文書を利用する限り避けられないことですが、ここでは、オーバーヘッドを少なくする方法のいくつかを紹介しましょう。

 まず、伝送系のオーバーヘッドについて対症療法的な方法を列挙します。

  • Webサーバのデータ圧縮機能を使用する
    データをHTTPやFTPで伝送する場合には、Webサーバのデータ圧縮機能が利用できます(マイクロソフトのInternet Information Serviceなど)。XML文書は、その性質上同じ文字列が多く出現しますので、高い圧縮効率が期待できます。しかし、圧縮してデータを送信した場合には、とうぜんその圧縮方法に対応したクライアントが必要となります。

  • XML文書を何らかの方法で圧縮して送受信する
    上述の方法と同様ですが、伝送されるデータ自体が圧縮されるためデータ交換に一般性が失われてしまいます。特定者間でのデータ交換で、圧縮・解凍に要する時間が問題にならなければ、かなりの効果が期待できます。

  • ネットワークの帯域を太くする
    データを変更せず伝送系を太くすることにより、オーバーヘッド軽減の効果が期待できます。しかし、予算や施設など、さまざまな点で限界があります。

 次に、処理系と伝送系のオーバーヘッドを軽減する方法を示します。

  • 新しく作る言語自体の設計を見直す
    不必要な要素や冗長な要素をなくす、同一内容のものは1カ所にまとめるなど、言語設計から見直し、マーク付けの数を減らして必要最低限の情報を持った言語を作ることが肝要です。XMLには、変更を受け入れやすいという特徴があるとしても、設計段階できちんと定義付けすることが重要なのはいうまでもありません。

  • 要素名をできる限り短くする
    要素名を短くすれば(例えば英字2文字)、長い場合と比較して XML文書は小さくなります。対象文字列(要素名)が短ければ、検索処理などのプロセスでも当然高速化が期待できます。しかし、現在すでに発表されている多くのボキャブラリを使用する場合には、このような方法は採用できません。また、SOAP(Simple Object Access Protocol)を見ても分かるように、伝送系のオーバーヘッドは増えこそすれ、減る傾向にはないようです。

 ここに挙げた内容は、質問に対する回答のすべてではありませんが、参考になればと思い考えられる方法をいくつか記述しました。

 現在いえることは、データの増加に耐えられないほど即時性が要求される場面では、XMLの採用を見送るか、自分たちが使用する範囲内で圧縮などによりデータ量を少なくする方法を検討すべきでしょう。そもそもXMLの設計目標に「マークアップの数を減らすことは重要ではない」とあるように、データ量を少なくすることはXMLの目標ではなく、その扱いやすさに主眼をおいています。そうした部分に、ぜひ目を向けるべきではないでしょうか。

「Ask XML Expert」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間