これまでは全てstorageにメモリーを指定してきましたが、物理ファイルを利用する方法を紹介します
条件
server: 1台
storage type : TokyoCabinet
ruby version : v2.1
ROMA version : v1.2.0
Installation type : rubygems
手順
1. install ROMA
$ gem install roma
2. make instance(Cluster)
$ mkroute localhost_10001 localhost_10002 --replication_in_host
ls -l
-rw-r--r-- 1 root root 35693 Dec 2 05:35 localhost_10001.route
-rw-r--r-- 1 root root 35693 Dec 2 05:35 localhost_10002.route
3. TokyoCabinet インストール
libraryのインストール
- OSにあわせて以下のライブラリをinstallします
CentOS 6.x 7.x | Ubuntu 14.x |
---|---|
gcc | gcc |
gcc-c++ | build-essential |
make | make |
zlib-devel | zlib1g-dev |
bzip2-devel | libbz2-dev |
Install TokyoCabinet Main unit
$ wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.48.tar.gz
$ tar -zxvf tokyocabinet-1.4.48.tar.gz
$ cd tokyocabinet-1.4.48
$ ./configure --prefix=/usr/local/libexec
$ make
$ sudo make install
- prefix等は必要であれば適宜変更してください
Install Tokyo Cabinet Ruby gem
- RubyからTokyoCabinetを使用できるようにするgemです
- 現在のtokyocabinet gemはrubyのv1.9.2以降には対応していないので、以下から対応版をdownloadして手動でinstallします
$ wget https://github.com/roma/tokyocabinet-ruby/archive/v1.31.a.tar.gz
$ tar -zxvf v1.31.a.tar.gz
$ cd tokyocabinet-ruby-1.31.a
$ gem build tokyocabinet.gemspec
$ gem install --local tokyocabinet-1.31.a.gem -- --with-tokyocabinet-dir=/usr/local/libexec
$ gem list tokyocabinet
*** LOCAL GEMS ***
tokyocabinet (1.31.a)
確認
- ちゃんとinstall出来たかirbで確認できます
$ irb
YOUR_RUBY :001 > require 'tokyocabinet'
=> true
YOUR_RUBY :002 > include TokyoCabinet
=> Object
YOUR_RUBY :003 > hdb = HDB.new
=> #<TokyoCabinet::HDB:0x00000002854fd8 @hdb=#<TokyoCabinet::HDB_data:0x00000002854fb0>>
YOUR_RUBY :004 > hdb.open('test.tch', HDB::OWRITER | HDB::OCREAT)
=> true
YOUR_RUBY :005 > hdb["test"] = "ok"
=> "ok"
YOUR_RUBY :006 > hdb["test"]
=> "ok"
YOUR_RUBY :007 > hdb.close
=> true
YOUR_RUBY :008 > exit
4. config設定
$ mkconfig
Which storage will you use?
[1] Ruby Hash
[2] Tokyo Cabinet
[3] Groonga
> ### => 2を選択します
残りの設定はサーバや環境に合わせて入力してください
http://qiita.com/hiroaki-iwase/items/84bdce36f2f482e6c2c3
5. booting ROMA
romad localhost -p 10001 -d --config ./config.rb --replication_in_host
romad localhost -p 10002 -d --config ./config.rb --replication_in_host
- 作成したconfig.rbを指定してROMAを起動します
6. 確認
storages[roma].storage.st_class
がTCStorageになっていればOKです
$ telnet localhost 10001
> stat storage
stats.run_iterate_storage false
stats.run_storage_clean_up false
storages[roma].storage.storage_path /home/roma/localhost_10001/roma
storages[roma].storage.st_class TCStorage
storages[roma].storage.divnum 10
storages[roma].storage.option bnum=5000000#xmsiz=16106127#opts=d#dfunit=10
.
.
.
storages[roma].storage.storage_path
にあるとおり/home/roma/localhost_10001/roma
以下にTCファイルが作成されています
$ ls -l /home/roma/localhost_10001/roma
total 204880
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 0.tc
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 1.tc
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 2.tc
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 3.tc
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 4.tc
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 5.tc
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 6.tc
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 7.tc
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 8.tc
-rw-r--r-- 1 roma roma 20975936 Dec 4 11:31 9.tc
-rw-rw-r-- 1 roma roma 0 Dec 4 11:31 lock
-rw-rw-r-- 1 roma roma 0 Dec 4 11:31 status.log.1
- 同じく/home/roma/localhost_10002/roma以下にも作成されています
Dataの中身
- virtual node, 時刻, 論理クロック(更新された回数), expired_time, value の順で1行で格納されている
- 実際のtcファイル内のデータはbinary変換されている
- 論理クロック
- レコードが更新される毎に+1されていく
- 過負荷時など、他から同時に処理が走っていた場合にどれが最新のものか判断するために利用される
参照URL
ROMA Use TokyoCabinet for ROMA : http://roma-kvs.org/learn/tokyocabinet_lib.html