9.1 NetCDFファイルの構成要素
NetCDFファイルは2つの部分からなる一つのファイルとして格納されています。
・ ヘッダー部分は変数のデータ以外の次元・属性・変数の情報をすべて含みます。
・ データ部分は無制限次元を持たない変数のデータを含む固定サイズデータ、そして無制限次元を有する変数のデータを含む変動サイズデータからなります。
ヘッダー部分とデータ部分は両方とも機種独立型で表現されています。この形式は、配列や非バイトデータの効率的な格納をサポートするために拡張されたXDR(eXternal Data Representation)と非常に似ています。
ファイルの先頭にあるヘッダー部分はファイルに含まれる次元・変数・属性についての名前・型・その他の性質に関する情報を含みます。各変数の情報には固定サイズデータについては変数データの先頭のオフセットや、記録中の他の変数の相対オフセット等があります。ヘッダーは、また、次元長や各変数の複数次元のインデックスを適切なオフセットにマップするのに必要な情報を含みます。
このヘッダーの使用可能なスペースに余分はありません。NetCDFファイル中の次元・変数・属性(属性値をすべて含む)に必要な最低限の大きさしかありません。これによって、NetCDFファイルはコンパクトであり、データを自己記述的にするための従属的なデータを格納するのにほとんどオーバーヘッドを必要としないという利点があります。この構造の欠点は、NetCDFファイルのヘッダーを増大(または可能性としては低いが縮小)させるようなどの操作も、データをコピーすることによって移動させるということです。例えば、新しい次元や変数を追加したりする場合がそうです。このコストはnc_redefへの呼び出しの後にnc_enddefが呼び出されたときにかかります。データを書き込む前に必要な次元・変数・属性を生成して、ファイルのヘッダー部分により多くのスペースを必要とする生成後のNetCDF要素の追加や名前の変更を避けることによって、その後のヘッダー部分の変更に伴うコストを回避することができます。
ヘッダーのサイズが変更されると、ファイル中のデータは移動され、ファイル内におけるデータ値の位置が変更されます。再定義中に他のプログラムがこのファイルを読み取っている場合には、そのファイルを間違っている可能性のある旧インデックスを使用して参照することとなります。NetCDFファイルが再定義を超えて共有されるためには、再定義中の読み取りアクセスを防ぎ、次回のアクセスの前に読み取る側にnc_syncを呼び出させるような、NetCDFライブラリ外の機構が必要となります。
ヘッダーに続く固定サイズデータ部分は無制限次元を有さない変数の変数データをすべて含みます。各変数のデータはこのファイル部分に連続的に格納されています。無制限次元が無い場合には、これがNetCDFファイルの末尾の部分となります。
固定サイズデータ部分に続く記録データ部分は、それぞれ記録データの情報をすべて含む固定サイズ記録の変数番号からなります。各変数の記録データは各記録中に連続的に格納されています。
各データ部分における変数データの順番は変数が定義された順番と同じで、NetCDF変数IDの昇順になります。これを知っていると、現行ではデータを連続的に読み書きすることが最適なデータアクセス法なので、場合によってはデータアクセス性能を向上させることができます。
Quadralay Corporation http://www.webworks.com Voice: (512) 719-3399 Fax: (512) 719-3606 sales@webworks.com |