Bigtable を使用した GKE での JanusGraph

グラフ データベースは、データ エンティティとその間の関係をモデリングすることで、分析情報を得るために役立ちます。JanusGraph は、大量のデータを扱うことができるグラフ データベースです。このページでは、オーケストレーション プラットフォームとして Google Kubernetes Engine を使用し、ストレージ バックエンドとして Bigtable を使用して、 Google Cloud で JanusGraph を実行する際に役立つコンセプトについて説明します。

このドキュメントは、ストレージ バックエンドとして Bigtable を使用し、Google Cloud で JanusGraph グラフ データベースを実行することを検討しているシステム アーキテクト、データベース管理者、DevOps プロフェッショナルを対象としています。また、Google Kubernetes Engine(GKE)、Kubernetes Pod、BigtableElasticsearch に関する知識があることを前提としています。

概要

グラフ用語では、エンティティは「節点(node)」または「点(vertex)」と呼ばれ、関係は「辺(edge)」と呼ばれます。JanusGraph では、頂点と辺のどちらでも、プロパティを介して使用できるようになる追加の関連データを使用できます。

プロパティ グラフの例

上の図はプロパティ グラフの例です。

グラフ データベースは、さまざまなドメインとアクティビティをモデル化するのに役立ちます。

  • ソーシャル ネットワーク
  • 金融取引(不正行為の分析用)
  • 物理的ネットワークまたは仮想システム ネットワーク

グラフ データベースを作成する際は、数百万、場合によっては数十億の頂点とエッジを作成することがあります。Bigtable をストレージ層の基礎として JanusGraph を使用する場合は、高速クエリ(グラフ走査と呼ばれる)を実行し、サイズとスループットに応じてストレージ層を個別にスケーリングできます。JanusGraph はまた、プラグイン可能なインデックス バックエンドを使用して、頂点とエッジのプロパティに対する全文インデックスを提供します。

StatefulSet の Pod で実行されるインデックス バックエンドとして Elasticsearch を使用し、ストレージ バックエンドとして Bigtable を使用して、GKE にスケーラブルな JanusGraph インフラストラクチャをデプロイできます。完了すると、グラフデータ内に存在する関係を走査できます。

次の図は、これらの要素がどのように組み合わされているかを示しています。

GKE での Bigtable による JanusGraph のデプロイ。

図は、Elasticsearch と Bigtable を使用した GKE への JanusGraph のデプロイを示しています。

Bigtable での JanusGraph データ

グラフデータは、隣接リストとして JanusGraph によって保存されます。各行は、頂点、隣接する頂点(エッジ)、頂点とエッジに関するプロパティ メタデータを表します。行キーは頂点の一意の識別子です。頂点と別の頂点の関係や関係をさらに定義するプロパティは、エッジ列またはエッジ プロパティ列として保存されます。列修飾子と列値の両方に、Bigtable のベスト プラクティスに沿って、エッジを定義するデータが保存されます。列修飾子と列値の両方を使用してプロパティを定義するため、各頂点プロパティは別々の列として保存されます。

次の図は、このストレージ構造を示しています。

JanusGraph の隣接リストのストレージ構造。

この図は、小さなグラフ フラグメントの論理ストレージ構造と、2 つの頂点行の論理の詳細を示しています。この図では、2 つのサンプル行が 2 つの頂点を表しています。最初の頂点は単一の頂点プロパティでラベル付けされ、2 つの別個のエッジによって他の 2 つの頂点に関連付けられています。2 つ目の頂点は、2 つのプロパティと 1 つのエッジを含む列を保持しています。

次の図は、頂点エッジの論理データモデルで、エッジまたはエッジのプロパティ列の列修飾子と値の詳細を示しています。

JanusGraph のエッジとエッジのプロパティ列。

隣接する頂点ごとに、そのエッジに関するメタデータが列に格納されます。列修飾子には、エッジの関係とエッジ方向に関するメタデータ、隣接する頂点へのポインタが含まれます。列の値には、エッジラベルと追加のエッジ プロパティが含まれています。走査はどちらの方向にも可能であるため、エッジはエッジの関係の両端に 1 つずつ、合計 2 回保存されます。双方向のエッジ ストレージでは走査パフォーマンスが大幅に向上しますが、追加のストレージ容量の冗長性と非アトミック エッジ ミューテーションによるトレードオフがあります。

次の図は、頂点プロパティ列の論理データモデルを示しています。

プロパティ列の JanusGraph 列の値。

上の図は、エッジ列の列修飾子と値の詳細を示しています。

各頂点プロパティは、個別の列として保存されます。列修飾子はプロパティキーの一意の識別子です。列の値には、プロパティの識別子とプロパティの値の両方が含まれます。

JanusGraph は Bigtable の行と列の修飾子の辞書順に依存し、クエリのパフォーマンスを向上させます。

次のステップ