16.1.6 バイナリ・ファイル形式

PGXバイナリ形式(PGB)

PGXバイナリ形式(.pgb)は、グラフ・サーバー(PGX)の独自のバイナリ形式であり、高速で効率的なファイル処理を可能にします。基本的に、ファイルはグラフおよびプロパティ・データのバイナリ・ダンプです。バイトはネットワーク・バイト順に書き込まれます(ビッグ・エンディアン)。

型のエンコーディング

表16-4 型のエンコーディング

サイズ(バイト単位)
0 Boolean 1
1 Integer 4
2 Long 8
3 Float 4
4 Double 8
7 String 可変
11 Vertex labels 可変
13 Local date 4
14 Time 4
15 Timestamp 8
16 Time with time zone 8
17 タイム・ゾーン付きのタイムスタンプ 12
18 Vector property 可変: <sizeof component-type> * <dimension>

ファイル・レイアウト

表16-5 ファイル・レイアウト

サイズ(バイト単位) 説明 必須 コメント
4 マジック・ワード はい 0x99191191
4 頂点サイズ はい 許可された値は4および8です。
4 エッジ・サイズ はい 許可された値は4および8です。
<vertex size> 頂点の数 はい  
<edge size> エッジの数 はい  
<edge size> * (<numVertices> + 1) エッジ開始配列 はい  
<vertex size> * <numEdges> 入力頂点配列 はい  
1 コンポーネント・ビットマップ はい
  • 0x0001: ノード・キー
  • 0x0002: 頂点ラベル
  • 0x0004: エッジ・ラベル
  • 0x0008: エッジ・キー
  • その他のビット: 予約済
4 vertexKeyタイプ いいえ コンポーネント・ビットマップ & 0x0001 == 0x0001の場合のみ存在します。型のエンコーディングは、表16-4を参照してください。
<vertex key layout> 頂点キー いいえ コンポーネント・ビットマップ & 0x0001 == 0x0001の場合のみ存在します。
4 edgeKeyタイプ いいえ コンポーネント・ビットマップ & 0x0008 == 0x0008の場合のみ存在します。型のエンコーディングは、表16-4を参照してください
<numEdges> * 8 エッジ・キー いいえ コンポーネント・ビットマップ & 0x0008 == 0x0008の場合のみ存在します。
4 頂点プロパティの数 はい  
<num vertex properties> * <property layout> プロパティ・データ はい 表16-11を参照してください。
4 エッジ・プロパティの数 はい  
<num edge properties> * <property layout> プロパティ・データ はい エッジ・プロパティのレイアウトを参照してください。
<vertex labels layout> 頂点ラベル いいえ コンポーネント・ビット & 0x0002 == 0x0002の場合のみ存在します。
<edge labels layout> エッジ・ラベル いいえ コンポーネント・ビット & 0x0004 == 0x0004の場合のみ存在します。
4 共有プールの数 はい  
<shared pools size> 共有プール いいえ  
<property names size> プロパティ名 いいえ コンポーネント・ビット & 0x0010 == 0x0010の場合のみ存在します。表16-20を参照してください。

頂点キーのレイアウト

頂点キーのレイアウトは、vertexKeyタイプによって異なります。PGBでは、integerlongおよびstring頂点キーがサポートされます。

表16-6 整数頂点キー

サイズ(バイト単位) 説明 必須 コメント
<numVertices> * 4 キー・データ はい 頂点ごとに対応する整数キー値。

表16-7 long頂点キー

サイズ(バイト単位) 説明 必須 コメント
<numVertices> * 8 キー・データ はい 頂点ごとに対応するlongキー値。

表16-8 文字列頂点キー

サイズ(バイト単位) 説明 必須 コメント
4 圧縮方式 はい 予約済(0である必要があります)
8 プロパティ・サイズ はい 次のデータ内の各要素のサイズ(バイト単位)
<number of keys> * <string key element layout> 文字列キー・データ はい 頂点キーの内容(表16-6を参照)

表16-9 文字列キー要素のレイアウト

サイズ(バイト単位) 説明 必須 コメント
4 文字列長 はい 文字列の長さ(バイト単位)
<string length> 文字列キー・データ はい 文字列の内容のバイト数、ゼロ文字不可

プロパティ・レイアウト

次に、文字列プロパティおよびベクトル・プロパティの特殊なレイアウトを示します。

表16-10 プリミティブ型のレイアウト

