日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

datomic を試してみる(2) - 導入

何はともあれまずはインストール。
今後ちょくちょくリンクを出すことになるが、datomic 公式は以下。
Datomic - Home

ダウンロード

今回は Pro 版をダウンロードした。*1

以下から最新を落としてくる。
http://downloads.datomic.com/pro.html

どっかに置く

本体は jar で固められた Java のライブラリなのだが、初期設定や簡単な動作確認に便利なコマンドラインツールも含まれているのでダウンロードした zip 展開フォルダ毎どこか適当な場所に置く。

Storage Service を使えるようにする

元ドキュメントだと以下に当たる。
Datomic Development Resources

datomic では Storage と言うある意味汎化されたデータソースを通じてやりとりすると言う仕組み。
SQL DB/DynamoDB/Riak/Couchbase/Infinispan memory cluster/ローカルファイル/オンメモリをバックエンドのDBとする事が可能。ただし Free 版で可能なのはローカルファイルとオンメモリのみ。ちなみに RDBMSJDBC ドライバさえ提供されていればどれでも良いとの事。

以降では上記公式ドキュメントと対応する見出しをなるべく入れるようにする。

評価キー送付依頼(Request an evaluation key)(任意)

RDBMS などを storage として試したい場合、評価キーをもらえれば 30 日間は無償で試せる。依頼先 URL は以下でメールアドレスさえ持っていればすぐもらえる。

上記リンクで reCAPTCHA で表示されるパスワードとメールアドレス入れたら確認メールが来るのでそこにある確認リンクに飛べば確認完了し、評価キーが記載されたメールが来る。

ローカルファイル Storage で試す(Provisioning dev mode)

せっかく評価キーを発行してもらってるので今回は dev mode と言うローカルファイルをストレージに見立てたものを試す。

評価キーインストール(Install your licence key)

公式だとライセンスキーを transactor の設定ファイル項目 license-key に入れるだけというまあその通りではあるんだが、
~/config/sample/dev-transactor-template.properties と言うテンプレートがあるので、これを
~/config/sample/dev-transactor.properties にリネームコピーしたものに以下の様な感じで license-key を入れて使う事にする。

license-key=(もらった評価キー)

もらったメールにある評価キーは 6 行に渡ってるが、改行はバックスラッシュでエスケープされてるのでそのままコピペすれば良い。

transactor 起動

~ 以下でさっき保存した ~\config\dev-transactor.properties を指定して transactor 起動する。

C:\datomic-pro-0.8.4218>bin\transactor config\dev-transactor.properties
'data-dir' property not set, defaulting to 'data' in current directory
'log-dir' property not set, defaulting to 'log' in current directory
************** This system is running in evaluation mode. For a production license, go to http://datomic.com. ****************
Starting datomic:dev://localhost:4334/<DB-NAME>, storing data in: data ...
System started datomic:dev://localhost:4334/<DB-NAME>, storing data in: data

Starting datomic~ となっていれば良いらしい。

transactor 接続確認(Connecting to the transactor)

beanshell と言う何やら Java をスクリプトっぽく扱うツールも含まれてるのでコマンドプロンプトをも一個立ち上げて繋がるか試す。

C:\datomic-pro-0.8.4218>bin\shell
Datomic Java Shell
Type Shell.help(); for help.
datomic % uri = "datomic:dev://localhost:4334/test";
<datomic:dev://localhost:4334/test>
datomic % Peer.createDatabase(uri);
<true>
datomic % Peer.connect(uri);
<{:db-id "test-0c83c230-01f8-4c19-b559-e30a7d80956f", :unsent-updates-queue 0, :
pending-txes 0, :next-t 1000, :basis-t 62, :index-rev 0, :index-root {:rev 0, :k
ey "5268d7e7-9bec-4f7c-9731-a6c542ff88f0"}, :log-root {:rev 1, :key "5268d7e7-0c
60-46dd-b423-6693e2522019"}}>
datomic %

transactor 起動時にも書いてあるんだが、接続情報 datomic:dev://localhost:4334/ の後に DB 名(ここでは test)で test と言う名の datomic DB が作成される。

んで、その作成された DB に対して Peer.connect()する事で実際に繋がるかどうかの確認となる。何かしらの内部的なマップデータらしきものが返されれば良いっぽい。
*2

SQL で言うテーブル・フィールド定義や SELECT に当たるものは次々回(?)で。

*1:この後 Free 版落として peer から transactor に繋ぐ所まで確認してるのだが、当初既存の Oracle DB をストレージにしようと考えていた名残

*2:Free 版の free プロトコル起動での data フォルダ以下を比較した感じ Pro 版での dev と同じローカルファイルと思われる。