AllegroGraphチームが提供するMongoGraphはMongoDBの開発者にセマンティックウェブの機能をもたらす。AllegroGraphデータベース向けのMongoDBインターフェイスを実装して、Javascriptのプログラマが結合処理とセマンティックウェブの機能を使えるようにしたのだ。この方法を使うことで、JSONオブジェクトは自動的にトリプルに変換され、MongoDBの問い合わせ言語とSPARQLの両方で扱えるようになる。MongoGraphのもうひとつの目的はSolr/Luceneのような簡単に検索できるグラフデータベース向けのフリーテキストエンジンを開発することだ
AllegoGraphのCEOであるJans Aasman氏はプレゼンを提供し、個々のトリプルではなく、オブジェクトのレベルで処理を行うことについて話をした。InfoQは氏にこの新しい手法について、また、これがどのようにNoSQLの開発者を支援するのかについて話を聞いた。
InfoQ: JSONオブジェクトをグラフデータベース内のRDFのトリプルで表すことの利点について教えてください。
Jans:最も直接的な答えは、JSONを使って、複雑なスキーマをモデリングし、map-reduce問い合わせを行わずに複雑な結合ができるということです。MongoGraphに保存されているJSONオブジェクトはJSONオブジェクトとしても扱えますし(MongoDB問い合わせ言語を使うことで)、よりきめ細かいRDFのトリプルとして扱うことで複雑なモデリングや複雑な結合処理(SPARQLを使って)が実現できます。また、RDFデータベース(別名TripleStore)のその他の先進的な機能も利用できます。問い合わせ言語SPARQLを使うこともできますし、SWRLやRIFやPrologを使ってルールを提供することも可能です。
また、Linked Open Data Cloudを使えばJSONで表現したアプリケーションのデータ構造をシームレスにRDFトリプルに結びつけることができます。
InfoQ: MongoGraphのようなデータベースに保存されたデータはどのようにアクセスできますか。
Jans: 下記に提示したMongoGraphの問い合わせはJSONオブジェクトとして'Jans'と'Aasman'のすべての本を返します。
db.authors.find({firstName: 'Jans', lastName: 'Aasman'})
しかし、著者、本、出版社の集合を保持する場合、下記のような結合処理を利用したSPARQLで記述できます。
select * where { ?x fr:firstName Jans; fr:lastName Aasman ; fr:authorOf ?book . ?book hasPublisher ?publisher . ?store fr:outletFor ?publisher; fr:located 'San Francisco' . }
InfoQ: このようなソリューションを使うことの限界は何ですか。
Jans: 現在、MongoDB APIの90%を実装しました。しかし、MongoDBのクラスタリングのメカニズムはまだエミュレートしていません。現在はAllegroGraph内に構築されたクラスタリングメカニズムに依存しています。
InfoQ: NoSQLデータベースに現れつつあるトレンドを教えてください。
Jans: セマンティックウェブの観点から言えば、ほとんどのグラフデータベースベンダはテキストのインデキシングをLuceneを基にしたインデキシング(SolrまたはElastic Search)で実施しています。ほとんどのベンダがすぐにJSONをファーストクラスのオブジェクトとしてサポートするようになっても驚きはしません。JSONとトリプル/グラフパラダイムが合わさったのは驚くほど直接的なことでした。また、私たちはキーバリューストアをどのようにしてトリプル/グラフパラダイムと組み合わせるのか実験中です。
InfoQ: このようなソリューションを使う場合、開発者やアーキテクトが考えるべきベストプラクティスとアーキテクチャパターンをどんなものですか。
Jans: 単純な結合処理が必要で、スキーマがほとんど変わらないのであれば、RDBMを使えばいいでしょう。
アプリケーションがドキュメントベースで、ドキュメントが既に結合されたネストしたツリー(FacebookページやネストしたJSONオブジェクト)として見られる場合、そして、RDBのスキーマの制約に制限されたくない場合は、MongoDBのようなキーバリューストアやドキュメントストアを使うのがいいでしょう。
上述のようなアプリケーションにも関わらず複雑な結合処理やグラフアルゴリズムを適用したい場合は、MongoGraphのアプローチが最適なソリューションかもしれません。
Srini Penchikala氏 は現在セキュリティアーキテクトとして働き、17年のソフトウエア製品管理の経験がある。