読者です 読者をやめる 読者になる 読者になる

Kompira開発者ブログ

Kompiraを日々の開発していくなかで気づいた点や調べたことなどを書いていきます。

GraphDBについて

最近、あちこちでGraphDBというキーワードを耳にしますが、とある機会があってGraphDBについていろいろと調べてみたので、簡単に紹介してみたいと思います。なお、本調査にあたって参考にした文献をまとめて文末に挙げておきます。この記事は、基本的にはこれらの文献の内容にもとづいています。

GraphDBとは

GraphDBはその名のとおりデータモデルとしてグラフ構造を採用しているものを指します。グラフ構造と一口にいっても有向グラフ、無向グラフなど様々なものがありますが、GraphDBでは、プロパティグラフ(グラフの頂点や辺に複数のプロパティを含めることができる)やマルチグラフ(複数の種類の辺を含むもの)、ハイパーグラフ(n頂点間を結ぶ辺が許されるもの)、あるいはこれらの組み合わせなど、割と汎用的なモデルを採用することが多いようです。

ここでのポイントは、採用している「データモデル」がグラフ構造ということであり、実際のデータをどのような(物理)構造で格納するかは問わないということです。実際、いくつかのGraphDBはバックエンドにRDBを採用しています。データモデルがグラフ構造ということは、いいかえれば、ユーザーは辺と頂点を使って物事をモデル化することになります。一方で、RDBユーザーはタプルと関係を使ってモデル化します。この違いは、それぞれのDBが提供する問い合わせや更新操作の違いにも表れてきます。

ところで、アカデミックの世界では、GraphDBは1990年代前半に盛んに研究されていました。その後、一旦は廃れてしまったようですが、ここにきて、エンティティ間の関係性を重視するようなアプリケーション(ソーシャルネットワークセマンティックWebなど)がトレンドになるとともに、再び注目を集めるようになっています。

GraphDBモデルの特徴

データ構造、操作言語、整合性制約というデータベースモデルの3つの基本的な要素にもとづいてGraphDBのモデルを特徴づけると以下のようになります。

  • データやスキーマがグラフ(もしくはグラフの概念を一般化したようなデータ構造、ハイパーグラフなど)によって表現される。
  • データ操作がグラフ変形によって表現される。あるいは、パスや近隣ノードなどを扱うプリミティブな操作を提供する。また、グラフのパターンマッチによって、ある構造をもった部分グラフを見つけることができる。
  • グラフデータ構造に関連した整合性制約が扱える。ラベル名がユニークである、ノード上の型に関する制約、関数従属性など。

上記3つの要素のうち、整合性制約をきちんとサポートしているようなGraphDBはまだ少ないようです。

GraphDBの適用領域

GraphDBを用いるのに最も適した領域の一つは、複雑ネットワークと呼ばれる現実世界での巨大で複雑なネットワークを扱う分野のアプリケーションです。以下にいくつか例を挙げます。

ソーシャルネットワーク
ソーシャルネットワークでは、ノードが人やグループ、辺はそれらを結ぶ関係(友達、ビジネス、夫婦などなど)となります。そのようなネットワークの分析や可視化、データ処理などは活発な領域です。
情報ネットワーク
学術文献間の引用関係、WWW、P2Pネットワーク、シソーラスにおける語クラス間の関係、などなど。
科学技術ネットワーク
インターネット、電力ネットワーク、エアラインの経路、電話ネットワーク、配送ネットワーク、地理情報システム、道路網、鉄道網、歩行者の交通量、などなど。
生物学的ネットワーク
ゲノム科学、細胞内の化学反応の関係図、生物種の相同関係、食物連鎖、神経伝達ネットワーク、などなど。

複雑ネットワーク以外にも、従来のデータベースモデルでは表現が難しかった複雑なオブジェクト、あるいはオブジェクト間の関係を扱うようなアプリケーションはGraphDBが適しているかもしれません。

最近のGraphDB

ここではGraphDBの実装をいくつか紹介します。

AllegroGraph
先駆者的な存在のGraphDBです。ただ、もともとはGraphDBとして登場しましたが、最近の開発では、セマンティックWebを指向しているようです。ソーシャルネットワーク分析のための特別な機能を提供しています。
DEX
永続的、および、一時的なグラフを操作するためのJavaライブラリを提供しています。実装がビットマップにもとづいており、巨大なグラフでも良好なパフォーマンスが得られることを目指しています。
HyperGraphDB
ハイパーグラフモデル(辺の概念が2つ以上のノードを結べるように拡張されている)を実装したデータベースです。このモデルは高階な関係を自然に表現することができます。特に、知識表現、人工知能、生物情報学のような領域でのデータモデリングに有用です。
InfiniteGraph
分散環境下でのラージスケールなグラフをサポートすることを指向したデータベースです。大量かつ分散したデータストアにまたがって効率的に関係を辿れることを目指しています。
Neo4j
関係がファーストクラスオブジェクトであるネットワーク指向モデル(network-oriented model)に基づいています。オブジェクト指向API、グラフのためのディスクベースのストレージマネージャ、グラフ巡回のためのフレームワークを実装しています。また、Cypherという独自のクエリー言語も提供しています。
Sones
グラフを対象とした高いレベルのデータ抽象概念をサポートしているGraphDBです。SQL風の独自のクエリー言語と、分散ファイルシステムを提供しています。

おわりに

以上、最近流行りのGraphDBについて紹介しました。ソーシャルネットワークに代表されるように、エンティティ間の関係性に着目した分析やアプリケーションが増々重要になってきています。このように従来のリレーショナルモデルよりもグラフモデルを用いた方が自然にモデル化できるようなアプリケーション領域はたくさんあるかと思うので、今後、ますます広がっていくと思われます。

Kompiraの開発者としては、システム運用にGraphDBを使えのではないかと考えています。たとえば、システムの構成要素をGraphDBに格納しておくことで、運用にとって必要な情報を簡単に引き出せるようになると思います。具体的には、あるサーバにインストールされているミドルウェアをアップデートしようとした時、その影響がどこまで及ぶかをGraphDBに対する問い合わせによって把握するといったことができそうです。同様に障害発生時の影響分析にも活用できそうです。

また、個人的には問い合わせ言語について興味があるので、余裕があったら簡単な問い合わせ言語を実装してみようかと思っております。

参考文献

[1] Renzo Angles, Claudio Gutierrez, "Survey of Graph Database Models", http://swp.dcc.uchile.cl/TR/2005/TR_DCC-2005-010.pdf

[2] Renzo Angles, "A Comparison of Current Graph Database Models", http://dcc.utalca.cl/~rangles/files/gdm2012.pdf