AllegroGraphは超強力なNoSQLデーターベース

先週、数理システムの2日間みっちり!Lispチュートリアル&事例紹介セミナーに参加してきました。内容は 公式ページわだばLisperになるブログ1日目2日目 を参考にして下さい。

いろいろと興味深い発表があったのですが、一番印象に残ったのは AllegroGraph でした、AllegroGraphを一言で表すと、非常に強力な検索機能を持つNoSQLデーターベースです。


AllegroGraphは RDF(Resource Description Framework)と呼ばれる構造でデータを格納しています。これは対象となる情報を、主語(subject)述語(predicate)目的語(object)からなる 三つ組み(Triple)の集まり/グラフで表現します。

上の例は、John、別名JackはLacyというペットを持っているという情報と「ペットを持つ」「犬」などの定義の情報も記述されています。このRDFに対し 「Johnのペットは?」などの問い合わせが行えます。

RDFW3Cで標準化されており、その応用例として皆さんご存知の RSS (RDF Site Summary) などがあります。またSPARQL等の問い合わせ言語も定義されています。

AllegroGraphは、RDFに時間や座標なのどの拡張を加えた、高性能のデータベースです。もちんろんRDBのように格納する情報のスキーマを定義する必要のないNoSQLデーターベースです。


さて、今回のセミナーで一番驚いたのは、AllegroGraphの問い合わせ言語に Prolog を使った場合の話でした。 Prologはパターンマッチングを再帰的に繰り返しながら命題を探索する言語ですのでRDFのようなデータから望む情報を取り出すのには最適な言語です。 ProlorgについてはWikipediaを参照下さい。

Prologを使った AllegroGraphの問い合わせは Using Prolog with AllegroGraph | AllegroGraph 4.1.1チュートリアルがあります。

Prologの良さが生きてる例としては (parent ?x ?y) という x の親 y を問い合せが定義されている場合
(parent 山田 ?y) で 山田さんの親が取得できますが、 (parent ?x 山田) と問い合わせると 山田さんの子供(山田さんを親とする人)が取得できます。


大抵のNoSQLデータベースには、このような高度な問い合わせ言語は存在しないと思います。というかRDBSQLですらこのような柔軟な問い合わせはできません。
しかも、AllegroGraph は現実に膨大な情報を扱うアプリケーションに組み込まれて使われているそうです。ソーシャル情報を始め、Web上やその他の膨大な情報から、ビジネスの目的にマッチした情報を抽出できる AllegroGraph は、いろいろなビジネスに即効性があるのではないかと思います。


Franz Inc. はどちらかというとアカデミックな世界(?)でしか知名度がありませんが、AllegroGraphのようなソフトがもっと注目されて良いのでは? と思います。たたし、AllegroGraph オープンソースではなく Franz Inc. の製品です。しかし評価目的での貸し出しや数理システムでのサポートがあるそうです。