S3ネイティブなデータベースエンジン

大分、更新していなかった。

http://developer.amazonwebservices.com/connect/thread.jspa?messageID=72953&tstart=0#72953

EC2はデータが揮発性だから移行に二の足を踏んでいる、などとウダウダ言っていたのだが、いよいよS3を使った不揮発(かつ先進)のデータベース(?)エンジンが出てきた模様。

前回(mysql interface to amazon s3 - Webプログラミング日記)紹介したアプローチは、mysqlのバックエンドストレージの一つとしてS3を利用して不揮発性を実現しようというものだったが、こちらは全く新しいデータベースエンジンを作ってしまったらしい。

「データベース(?)エンジン」とハテナつきで紹介しているのはなぜかというと、従来のSQL記法すら捨て去っていて、クエリをLucene記法で書くから。具体的には以下のような感じ

bm.find("tags:(+css +examples)",{ :random => 1})
bm.find("title:(linux)",{:sortby => "title"})

http://thrudb.googlecode.com/svn/trunk/tutorial/rb/BookmarkExample.rbより

まだソースは読んでいないのだが、S3のメタデータ情報のあたりにキーとなるテキストを格納しておいて、サーバプログラムはそれをキャッシュとして取り込んで、高速で検索できるようにLuceneでインデキシングしておくという感じの実装だろうと想像している。

クエリを出すたびに全文検索エンジンが走っているわけなので、パフォーマンス面が若干心配されるが、作者のサイトhttp://junkdepot.com/は既に上記エンジン上で構築されているらしく重さは感じられない。

ちなみにLucene記法はこんな感じ
http://lucene.apache.org/java/docs/queryparsersyntax.html

全文検索だとすると、数値データの算術比較などはできないはずなので、どうするのかと思っていたら、Range Search記法でできるっぽい。

非定型テーブルでも扱えるXMLデータベースのような使い方ができそうで、だとするとすごい自由度が高そうだ。問題は果たして使いこなせるかどうか。

いろいろな意味で先進で面白い試みのソフトウェアですばらしい。