サイズ(バイト単位) 説明 必須 コメント
4 プロパティ・タイプ はい 型のエンコーディングは、表16-4を参照してください。
8 プロパティ・サイズ はい プロパティ・データのサイズ(バイト単位)
<property size> プロパティ・データ はい <numVertices/numEdges> * <type size>として格納されます

表16-11 ベクトル・プロパティのレイアウト

サイズ(バイト単位) 説明 コメント
4 ベクトル型の印 常に18です。
8 ベクトル・プロパティ・データと追加フィールドのサイズ dataSize = <sizeof component-type> * <dimension> + 8 (追加の8バイトは、ベクトル・プロパティ・ヘッダー内に追加された次の2つの追加フィールド用です。)
4 ベクトル・コンポーネント・データ型 有効な型は、integerlongfloatdoubleです。表16-4で指定した値でエンコードされます。
4 ベクトルのディメンション ベクトル値ごとのコンポーネントの数。有効なベクトル・プロパティにするには、0より大きくする必要があります。
dataSize - 8 データ 長さ* ` in which the value of the j-th component of the vector for the i-th entity is at position i * + j`の配列として格納されます。

表16-12 文字列型のレイアウト

サイズ(バイト単位) 説明 必須 コメント
4 プロパティ・タイプ はい 7である必要があります。
8 プロパティ・サイズ はい 次のデータのサイズ(バイト単位)。
1 予約済 はい 予約済(0である必要があります)。
<dictionary layout> ディクショナリ はい プロパティで使用される文字列ディクショナリ
<numVertices/numEdges> * 8 プロパティ・コンテンツ はい 文字列プロパティのコンテンツで、ディクショナリ内の文字列を参照するIDとして格納されます。

表16-13 文字列ディクショナリのレイアウト

サイズ(バイト単位) 説明 必須 コメント
1 予約済 はい 予約済(0である必要があります)。
8 文字列の数 はい 次のディクショナリ内の文字列の数。
<number of strings> * <dictionary element layout> ディクショナリ・データ はい 表16-14を参照してください。

表16-14 文字列ディクショナリ要素のレイアウト

サイズ(バイト単位) 説明 必須 コメント
8 文字列ID はい 文字列の一意のID。
4 文字列長 はい 文字列の長さ(バイト単位)。
<string length> 文字列データ はい 文字列の内容のバイト数、ゼロ文字不可

頂点ラベルのレイアウト

表16-15 頂点ラベルのレイアウト

サイズ(バイト単位) 説明 必須 コメント
4 はい 11である必要があります。
8 サイズ はい 次のデータのサイズ(バイト単位)。
<dictionary layout> ディクショナリ はい 頂点ラベルで使用される文字列ディクショナリ。
<numVertices + 1> * 8 文字列ID開始配列 はい 各頂点の<string ids>オフセット配列。
8 文字列IDの数 はい 文字列IDの数。
<number of string ids> * 8 文字列ID はい 文字列ディクショナリ内の文字列IDの配列。

エッジ・ラベルのレイアウト

エッジ・ラベルのレイアウトは、文字列型のレイアウトに従います。

共有プールのレイアウト

表16-16 共有プールのレイアウト

サイズ(バイト単位) 説明 必須 コメント
1 はい 1: 列挙、2: 接頭辞付き

表16-17 型 == 列挙

サイズ(バイト単位) 説明 必須 コメント
8 文字列の数 はい  
<number of strings> * <string table layout> ディクショナリ・データ はい 表16-19を参照してください。

表16-18 型 == 接頭辞

サイズ(バイト単位) 説明 必須 コメント
8 接頭辞の数 はい  
<number of prefixes> * <string table layout> ディクショナリ・データ はい 表16-19を参照してください。
8 接尾辞の数 はい  
<number of suffixes> * <string table layout> ディクショナリ・データ はい 表16-19を参照してください。

表16-19 共有プールの文字列表

サイズ(バイト単位) 説明 必須 コメント
8 文字列ID はい 文字列は、リテラル(列挙の場合)または接頭辞/接尾辞(接頭辞の場合)にできます。
4 文字列長 はい  
<string length> 文字列データ はい  

プロパティ名のレイアウト

表16-20 プロパティ名のレイアウト

サイズ(バイト単位) 説明 必須 コメント
8 サイズ はい 文字列は、リテラル(列挙の場合)または接頭辞/接尾辞(接頭辞の場合)にできます。
<sum of size of vertex property names> 頂点プロパティ名 いいえ 文字列キー要素のレイアウトに従います。表16-9を参照してください。
<sum of size of edge property names> エッジ・プロパティ名 いいえ 文字列キー要素のレイアウトに従います。表16-9を参照してください。