まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

IBMの商用データベースである DB2 をベースとしたビッグデータ解析用 DBaaS 、BLUAcceleration for Cloud を使ってみました。

商用製品をベースとした DBaaS なので当然有料、、、なのですが、価格表によると "Managed Service" プランについてはまだ無料トライアル期間中の PaaS プラットフォーム IBM Bluemix からも提供されている、とのこと。無料ならとりあえずどんなものか使ってみる価値はありそうですね。


「一見は百聞に如かず」です、まずは使ってみましょう!
まずは提供プラットフォームである IBM Bluemix のアカウントが必要です。アカウントの取得方法については公式ページを参照してください:
IBM devloperWorks 日本語版 : IBM Bluemix


アカウントを取得したら IBM Bluemix ページからログインします: http://bluemix.net/

今回使ってみる BLUAcceleration for Cloud の Managed Service プランは IBM Bluemix という PaaS 環境の中の、データベースサービスの1つとして提供されています。したがって IBM Bluemix 環境からデータベースサーバーを作成し、そのデータベースシステムの選択肢の1つとして BLUAcceleration for Cloud がある、ということになります。

では実際に BLUAcceleration for Cloud 環境を作ってみましょう。IBM Bluemix にログイン直後の画面でダッシュボードが表示されている状態から、画面左ペインの "SERVICES" と書かれた箇所をクリックします:
2014062001


現在、自分のアカウントで使っている各種サービスの一覧が表示されます(初めて使う人の場合は何も表示されません)。ここで "Add a Service" をクリックします:
2014062002


今回はデータベースサーバーを追加したいので、少し下にスクロールして移動します。
2014062003


実はここで選択肢があります。厳密な意味での BLUAccleration for Cloud を選択するには "Big Data" 欄の "BLUAccleration" を選択することになります。一方、その上の "Data Management" 欄の "SQLDB" を選択した場合でも、厳密には BLUAcceleration for Cloud での提供ではないのですが、似たようなウェブインターフェースでの管理を行うことができます。どちらを選択してもいいのですが、今回は BLUAcceleration for Cloud を使うことが目的だったこともあるので前者を選択(クリック)します。


以下の様なダイアログが表示されます。"CREATE AND ADD TO APP" をクリックします:
2014062004


この IBM Bluemix 環境はそもそもが PaaS ということもあり、ここで作成するデータベースサービスを同環境内で稼働しているウェブアプリケーションサーバーに紐付けたり、或いはここで新規にウェブアプリケーションサーバーを追加して、そこに紐付けることもできます。実際に PaaS の一部として使う場合はここで関連ウェブアプリケーションサーバーを指定することになりますが、今回は単に DBaaS としてだけ使ってみたいので紐付けは行いません。"Add to" のセレクションボックスをクリックして "Leave unbound"(関連付けなし)を選択します(もちろんここでウェブアプリケーションサービスとの関連付けを行っても構いません)。
2014062005


このような状態になったことを確認して "CREATE" をクリックします。この図ではデータベース名が "BLUAcceleration-sl" になっています。これはすぐ後で使うので覚えておきましょう:
2014062006


おそらく一瞬で BLUAcceleration サービスが追加され、ダッシュボード画面に戻ります。サービス一覧の中に先程作成した "BLUAcceleration-sl" が追加されていることを確認して、クリックします:
2014062007


BLUAcceleration for Cloud サービスのウェブコンソールへのリンクが表示されるのでクリックします:
2014062008


で、無事に BLUAcceleration for Cloud ウェブコンソール画面にログインできます!
2014062009

・・・で、ここから何をすれば(笑)。 目的意識なしで試しに来ただけに道に迷ってしまった。

