L is Bエンジニアブログ

ビジネス用メッセンジャーdirectのエンジニアによるブログ

LisBエンジニアブログ

ビジネスチャットdirectのエンジニアブログ

NASAも使っている!OSSのRethinkDBをbotから使ってみた

f:id:nabeyama:20160523113621p:plain

お久しぶりです。鍋山です。

 

今回はNASAでも使われているらしい、RethinkDBhttps://rethinkdb.com/)をbotを経由して使ってみました!

RethinkDBのブログにNASAでのユースケースの記事があり、Google翻訳を使って読んでみました。

One small step for the Thinker: A case study of RethinkDB at NASA - RethinkDB

宇宙遊泳やらISSやら厳かなキーワードがあるあたりに、とてもすごいプロジェクトで使われているのかな・・・とドキドキしました。

 

hubotのデータストアの標準には、robot.brainを経由して利用するRedisがあります。
これをRethinkDBというOSSを代わりに使えないかと思い、簡単なbot開発を行いつつ利用してみました。

 

今回の環境など

  • RethinkDB(version 2.3.2
  • Mac OSX(version 10.11.4
  • Node.js(version 6.0.0)
  • daab

 

RethinkDBのインストールの前に、もう少しRethinkDBについて説明します。

RethinkDBは、JSON形式でデータを保存し、ReQLというデータ操作クエリーを利用します。
名前だけだとSQLに似ていますよね。
RethinkDBにはデータベースとテーブルという概念があり、カラムインデックスも設定することができるという利点があります。

f:id:nabeyama:20160523141338p:plain

MySQLのようにインデックスを設定できるのであれば、配列の中を高速にアクセスできるということにつながるのでは?と思ったことが、今回RethinkDBを試してみようとした行動のきっかけでした。

 

RethinkDBの管理画面をWEBベースで表示できます。(つまりはブラウザ表示)

プログラムにおけるデータ操作中のデータへのアクセス数をリアルタイムなグラフで確認できます。

f:id:nabeyama:20160523113256p:plain

 

グラフにはReadとWriteの2本の線が表示されます。
テーブルにデータを書き込む場合の書き込んだデータ数と、読み込んだ場合の探索したデータ数のようです。

 

今回開発したbotの概要

  • ユーザーの送信メッセージ情報を保持する

今回のbotは全くメッセージを送信しません。
別のユーザーが送信したメッセージ情報を収集するようなものにしました。
保存対象は、メッセージのタイプ(テキスト、アクションスタンプ、ファイルなど)や送信日時、テキストメッセージの長さなどで、内容そのものは保存せずに、付随するような情報だけを保存するようにしました。
後から蓄積されたデータを解析するような使用用途を想定しています。

 

RethinkDBのインストール

RethinkDBのインストールは、各環境へのインストール方法が公式サイトにありますのでご覧ください。

Installing RethinkDB - RethinkDB

Ubuntu、CentOS、OSX、Debian、Windows...と多くの環境へのインストール方法が説明されています。

 

試しにOSX、RaspberryPiとインストールしてみました。
OSXへはすぐにインストールが済みましたが、RaspberryPiは非常に長いコンパイル時間がかかりました。(7〜9時間!)ただ、RaspberryPiは、結局はメモリ使用率が高すぎで断念しました。1GBしかメモリがない場合は厳しいですね。

 

daabのコード(一部)

※今回の記事では、RethinkDBへの接続・データ挿入などについてのコードは記載していません。

bot側のコードは別ファイルにして、別機能のあるbotにも追加することで使えるような形にしてみました。

 

下記のように別ファイルを読み込んで使います。

 

そして、一部ですが、上記のコードで読み込んだdaab-analytics.jsのコードはこのようにイベントを登録する作りにしてみました。

 

 robotEventのメソッドで各イベントを登録しています。

 

botを通してRethinkDBに蓄積されたデータ

RethinkDBの管理画面にて、ReQLを実行してみると次のような実行結果が得られました。

f:id:nabeyama:20160523141313p:plain

プレビューでは、JSON形式も選択できますが、ここではテーブル形式を選択しています。

条件による絞り込みなども可能で、プレビュー方法も選べるので、欲しいデータの中身が確認しやすいですね。

 

RethinkDBを運用していく為に

今回のbotを利用したRethinkDBの活用は、個人的に試してみたかったというところにあり、本番運用などで使えるかどうかはこれから検証していきたいと思います。

WEBでの検索で、日本語の記事やブログはあまり見当たらないので、なんとなく使っていくことに不安があります。
この点は、自分で各種機能を使い、リソースの使用状況やバックアップやリプリケーション方法なども検証してクリアしていくしかないのかな、と思います。

というわけで、本番運用するには、個人的にはまだ調査不足といったところです。
まずは普段から社内で使われるボットに(こっそり)導入して様子を見てみたいと思います。