Clojure の作者 Rich Hickey が作ったデータベースサービス Datomic がおもしろそうなので、JRuby から使ってみました。
といっても、jar を JRuby で読んで debugger 起動してるだけですが。
Datomic って?
こちらの紹介記事が分かりやすいです。
大きな特徴は下記の 2 つ。
- クエリの処理とキャッシュをクライアント側 (Peer) で行うことにより、スケールしやすい
- データ (fact) を削除・更新しても過去のデータが残り、さらに任意の時点のデータベースにクエリを投げられる
かなり魅力的ですよね。
JRuby から使う
現在のところ Datomic のピアライブラリは JVM 用しかない (たぶんしばらくこのまま) ので、rubyist としては JRuby から使いたい。
ここでは Datomic Shell とほぼ同様の挙動を JRuby で実現します。
まず、JRuby の準備。rvm / rbenv 使ってるなら簡単。
rvm install jruby
rvm jruby
gem install ruby-debug
ピアライブラリのダウンロード、展開。
# datomic.com の "Get Datomic" から datomic-0.1.2753.zip をダウンロード
unzip datomic-0.1.2753cd datomic-0.1.2753
このディレクトリに下記の内容で datomic.rb をつくる。
require "java"
# datomic ピアライブラリの jar をクラスパスに追加
require "./datomic-0.1.2753.jar"
# 依存ライブラリの jar をクラスパスに追加
Dir.glob("./lib/*.jar") do |jar|
require jar
end
require "rubygems"
require "ruby-debug"
Debugger.settings[:autoeval] = true
include_class "datomic.Entity"
include_class "datomic.Connection"
include_class "datomic.Database"
include_class "datomic.Peer"
include_class "datomic.TxReport"
include_class "datomic.Util"
include_class "java.io.FileReader"
# デフォルトでは inspect が <#...> みたいなそっけないものなので
# Java オブジェクトでは to_s (toString) を使う
Java::JavaLang::Object.class_eval do
def inspect
to_s
end
end
debugger
puts "" # debugger 直後に終了しないように
あとは --debug オプションつきで起動する。
ruby --debug datomic.rb
これで、Getting Started や Tutorial を試してみましょう。
実際に使うとなると、クエリや結果のクラスを拡張すると使いやすそうですね。