と、とりあえずは BLUAcceleration for Cloud の中までたどり着くことができました。この続きはまた今度。 (^^;

(追記: 続きはこちら


git を使っていて、ローカルで作業していたら何やらおかしくなった、、、あるあるですよね。


こんな時は以下のコマンドで、リモートサーバーの最新ファイル内容に上書きする(戻す)ことができます:
# git fetch origin
# git reset --hard origin/master

あと、これは自分がたまに使うのでおまけ。リモートリポジトリの確認方法と変更方法:
(リモートリポジトリの確認方法)
# cat .git/config
  :
  :
[remote "origin"]
  url = https://xxx.xxx.xxx/git/abc.git
  :
  :

(リモートリポジトリの変更方法)
# git remote set-url origin https://yyy.yyy.yyy/git/xyz.git

 

CouchBase サーバーは高速なドキュメント指向(JSON)データベースです。高速・大容量のデータを得意とする一方、SQL 型と異なり、SQL select による(like 節による)全文検索は苦手です。

ただ CouchBase は Apache Lucene をベースとするオープンソースでスケーラブルな全文検索&解析エンジン ElasticSearch と連携することで、この苦手部分を補っています。単なる SQL select よりも強力な検索エンジンと組み合わせることで CouchBase サーバーは更に強力なデータベースとなります。


この CouchBase サーバー環境に ElasticSearch を導入して連携させるところまでの手順を紹介します。なお CouchBase サーバー自体の導入はこちらを参照してください。CouchBase サーバーの導入まではできているという前提で、また今回は CouchBase サーバーと同じサーバー内に ElasticSearch サーバーを導入して環境構築するという前提で以下を記述します。また以下の内容についてはこの記事を記載している 2014/06/11 時点の最新環境である CouchBase 2.5.1 / ElasticSearch 1.2.1 / Couchbase Plug-in for Elasticsearch 1.3.0 の各バージョンにて確認しています。


まず ElasticSearch の動作に必要な Java 環境(Java 6以上)を用意します。Oracle Java を導入しても構いませんが、Open Java であれば以下のコマンドで導入可能です(Java 7 の場合):
# yum install java-1.7.0-openjdk

次に検索エンジンである ElasticSearch 本体を導入します。公式サイトから最新版(2014/06/11時点では 1.2.1)のインストールモジュールをダウンロードします。インストールモジュールにはいくつかの種類はありますが、今回は rpm パッケージ版(elasticsearch-1.2.1.noarch.rpm)をダウンロードします。

ダウンロードできたら rpm コマンドでインストールして起動、および自動起動設定までを行います。ちなみにこの rpm 版をインストールした場合、ElasticSearch 本体は /usr/share/elasticsearch/ 以下に導入されます :
# rpm -ivh elasticsearch-1.2.1.noarch.rpm
# /etc/init.d/elasticsearch start
# chkconfig elasticsearch on 

これで検索エンジンの ElasticSearch 本体がインストールされました。が、実際の利用時には CouchBase サーバーのデータを ElasticSearch に複製した上で検索インデックスを作成して、CouchBase サーバーの中に入っているデータに対する検索エンジンとして使いたいのです。 というわけで、これら2つを接続するためのプラグイン(と、ElasticSearch の設定をウェブから行うためのインターフェースアプリケーション)を最後に導入します。
# cd /usr/share/elasticsearch
# bin/plugin -install transport-couchbase -url http://packages.couchbase.com.s3.amazonaws.com/releases/elastic-search-adapter/1.3.0/elasticsearch-transport-couchbase-1.3.0.zip
# echo "couchbase.password: password" >> /etc/elasticsearch/elasticsearch.yml
# echo "couchbase.username: Administrator" >> /etc/elasticsearch/elasticsearch.yml

(以下引き続き ElasticSearch Head(ウェブインターフェース)の導入) # /etc/init.d/elasticsearch stop # bin/plugin -install mobz/elasticsearch-head # /etc/init.d/elasticsearch start

Elastic Head の導入と、ElasticSearch の再起動までができたらウェブブラウザで
 http://(サーバーのIPアドレス):9200/_plugin/head/
にアクセスして、ウェブインターフェースが表示されることを確認してください:
2014061101


接続用プラグインが導入できたので、次はインデックステンプレートを導入します。今回はデフォルトのインデックステンプレートを使って、インストール時に追加した beer-sample サンプルバケットを対象に設定してみます。また ElasticSearch の導入されたホストから実行する前提で記載しているので localhost を使っていますが、ElasticSearch がリモート環境にある場合は localhost 部分を該当ホストの IP アドレスに変えて実行してください:
# cd /usr/share/elasticsearch
# curl -XPUT http://localhost:9200/_template/couchbase -d @plugins/transport-couchbase/couchbase_template.json
 →{ "acknowledged":true } が返ってくることを確認
# curl -XPUT http://localhost:9200/beer-sample
 →{ "ok":true, "acknowledged":true } が返ってくることを確認
# echo "couchbase.maxConcurrentRequests: 1024" >> /etc/elasticsearch/elasticsearch.yml
# /etc/init.d/elasticsearch restart
# curl -X POST -u Administrator:password http://localhost:8091/internalSettings -d xdcrMaxConcurrentReps=8

最後に XDCR の設定をしてデータの複製処理を定義します。
Couchbase ウェブコンソール(http://***:8091) にログインしてします:
2014061102


XDCR タブを開いて、 "Create Cluster Reference" をクリックします:
2014061103


以下を入力して "Save" します:
 Cluster Name: "ElasticSearch"
 IP: (IPアドレス):9091
 Username: Administrator
 Password: (パスワード)
2014061301



Cluster Reference が作成されたことを確認します:
2014061105


続いて "Create Replication" をクリックし、以下を入力して "Replicate" をクリックします:
 From -> Bucket: beer-sample
 To -> Cluster: ElasticSearch
 To -> Bucket: beer-sample
 Advanced -> XCDR Protocol: Version 1
2014061106

 
これで Replication が定義できました:
2014061107
 
 
この状態で改めて Elastic Search のウェブインターフェースにアクセスするとデータの複製が確認できます:
2014061108



では最後にこの環境で CouchBase サーバーに格納したデータが全文検索できることを確認してみましょう。

まずは CouchBase にいくつかのデータを格納してみます。CouchBase ウェブコンソールにログインし、Data Buckets タブを開き、上記で複製の設定を行った beer-sample バケットの右にある Documents ボタンをクリックします:
2014061302


beer-sample バケット内のデータ一覧が表示されます。が、最初の段階ではデータが入ってないので何も表示されません。ここに Document(レコード)を追加してみましょう。Create Document ボタンをクリックします:
2014061303


作成する Document の ID (ハッシュキー)を適当に指定します。ここでは doc001 と入力しています。Create ボタンで作成します:
2014061304


デフォルトの内容で Document が1つ作成されました。Document が JSON フォーマットになっていることが分かります。この画面はエディタなので、ここから Document の中身を変更することも可能です:
2014061305


こんな感じの日本語のデータに書き換えてみました:
{
 "title": "ワールドカップ",
 "body": "がんばれ、日本代表!"
}


Save で保存できます:
2014061306


Documents の一覧に戻ると作成したデータが登録されていることが確認できます。以降この手順を繰り返して Document をいくつか作成しておきます:
2014061307


検索用にいくつかのデータを適当に登録してみます。JSONフォーマットなので "title" や "body" といったフィールド名も自由に追加・変更して格納できます:
2014061308


先程複製の設定を済ませているので、ここで CouchBase サーバーに登録したデータは ElasticSearch に複製されており、全文検索ができるようになっているはずです。ではその様子を確認してみます。

今度は Elastic Head にアクセスしてみて、Browser タブを選択します。この時点では何の絞り込みもしていないので、管理用データも含めて全てのレコードが右側のペインに表示されています:
2014061309


試しに、上記の2番目に登録した、id = doc002 のデータを検索してみます。左側のペインで title と書かれた箇所をクリックして展開し、そのテキストフィールドに "タイトル" と入力すると、右側のペインに id 列が doc002 のデータが見つかるはずです。CouchBase サーバー内のデータが日本語で全文検索できるようになったことが確認できました
2014061310


検索されたレコードをダブルクリックするとこんな画面が表示されます。直接 CouchBase の中身が表示されるわけではなく、ElasticSearch 側に格納されたレコードの情報が表示されるので、実際に検索した文字列が表示されるわけではありません。その代わり「title フィールドに "タイトル" という文字が含まれているレコードの id は doc002」ということが分かりました。実際のアプリケーションではこの結果を元に再度 CouchBase サーバーに id 指定で問い合わせをして、このデータレコードの情報を取得・更新・削除する、という処理フローになります:
2014061311



高速・大規模利用を想定した CouchBase で、ネックだった全文検索(それも日本語の)もこの方法でカバーできるようになりそうです。自分もまだ詳しく理解できているわけではなくて、これから調べることも多そうだけど、これはなかなかヒットの予感。。



 

このページのトップヘ