ONC+ 開発ガイド

データの標準形式

XDR のアプローチは、データを 1 つの標準形式に統一するというものです。すなわち、XDR では、1 つのバイト順序、1 つの浮動小数点形式 (IEEE)、というように標準形式が定義されています。どのマシンで実行するプログラムでも XDR を使用すれば、データがローカルデータ形式から XDR 標準データ形式に変換されるので、移植可能なデータを作成できます。同様に、どのマシンで実行するプログラムでも XDR を使用すれば、データが XDR 標準データ形式からローカルデータ形式に変換されるので、移植可能なデータを読み込むことができます。

1 つの標準形式を使用することにより、移植可能データを作成し送信するプログラムと、移植可能データを受信し使用するプログラムとが完全に切り離されます。新たなマシンは標準データ形式とローカルデータ形式の変換方法を「学習」します。 新たなマシンでは、他のマシンのローカルデータ形式を学ぶ必要がありません。これと同様に、他のマシン上で実行中の既存のプログラムグループでも、新たなマシンのローカルデータ形式を学ぶ必要がありません。新たなマシンが生成した移植可能なデータは、既存プログラムが既に理解している標準データ形式に従っているので、そのまま読み込むことができるからです。

標準データ形式によるアプローチは、XDR 以前より一般に行われていた方法です。 たとえば、TCP/IP、UDP/IP、XNS、Ethernet、および、ISO の OSI 参照モデルの第 5 層より下のプロトコルはすべて標準プロトコルです。標準化アプローチの利点は単純であることです。XDR の場合も、一連の変換ルーチンを一度書いてしまえばそれをずっと使用できます。

標準化アプローチの欠点は、同一のバイト順序を持つ 2 つのマシン間でデータを転送する際に、本来ならば必要ない XDR 標準形式への変換、また、XDR 標準形式からの変換が必要となる点です。 たとえば、バイト順序が Intel の 2 つのマシン間で XDR 標準を使用して整数データを伝送するとします。送信側のマシンでは、整数データのバイト順を Intel から XDR のバイト順序に変換し、受信側のマシンではその反対の変換を行います。 この 2 つのマシンのバイト順序は同じなので、本来このような変換は不要です。

標準データ形式とローカルデータ形式との変換に要する時間は重要ではありません。特に、分散型アプリケーションの場合は大した問題にはなりません。データ構造体を伝送する準備に要する時間のほとんどは、データ変換ではなく、データ構造体の各要素を取り出すのにかかります。

たとえば、ツリー構造を伝送するには、葉の部分をすべてたどって、リーフレコード内の各要素をバッファにコピーして境界を合わせます。葉の部分を格納した記憶領域はその後解放しなければなりません。同じように、ツリー構造を受信する場合も、各リーフへ記憶領域を割り当て、バッファからリーフへデータを移動し、正しく境界を合わせ、ポインタを構築してリーフを正しく接続する、という作業が必要になります。

どのマシンでも、標準データ形式との変換のあるなしに関係なく、データ構造体の走査とコピーにコストがかかります。分散型アプリケーションではこのような通信オーバヘッド、すなわち、送信側のプロトコル層を下ってネットワークを通り受信側のプロトコル層を上るのに時間がかかるため、標準データ形式とのデータ変換のオーバヘッドは相対的に小さくなります。