LoginSignup
3
4

More than 5 years have passed since last update.

StorageにTokyoCabinetを利用する方法

Last updated at Posted at 2015-12-04

これまでは全てstorageにメモリーを指定してきましたが、物理ファイルを利用する方法を紹介します
logo.png

条件

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

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4