AvocadoDBについて

  • 投稿日:
  • カテゴリ:

こんにちは、某所で豆腐ハンバーグを食べないといけないくらい貧乏ということになっているタムタムです。(なんか面白かったのでこのネタしばらく使います)

English translation is here. Very thanks to @makoto_inoue!!
https://gist.github.com/2359195

今回は AvocadoDB というものを紹介したいと思います。
間違いや勘違いがあったらご指摘くださいませ。

一言でいうと、MongoDB と OrientDB を足したようなものです。Webサイトに掲載されている特徴を列挙すると以下のようになります。

  • スキーマレスです
  • クライアント・サーバモデル(アプリケーションサーバとして動作)です。そしてRESTインターフェースを提供しています。
  • JavaScriptエンジン(V8)を内蔵していて、それでデータを操作できます(もっと言えば、自分でJS追加すると機能を拡張できる!! のでKTのLuaバインディングっぽい事がもっと簡単にできます)
  • マルチスレッドで動作します
  • MVCCモデルです。ドキュメントは(内部的には追加オンリー)でバージョン管理していて、古いバージョンは自動でガベコレされます。(PostgreSQLみたいなやつ)
  • 柔軟なデータ構造を提供します。単純なKVS、DocumentDB、グラフDB(これはまだRESTで扱えないけど、シェルからはJSを介して使えます)
  • インデックスを選択できます。スキップリストやn-gramインデックスとか。(将来的にはHashIndexやGeoIndexも?)
  • 永続性の設定ができます。
  • モダンなストレージに対応しています。(※意味が良くわからない・・SSDとかに最適化してるってこと?誰か教えてエロい人)
  • オープンソースです(Apache Licence 2.0)

(追記)
※MVCCについて、Frank Celler(@fceller) さんからコメントがあったので記載しておきます。
@fceller said:

currently we have implemented Multi-Versions (aka Revisions) of documents. CC will come, when we have replication.

ちょっと英語とMVCCについての理解が浅いので勉強してくる(( T_T)
(追記ここまで)

AvocadoDB の何が熱いかと言うと、開発者のレスポンスの早さと開発速度がちょっとクレイジーなくらいはやいところ。今だとAvocadoDBについてTweetすれば関係者がレスポンスくれます。日本語でもだいたい反応してくれます。(というか、TwitterをAvocadoDBで検索すると、開発者か日本人しかつぶやいていません・・) 
あと、絶賛開発中なのにドキュメントが綺麗・豊富に揃っています。なので、Wiki を見ればだいたいの事は載っています。(目次からたどれないページがいくつかあるように感じるので、ページ一覧から行く方が早いです)
常識的なC++で書かれているので(一部Cのコードもあります)ソースコードは読みやすいです。コメントもきちんと書いてあります。RESTに関してはコアな機能がC++で実装されていて、ほとんどがJSで実装されておりコアな機能を呼び出しているという形式になっています。

開発者がどれくらい熱いかと言うと、アレな会社で一般人なイケメンをやっている人のTweetに対してVideoで返信してくるとか。



http://www.avocadodb.org/2012/04/03/skip-list-indices-in-avocadodb

各言語のDriverというかClientというかバインディングみたいなものは、公式ではPHPのものがあります。他の言語については、皆様が絶賛開発中です(なぜかみんな日本人)。現在の対応状況がロードマップに記載されています。

なお、JavaのDriverは私が絶賛開発中でございます。

進捗としては、DocumentDBとして使えるところまでは出来ています。今ユニットテストをいっぱい書いてます・・。じゃないとサーバの挙動が変わった時にregression testが出来なくて死ぬので。
概要だけ書いておくと、AvocadoClient, AvocadoDriver, AvocadoJDBCDriverという構成になります。AvocadoClientはオブジェクト指向的に扱うためのインターフェースでDocumentクラスがcreateとかを持つようになります。AvocadoDriverはREST-APIとほぼ1:1に対応した低レイヤーのインターフェースになります。AvocadoJDBCDriverはJDBCドライバとして実装しているものになります。今作っているのはAvocadoDriverです。Client/Driverと分けたのは、CommonsHttpClient4やsvnkitのような感じの低レイヤーのものと高レイヤーのものとで分離したかったからです。

こんな感じで使いますというのをGistに簡単なサンプルを載せました。(検証コードがあちこちにあって見づらいですが、使い方は至ってシンプルだと思います。)
まだgithubにはpushしてません。もうしばらくお待ちくださいませ。

AvocadoDBのインストールの方法や簡単な使い方、グロッサリーの説明は別の記事に書きます。

新しいサイトもよろしくお願いします!