16
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubotyのデータ永続化にLevelDBを使う

Posted at

はじめに

チャットボットフレームワークといえばGithub製のHubotが有名ですが、私はRubyが好きなので @r7kamura さん作のRubotyを使ってます。

RubotyにはBrainというデータを持つ仕組みがあり、標準ではメモリに保存されます。
メモリに保存するだけではデータの永続化ができないので、永続化にはプラグインを使用します。

この記事では、RubotyのデータをローカルのLevelDBに保存して永続化する方法を紹介します。
LevelDBを使うので、Redisのようにサーバを建てる必要はありません。

Rubotyを自前のサーバで運用してて、無駄なサーバは建てたくないという人には向いています。
逆に、RubotyをHerokuなどローカルでのファイルが永続化されない環境で運用してる人には向いてません。
(ほとんど後者だと思いますがw)

Rubotyについてはr7kamuraさんのブログを御覧ください。

LevelDB

LevelDBはGoogle製のKVSです。
InfluxDBやRiakのバックエンドに使われています。

Google先生は

LevelDB is a fast key-value storage library

と表現してます。

よくあるDBはサーバーを建てたり運用したりとめんどくさいですが、LevelDBの場合はライブラリから直接ファイルを操作するためサーバは不要です。
操作もとてもシンプルで、基本はPut(key, val)Get(key)Delete(key)だけです。

そのためLevelDBをバックエンドにしてリッチなインターフェースを提供する、みたいな形で使われることが多いようです。
KyotoCabinetなんかのKVSライブラリと似ています。

ruboty-leveldb

RubotyのLevelDBでのデータ永続化を行うのは非常に簡単で、RubotyのGemfilegem "ruboty-leveldb"を追加するだけです。

ただし、実行する環境にSnappyという圧縮ライブラリをインストールする必要があります。

Snappyインストール

Mac

MacだとHomebrewでインストールできます。

brew install snappy

CentOS 6 / 7

CentOSはyumでインストールできます。

sudo yum install snappy

Ubuntu

Ubuntuはapt-getでインストールできます。

sudo apt-get install snappy

Ruboty作成

では実際にLevelDB BrainのRubotyを作ってみます。

mkdir ldb-ruboty
cd ldb-ruboty
bundle init
echo 'gem "ruboty-leveldb"' >> Gemfile
echo 'gem "ruboty-alias"' >> Gemfile
bundle install --path vendor/bundle

Rubotyを起動して、データの永続化を確認します。
確認にはaliasを使います。

$ bundle exec ruboty
Type `exit` or `quit` to end the session.
> ruboty alias name -> nownabe
Registered alias: name -> nownabe
> ruboty list alias
name -> nownabe
> quit

$ bundle exec ruboty
Type `exit` or `quit` to end the session.
> ruboty list alias
name -> nownabe
> quit

1度終了してもaliasは登録されたままになっているので、データが永続化されていることがわかります。

データの実態は、Rubotyを起動したら作成されるruboty.ldbというディレクトリになります。
これはLevelDBのファイル群です。

$ ls
Gemfile  Gemfile.lock  ruboty.ldb  vendor

このディレクトリは、LEVELDB_PATHという環境変数で指定できます。

おわりに

Rubotyのデータ永続化にRedisみたいなリッチなDBは必要ないと言う方は、是非試してみてください。

16
19
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
16
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?