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

PGXバイナリ形式(PGB)

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

型のエンコーディング

表28-3 型のエンコーディング

サイズ(バイト単位)
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>

ファイル・レイアウト

表28-4 ファイル・レイアウト

サイズ(バイト単位) 説明 必須 コメント
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の場合のみ存在します。型のエンコーディングは、表28-3を参照してください。
<vertex key layout> 頂点キー いいえ コンポーネント・ビットマップ & 0x0001 == 0x0001の場合のみ存在します。
4 edgeKeyタイプ いいえ コンポーネント・ビットマップ & 0x0008 == 0x0008の場合のみ存在します。型のエンコーディングは、表28-3を参照してください
<numEdges> * 8 エッジ・キー いいえ コンポーネント・ビットマップ & 0x0008 == 0x0008の場合のみ存在します。
4 頂点プロパティの数 はい  
<num vertex properties> * <property layout> プロパティ・データ はい 表28-10を参照してください。
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の場合のみ存在します。表28-19を参照してください。

頂点キーのレイアウト

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

表28-5 整数頂点キー

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

表28-6 long頂点キー

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

表28-7 文字列頂点キー

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

表28-8 文字列キー要素のレイアウト

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

プロパティ・レイアウト

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

表28-9 プリミティブ型のレイアウト

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

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

サイズ(バイト単位) 説明 コメント
4 ベクトル型の印 常に18です。
8 ベクトル・プロパティ・データと追加フィールドのサイズ dataSize = <sizeof component-type> * <dimension> + 8 (追加の8バイトは、ベクトル・プロパティ・ヘッダー内に追加された次の2つの追加フィールド用です。)
4 ベクトル・コンポーネント・データ型 有効な型は、integerlongfloatdoubleです。表28-3で指定した値でエンコードされます。
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`の配列として格納されます。

表28-11 文字列型のレイアウト

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

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

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

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

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

頂点ラベルのレイアウト

表28-14 頂点ラベルのレイアウト

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

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

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

共有プールのレイアウト

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

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

表28-16 型 == 列挙

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

表28-17 型 == 接頭辞

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

表28-18 共有プールの文字列表

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

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

表28-19 プロパティ名のレイアウト

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