InfiniteGraphは、ビッグデータにおける複雑な関係を扱い、ナビゲートするために設計された分散グラフデータベースです。Objectivity社によって開発されました。グラフデータベースはグラフ構造(ノード、エッジ、プロパティ)を使用してデータを表現し保存します。相互接続されたデータや複雑な関係性を扱う場合に特に有効です。
グラフデータベースでは、ノードはエンティティを表し、エッジはエンティティ間の関係を表します。例えば、ソーシャルネットワークアプリケーションでは、各ユーザーはノードとして表現され、他のユーザーとの交友関係はノード間のエッジとして表現されます。
InfiniteGraphの特徴
InfiniteGraphは複雑なマルチホップ(中継機を用いた大規模ネットワークを可能にする仕組み)の関係を効率的に保存・検索できることで知られています。水平方向に拡張できるように設計されているため、データのサイズが大きくなってもクラスターにマシンを追加することでパフォーマンスを維持できます。
InfiniteGraphの使用例
例で説明しましょう。例えば、ソーシャルネットワークのアプリケーションでデータの保存と分析にInfiniteGraphを使用したいとします。スキーマをどのように定義するか(InfiniteGraphのAPIはJavaをサポートしているため、Javaを使用します)を以下に示します。
// ユーザーを示すPersonクラスを定義
@Vertex
public class Person extends Entity {
String name;
public Person(String name) {
this.name = name;
}
}
// 2人のユーザーの関係性を示すFriendshipクラスを定義
@Edge
public class Friendship extends Entity {
Date startDate;
public Friendship(Date startDate) {
this.startDate = startDate;
}
}このような交友関係のグラフを作成できます。
GraphFactory factory = GraphFactory.getInstance();
GraphDatabase graphDB = factory.getGraphDatabase("myGraphDB");
Transaction tx = graphDB.beginTransaction(AccessMode.READ_WRITE);
// Personノードを作成
Person hanako = new Person("Hanako");
Person taro = new Person("Taro");
Person bob = new Person("Bob");
// Friendshipエッジを作成
Friendship aliceBob = new Friendship(new Date());
Friendship bobCharlie = new Friendship(new Date());
// エッジにノードを接続
aliceBob.connect(hanako, taro);
bobCharlie.connect(taro, bob);
tx.commit();このようにグラフをナビゲートできます。
// トランザクションを開始
Transaction tx = graphDB.beginTransaction(AccessMode.READ_ONLY);
// Hanakoから交友関係を探索
Navigator navigator = hanako.navigate().depthFirst().adjacentVertices();
while (navigator.hasNext()) {
Person friend = (Person) navigator.next();
System.out.println("Hanako is friends with: " + friend.name);
}
tx.commit();これはInfiniteGraphでできることの非常に基本的な例です。InfiniteGraph(そしてグラフデータベース全般)の本当の強みは、従来の表形式データベースモデルにうまく収まらない、複雑で相互接続されたデータを扱うときに発揮されます。

