アプリケーションに組み込んで使えるJavaベースのドキュメント指向DBを探していたところ、stack overflowでOrientDBというものが紹介されていたので少し調べてみました。
OrientDBは2010年頃から開発されており、以前はGoogle Codeを使っていたようですが昨年末あたりからGithubに移行したようです。ほぼ1人で作っているようですが、開発は今もかなり活発な感じです。
Groovyの例ですが、組み込みモードで動作を試されている方がいらっしゃいました。
スキーマレスかつ検索はSQLで行うことができ、なかなか扱いやすそうです(ここではAPIを使っていますが、挿入や更新もSQLで行うことができるようです)。いわゆるテーブルのジョインはできませんが、フィールドの値として別のドキュメントを突っ込んでおけばプロパティを辿って取得したり検索条件に使えたりするのでジョイン相当のことはできる感じです。
たとえば以下のような感じでドキュメントを作成しておくと、
// ユーザを検索 List<ODocument> result = db.query( new OSQLSynchQuery<ODocument>( "select from User where address like 'takezoe@gmail.com'")); ODocument user = result.get(0); // 検索したユーザをsenderに指定してドキュメントを作成 ODocument doc = new ODocument("Question"); doc.field("sender", user); doc.field("summary", "Javaで組み込み可能なドキュメントDBはありますか?"); doc.save();
こんな感じで検索できます。
List<ODocument> result = db.query( new OSQLSynchQuery<ODocument>( "select sender.name, sender.address, summary " + "from Question " + "where sender.address like 'takezoe@gmail.com'"));
ちなみにOrientDBのGithubのWikiではサーバーモードをアプリ組み込みで使用する方法も紹介されています。Webアプリに組み込むならこっちのほうがいいかもしれません。
APIはJavaだけでなくScala、JavaScript、RESTなど様々なものが用意されています。サードパーティ製のものだとJDBC経由やAndroid、RubyやPHPで使えるものもあるみたい。以下のページに各種言語向けのバインディングの一覧があります(ただ、ScalaのAPIはモデルのプロパティがvarだったりなど、やや残念な感じです)。
ところで最近巷で話題の(?)Pack Publishingから8月にOrientDBの本が出るようです。タイトルと値段から察するに例によって入門的な薄い系の本だと思いますが、こういうのが出せるのがPack Publishingの強みですね。