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

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

タグ:dashdb

Bluemix 上のデータストレージサービスである Cloudant と dashDB はデータを連携することができます。以前には Cloudant から dashDB へのレプリケーションによって実現できる、という記事を紹介しました:
Cloudant => dashDB の単方向レプリケーション

簡単に紹介すると dashDB 側から Cloudant のデータをプルする形で複製を作ることで実現する、という内容だったのですが、2016/Jan/28 時点ではこの方法は使えなくなっています。代わりに Cloudant 側から dashDB 上にデータウェアハウス用DBを作る、という(逆の)データエクスポート機能によって実現できるようになりました。 というわけで、その手順を紹介します。


まずは Cloudant 側にエクスポートするデータが格納されている必要があります。既に Cloudant でデータが溜まっているのであればそのデータを使ってください。これからデータを集める場合は Bluemix の Node-RED スターターで集めるのが簡単だと思います:
2016012801


"Node-RED Starter" ボイラープレートを使って、アプリケーション環境を作成します:
2016012802


Bluemix 上に Node.js アプリケーションサーバーと Cloudant データベースサーバーが作られ、Node-RED アプリケーションが稼働している状態が作れました。ここから Node-RED 画面に移動します:
2016012803


ここで Node-RED を使ってセンサーのデータを集めます。この辺りの詳しい手順はこちらを参照してください:
Bluemix の Node-RED サービスで IoT アプリを作る(1/2)
Bluemix の Node-RED サービスで IoT アプリを作る(2/2)
2016012805


この例では Cloudant 上の "iotdata" データベースにデータを集めました。このデータベースを dashDB にエクスポートしてみます:
2016012804


左メニューの "Warehousing" を選び、サブメニューの "Warehouses" を選択すると、現在作成されたウェアハウスの一覧が表示されます。初回は一覧に何もないので "Create a warehouse" ボタンがあるだけだと思います。今からウェアハウスを作るのでこのボタンをクリックします(またはメニューから "Warehousing" - "Create  a Warehouse" を選択します):
2016012807


「ウェアハウス」の実体が Bluemix 上の dashDB になります。というわけで、ここで Bluemix の ID とパスワードを入力してログインします:
2016012801


ログイン後、作成するウェアハウスの情報を入力します。ウェアハウスの名前を指定し、そして(今回は)ウェアハウスの dashDB を新規に作成するので "Create new dashDB instance" を選択します:
2016012802


そしてウェアハウス化する Cloudant のデータベースを指定します。今回は "iotdata" というデータベースを対象にします。途中まで入力すると候補が出てくるのでそこから選びます:
2016012803


対象データベースに "iotdata" が追加されました。必要に応じてここで複数のデータベースを追加指定することも可能です。最後に "Create Warehouse" をクリックします:
2016012804


しばらく待ちます・・・・
2016012805


Cloudant 上の "iotdata" データベースが指定した名前でウェアハウス化されました。"Open in dashDB" をクリックすると dashDB 上のデータとして開くことができます:
2016012806


dashDB で開いた時の画面です:
2016012807


メニューから Tables を選び、データベース名(IOTDATA)を選択すると、Cloudant から複製されたデータベースが確認できます。下図は Table Definition タブが選択された状態で、テーブル定義を確認できます:
2016012808


隣の Browse Data タブを選ぶと、実際のデータレコードが確認できます。Cloudant のデータが RDB である dashDB 内に格納されていることが確認できました:
2016012809


ちなみに、この時 Bluemix のダッシュボードを確認すると、未バインドの dashDB インスタンスが米国南部データセンター内に作られていました(元の Cloudant が米国南部以外で作られていても、dashDB は米国南部に作られるようです):
2016012808


また、ウェアハウスを作成した段階では Cloudant にも "_warehouser" というデータベースが作成されていました。2ドキュメントなので、おそらく管理用データベースかな:
2016012801


 

IBM Bluemix 内で利用可能な統計解析用の DBaaS である dashDB は、標準機能の一部として R 言語の実行環境である R Studio を内蔵しています:
http://www.ibm.com/software/data/dashdb/


この R Studio に dashDB 内のデータを呼び出した上で R 言語を使ってデータの解析を行う(具体的にはデータ間の相関関係を調べる)という一連の手順を紹介します。

この手順を行う上で、まず IBM Bluemix 上で dashDB を使えるようにすることと、dashDB 内に解析に使えるようなデータが格納されている必要があります。先日の別ブログでラズベリーパイのセンサーデータ(CPU温度、CPU負荷率など)を取得して、dashDB 内のテーブルに格納する、という手順を紹介しているので、実際にデータを取得して試してみたい、という方はこちらのエントリを参照してください:
Node-RED(QuickStart) のデータを dashDB に格納する


なお、ラズベリーパイを所有していないとか、或いはデータを集めるのが面倒、という場合は、実際に上記の方法で集めたデータを github 上に公開しておきましたので、こちらのデータを dashDB にインポートして使ってください(ちなみにこのデータはラズベリーパイに実際に負荷を与えて CPU 温度や CPU 負荷に変化を起こした時の、ある意味で解析しやすいデータになっています)。以下その手順を紹介します:

まずは github 上の以下のサイトから CSV データをダウンロードしてください:
https://raw.githubusercontent.com/dotnsf/RPDATA/master/RPDATA.csv
(上記 URL を開いて、内容を「名前を付けて保存」してください。ファイル名は RPDATA.csv としてください)

次に IBM Bluemix から dashDB のウェブコンソールからテーブル一覧を開きます。その手順は上述の「Node-RED(QuickStart) のデータを dashDB に格納する」のリンク先を参照してください。

テーブル一覧画面で "Add Table" ボタンをクリックします:
2015121501


"Create a table" ダイアログで作成する RPDATA テーブルの定義を指定します。DDL に以下の内容を指定して "Run DDL" ボタンをクリックします:
2015121508
CREATE TABLE "RPDATA"
(
  "ID" VARCHAR(20),
  "CPUTEMP" DOUBLE,
  "CPULOAD" DOUBLE,
  "SINE"  DOUBLE
);

成功すると "DDL ran successfully" というメッセージが表示されます:
2015121503


成功したらテーブル一覧に RPDATA テーブルが追加されているはずなので確認してみます。下図のような定義内容で追加されているはずです(ただしこの時点ではデータの中身は空です):
2015121507

(注 このテーブルのスキーマ名(上記画面では Schema で指定されている DASH104338)はこの後で R Studio からこのデータを呼び出す時に必要になるので、メモするなどして控えておいてください)


続けて中身となるデータもインポートしましょう。画面左メニューから "Load" - "Load from Desktop" を選択します:
2015121505


インポートデータを指定します。"Browse files" ボタンをクリックしてダウンロードした RPDATA.csv ファイルを指定します。また "Does row one contain the column names?" には "Yes"、Separator character には "comma" を指定します。一番下の "Does the file has columns that contains dates or times?(ファイルには日付や日時のデータを含むか?)" という質問には "No" を選択して "Load file" をクリックします:
2015121506


ファイルが読み込まれ、ロードされる予定のデータのプレビューが行われます。中身を確認して "Next" をクリックします:
2015121507


次にロード先テーブルを指定します。既に目的のテーブル(RPDATA)は作成済みなので、"Load into an existing table" を選択して "Next" をクリックします:
2015121508


テーブルの指定画面で RPDATA を選択し、"Append new data into the table"(テーブルにデータを追加する)を選択して "Finish" ボタンをクリックします:
2015121509


データのロードが実行されます。この CSV のロードが全て成功すると 189 行のデータレコードが作成されます。"Number of rows read = 189" で "Number of rows rejected = 0 " と表示されていれば全てのデータが正しく読み込まれてインポートされたことになります。画面下部にはインポートされたデータの一部がプレビューされています:
2015121510


改めてテーブル一覧に戻って RPDATA テーブルを選び、"Browse Data" タブを選択すると、インポートされた 189 行のレコードデータが確認できます:
2015121511


これで実際にデータを取得しなくても、動いていたデータの dashDB へのインポートが完了しました。では dashDB に格納されたデータを R Studio に呼び出して解析処理を行ってみます。なお、以下はここで CSV からインポートして作成した RPDATA を使って解析処理を行うため、実行結果は CSV からインポートした場合と同じものになるはずです(実際に皆さんのラズベリーパイのデータを取得した場合は異なる解析結果になると思います。実行手順の参考として確認してください)。

まずは R Studio にログインするための接続情報を確認しましょう。dashDB ウェブコンソール画面の左メニューから "Connect" - "Connection information" を選択します:
2015121501


データベースや R Studio に接続するための接続情報が表示されます。特にこの中で User IDPassword が必要になるので、どこかにメモしておきましょう:
2015121502


では改めて R Studio 画面に向かいます。dashDB ウェブコンソール画面の左メニューから "Analytics" - "R Scripts" を選択します:
2015121503


R Scripts 実行画面が表示されますが、ここは飛ばして R Studio を起動するので "R Studio" と書かれたボタンをクリックします:
2015121504


初回は R Studio にログインするための Username と Password が求められます。先程メモした接続情報の内容を入力します(必要であれば Stay signed in にチェックを入れて次回以降のログインを不要にします)。最後に "Sign in" ボタンをクリックして R Studio を起動します:
2015121505


以下の様な R Studio の画面が表示されれば成功です。これで dashDB から R Studio の呼び出しに成功しました:
2015121506


R Studio 画面左側の Console に R 言語を入力してデータの解析を行います。まずは以下の3行を1行ずつ入力していきます(青字が実行コマンド、赤字はコメント):
> mycon <- idaConnect("BLUDB", "", "") BLUEDB(dashDB)に接続
> idaInit(mycon) 初期化
> mydata <- as.data.frame(ida.data.frame('"DASHXXXXXX"."RPDATA"')[ ,c('ID','CPUTEMP','CPULOAD','SINE')])
 ↑スキーマ名とテーブル名、テーブル内の列名を指定して全データを指定し、mydata という名前の変数に代入

この3行を実行した時点で、RPDATA テーブルの内容が mydata という R 言語の変数に代入されています。画面右上部にも mydata 変数の中身(の一部)が確認できるようになっています:
2015121509



この状態からは普通に R 言語と mydata 変数を使って、統計計算を行っていくことができます。なので R 言語に詳しい人であれば好きに使っていただいて構いません。 以降はあまり詳しくない人のためにもう少し続けます。まずはデータのサマリーを参照してみましょう。先程の3行に続けて、Console に以下の1行を指定してください(青字が実行コマンド、黒字が実行結果です):
> summary(mydata)
ID CPUTEMP CPULOAD
Length:189 Min. :46.54 Min. :0.0400
Class :character 1st Qu.:47.62 1st Qu.:0.1700
Mode :character Median :47.62   Median :0.3400
Mean :48.14 Mean :0.3784 
3rd Qu.:48.69 3rd Qu.:0.5800
Max. :50.84 Max. :0.8800
SINE
Min. :-1.000000
1st Qu.:-0.720000
Median : 0.010000
Mean : 0.005608
3rd Qu.: 0.720000
Max. : 1.000000 
2015121510


CPULOAD, CPUTEMP, SINE の実行結果として Min., 1st Qu., Median, Mean, 3rd Qu., Max. という結果が表示されていますが、これらはそれぞれ以下の様な意味です:
表示意味
Min.最小値
1st Qu.下から4分の1のデータの値
Median中間値
Mean平均値
3rd Qu.下から4分の3(上から4分の1)のデータの値
Max.最大値


例えば CPUTEMP(CPU温度)であれば、測定期間中の最小は 46.54℃、最大は 50.84℃で、平均値は 48.14℃。一方、中間値(全データをソートした時の中間にあるデータの値)は 47.62℃なので全体的に平均よりも上に分布しているデータであることがわかります。

では CPUTEMP(CPU温度), CPULOAD(CPU負荷), SINE(サインカーブ)の3つのデータについて相関関係を調べてみます。実際に調べる前の時点で CPU 温度と CPU 負荷には何らかの相関関係があるような気がしますよね。一方これらと(決まった変化をとり続ける)サインカーブ値には何の関係もないような気がします。ただ実際にそのようなデータになっているかどうかを客観的に調べるのが相関係数です。相関係数は -1 から 1 までの間を取る値で、1に近いほど順の相関関係がある(一方が増えると、もう一方も増える関係にある)、-1 に近いほど逆の相関関係がある(一方が増えると、もう一方は減る関係にある)、0に近いほど相関関係がない(独立して変化する)、という関係を示す指数です。 R 言語では cor 関数を使って複数の相関関係を一発で調べることができます。パラメータには相関関係を調べたい変数をまとめて指定できます。今回はこの3つの値の相関関係を調べます。mydata 変数内ではこれらの値は2番目から4番目(1番目はID)なので、以下のように指定して実行します:
> cor(mydata[2:4])
CPUTMEP CPULOAD SINE
CPUTEMP 1.00000000 0.6329742 0.03631856
CPULOAD 0.63297415  1.0000000 -0.02040800
SINE 0.03631856 -0.02040800 1.00000000 
2015121511


結果は表の形で出力されます。CPUTEMP, CPULOAD, SINE それぞれの相関係数が2つの交点として出力されています。例えば CPUTEMP と CPULOAD の相関係数は 0.6329742 です。これはまあ比較的1に近い数字と考えられるので、相関関係があると言えそうです。一方、CPUTEMP と SINE の相関係数は 0.03631856 で 0 に近いので相関関係はなさそうです(CPULOAD と SINE も相関係数 -0.02040800 なので相関関係はなさそうです)。 このような結果から最初に推測した相関関係はデータでもある程度実証された、と言えそうです。


と、まあこんな感じです。dashDB というリレーショナルデータベースの DBaaS に格納されたデータを R Studio で読み込んで R 言語で統計処理を行う、ということができちゃうわけです。そしてこの dashDB 自体も実体としては IBM DB2 なので、JDBC などで普通にアクセスすることができます。クラウドのデータベースもアナリティクス機能を普通に搭載する時代になってきたんですねー。


IBM BluemixNode-RED および IBM IoT Foundation 環境を使って集めたデータをリレーショナルデータベース(dashDB)に格納する、という手順を紹介します。

まず準備段階として、「何の」データを集めるか、という問題があります。技術的な要素としては IBM IoT Foundation QuickStart 環境に MQTT パブリッシュが可能なアプリケーションやデバイスであれば何でもいいのですが、後のデータ解析のことを考え、シミュレーターではなく実機のデータを集めることにします。今回は IBM developerWorks Recipes から提供されているサンプルの1つでもあるラズベリーパイを使うことにします:
Connect a Raspberry Pi to Internet of Things Foundation

上記ページの Recipe を参照してラズベリーパイにアプリケーション("iot" という名前のサービス)を導入すると、ラズベリーパイから1秒ごとに CPU 負荷率(%)、CPU 温度(℃)、そしてサインカーブを描くような -1 から 1 までの間の値、の3つの値が1秒おきに IBM IoT Foundation(MQTT ブローカー)に送られるようになります。今回はそのデータを集めてみます。

iot サービスは MAC アドレスを deviceId として IoT Foundation QuickStart にメッセージを MQTT パブリッシュする仕様になっています。そこで iot サービス導入済みのラズベリーパイにログインし、ifconfig コマンドでイーサネットポート(或いはワイアレスポート)の MAC アドレスを調べておきます(下図では b827ebb9ddc0 ):
2015121502

ちなみにこの MAC アドレスは本物なので、もしラズベリーパイのデータを集めたいのであれば同じアドレスを指定いただければ、僕の自宅のラズパイデータを収集することができますw


そして Bluemix 上に作成した Node-RED 環境に ibmiot インプットノードと、debug アウトプットノードを配置して、線を結びます:
2015121501


また ibmiot インプットノードをダブルクリックして開き、deviceId 欄に先程調べた MAC アドレスを入力して OK をクリックします:
2015121503


また debug アウトプットノードもダブルクリックして開き、Output 欄を "complete msg object" に変更します(実体である payload 以外のデータも出力するようにします):
2015121506


最後に Node-RED 画面右上の Deploy ボタンをクリックすると、このノードアプリケーションが動き出します。指定した deviceId のデータを IBM IoT Foundation QuickStart(MQTT ブローカー)を通じて取得し、画面内の debug タブに出力されます:
2015121504


この個々のデータをよく見るとこのようなデータが送られてきていることが確認できます:
2015121505

{
"topic": "iot-2/type/iotsample-raspberrypi/id/b827ebb9ddc0/evt/status/fmt/json",
"payload": { "d":{ "myName": "myPi", "cputemp": 40.08, CPU温度(℃) "cpuload": 0,   CPU負荷(%) "sine": 0.53    サインカーブの値 }
},
"deviceId": "b827ebb9ddc0",
"deviceType": "iotsample-raspberrypi",
"eventType": "status",
"format": "json",
"_msgid": "8ebe5e09.7141a" 一意のメッセージID }

上記の赤字で書かれたデータは個々のメッセージ毎に変わるデータなので、このデータを集めることにします。先程作ったパレットから線を削除し、function ノードを間に追加して線を繋ぎ直します:
2015121507


function ノードをダブルクリックして、ここで JSON データの変換を行うよう指定します。以下のに内容に書き換えて OK をクリックしてください:
2015121508

return { payload:{
 ID: msg._msgid,
 CPUTEMP: msg.payload.d.cputemp,
 CPULOAD: msg.payload.d.cpuload,
 SINE: msg.payload.d.sine
}};

これで送られてくるメッセージから、ID, CPUTEMP, CPULOAD, SINE の4つの値だけをフラットに取り出すことができるようになりました。この状態で再度 Deploy すると debug タブにはこのようなデータが流れてくるはずです:
2015121509


この payload 部分を dashDB に格納します。改めて Bluemix のプロジェクトに dashDB サービスを追加します:
2015121501


実際にデータを追加(insert)するには、その前にテーブルを定義しておく必要があります。テーブルを定義するために dashDB サービスをクリックし、"LAUNCH" ボタンをクリックしてウェブコンソール画面へ移動します:
2015121502


dashDB のウェブコンソール画面が表示されたら、左メニューから "Tables" を選択します:
2015121503


テーブル一覧画面で "Add Table" ボタンをクリックします:
2015121504


"Create a table" ダイアログボックスが表示されます。ここで CREATE TABLE の SQL を指定して、テーブルを作成します:
2015121505


集めたデータを格納できるよう、以下の内容で RPDATA テーブルのスキーマを指定し、最後に "Run DDL" ボタンをクリックします:
CREATE TABLE "RPDATA"
(
  "ID" VARCHAR(20),
  "CPUTEMP" DOUBLE,
  "CPULOAD" DOUBLE,
  "SINE"  DOUBLE
);

"DDL ran successfully" というメッセージが表示されれば成功です:
2015121506


改めて先ほどの画面に戻るとテーブル一覧の中に "RPDATA" テーブルが追加されています。"RPDATA" テーブルを選択すると RPDATA テーブルの設計要素が表示されます。これで集めたデータを格納するためのテーブルが定義できました:
2015121507


改めて Node-RED 画面に戻り、dashDB ノード(左側だけに接続パーツが付いているもの)をパレットに追加し、function ノードから紐付けます:
2015121508


dashDB ノードをダブルクリックして、Service には Bluemix 上のサービス名称(おそらく選択肢は1つだけなのでそれを選択)、Table にはこのデータを格納する RPDATA テーブル(上記で定義したテーブル)を指定し、OK ボタンをクリックします:
2015121509


この状態で改めて Deploy します。成功しても Node-RED 上の画面では特に変化はありませんが、ラズベリーパイから送られてくるデータは dashDB の RPDATA テーブルに格納され続けているはずです:
2015121510


しばらく待ってから dashDB のウェブコンソール画面に移動し、テーブル一覧で RPDATA テーブルを選択して Browse Data タブを選ぶと、その時点までに溜まったデータが表示されます:
2015121511


これでラズベリーパイのデータを IBM IoT Foundation QuickStart 経由で dashDB に格納する、という処理が実現できました。


(追記 このエントリの続編はこちらです)
 

IBM Bluemix のサービスの中には IBM のリレーショナルデータベースである DB2 が3つ用意されています:
2015102201

これらの中身はいずれも DB2 ですが、サービスとしては同じではありません。これらの違いについて、簡単に紹介します。


まず "SQL Database" です。これは DB2 の標準機能を DBaaS として提供するものです(JSON ストアなど、ライセンス製品では提供されている一部の機能は使えません)。IBM のクラウド上に指定されたスペックの DB2 インスタンスが用意され、IBM が管理する、というものになります:
2015102202


次に "DB2 on Cloud" です。こちらも DB2 の機能を IBM のクラウド(SoftLayer)上にインスタンスを作成して提供するものです。前者の "SQL Database" との大きな違いは利用者が(SSH を使ってサーバーにログインして)管理するという点にあります:
2015102203


最後は "dashDB" です。これはライセンス製品名でいうと "DB2 BLU Accleration" という上位エディションにあたるもので、カラムストアや R 言語エンジンといった統計処理を行うための機能が提供された DB2 、という位置付けになります:
2015102204


これらの違いをまとめるとこのような感じになるでしょうか:
 SQL DatabaseDB2 on ClouddashDB
提供ソフトウェアDB2 Enterprise ServerDB2 Advanced Workgroup ServerDB2 BLU Acceleration
提供形態DBaaSクラウドDBaaS
管理者IBM利用者IBM
用途データの格納
クエリーによる取り出し/更新
データの格納
クエリーによる取り出し/更新
データの格納
統計計算


なので、用途が少しずつですが目的としては明らかに違う、ということがお分かりいただけると思います。DB2 サーバーとしてはいずれもクラウド上にあるものですが、管理の有無や用途などが異なっているので、「どれがいいか?」ではなく、「どういう要件で何をするのか/したいのか?」を基準に考えていく必要があります(場合によっては複数組み合わせることもあります)。


(注 この記事の内容は古くなっています。新しい情報はこちらを参照してください)


Bluemix を、特に IoT 関連サービスの開発で Bluemix を使っていると、データを Cloudant に格納するのが便利です。Node-RED スターターボイラープレートに照準装備されていることもあるし、データ形式が機器ごとに異なるセンサーのデータをデータベースに格納しようとすると、テーブル定義の不要な NoSQL データベースの方が楽です。

でも NoSQL に格納されたデータは再利用が難しいです。SQL も使えないのでクエリーでデータを選別することも難しく、データを貯めるまではいいのですが、その後の利用時に手間取りがちになってしまいます。。。

そんな問題を解決する目的で IBM dashDB が提供されています。これは DB2 BLU Acceleration 技術を使った統計用 DB2 の DBaaS です。特筆する機能の1つに Claudant からの単方向レプリケーション機能が装備されていて、Claudant の特定のデータベースに格納された内容を dashDB のテーブルにレプリケーションできる、というものです。レプリケーション後は dashDB のデータとして利用できるので、普通に SQL のクエリーを使うこともできますし、カラムナストアを使った高速な統計機能を使うこともできますし、R 言語を使って解析することもできます。

データが dashDB に格納されてしまえば、こっちのもの、という感じ。 なので大量のデータを Cloudant に格納するだけして、解析が必要なデータは dashDB にレプリケーションする、という使い方がビッグデータ時代ではとてもリーズナブルなわけです。


運良く(?)Cloudant も dashDB も IBM Bluemix のサービスとして提供されています。この単方向レプリケーション機能を実際に試してみました。その時の様子を紹介します。

まず Bluemix 上の Node-RED エディタを使って IoT フローアプリケーションを作ります。このあたりの手順はこちらも参照ください。とりあえずシミュレータを使うなどして機器デバイスから発信される大量のセンサーデータを Cloudant に格納します:
2015051601


この Cloudant に格納されたデータを Bluemix 上から確認してみます。NoSQL なので、データベース内のデータ一覧を見ると中身が少しわかりにくいかもしれません。
2015051602


1つのデータを選択して詳細を見ると、より理解しやすい形で確認できます。この例では time や objectTemp, ambientTemp, accelX, ... などのセンサーデータが JSON 形式で格納されていることが確認できます:
2015051603


ではこのサービスにレプリケーション先となる dashDB サービスを追加します。アプリケーションの画面から「サービスまたは API の追加」をクリックします:
2015051604


ビッグデータカテゴリの中にある dashDB を選択してプロジェクトに追加します:
2015051605


念のため。dashDB は無料枠のある有償サービスなので、そのサービス価格を確認しておきます。デフォルトの Entry プランの場合は 1GB データまでは無料。20GB までは月5250円で使うことができます(最初の30日間はデータ量に関わらず無料)。ちなみにこのサービスで使っているソフトは、ライセンス契約で買うとものすごく高いです(苦笑)。ある意味でこれをクラウドから従量課金で使えるのはお得です。特に無料枠で使うつもりの方はデータ量に気をつけてください:
2015051606


プロジェクトに追加後の画面です。dashDB サービスが追加されたことを確認します:
2015051607


ではこの追加した dashDB に対して、Cloudant のデータを単方向でレプリケーションする設定を行います。まず Claudant 側の接続情報が必要なので、Cloudant サービスの「資格情報の表示」部分をクリックします:
2015051608


以下の様な情報が表示されます。host と username, password, そして Cloudant 内で使っていて、dashDB にレプリケーションしたいデータベースの名前をメモしておきます:
{
  "cloudantNoSQLDB": [
    {
      "name": "dotnsf-nodered-cloudantNoSQLDB",
      "label": "cloudantNoSQLDB",
      "plan": "Shared",
      "credentials": {
        "username": "(ユーザー名)",
        "password": "(パスワード)",
        "host": "(ホスト名)",
        "port": 443,
        "url": "...."
      }
    }
  ]
}

これらの情報が確認できたら dashDB への単方向レプリケーションを設定します。ダッシュボードから dashDB アイコンをクリックします:
2015051609


dashDB の説明画面が表示されるので、"LAUNCH" ボタンをクリックします:
2015051610


初期画面が表示されます。レプリケーションは初期データのロードとして設定するので "Load your data" ボタンをクリックします:
2015051611


次の画面で "Cloudant" を選択し、"load" ボタンをクリックして Cloudant からの単方向レプリケーションで初期データをロードすることを指定します:
2015051612


次の画面で Cloudant の情報と、レプリケーション先となる dashDB のデータベース名を指定します。Cloudant の情報として必要なのは以下の3点です:
 データベースURL : https://(接続情報の host の値)/(目的のデータが格納されているデータベース名)
 ユーザー名: (接続情報の username の値)
 パスワード: (接続情報の password の値)

また dashDB のデータベース名として指定するデータベースはこの段階で存在している必要はありません。存在していない場合は新規に作成します。最後に "Start Sync" ボタンをクリックして同期を実行します:
2015051613


同期の設定が正しければ、この同期が "Running" ステータスで有効に設定されたことが表示で確認できます:
2015051614


改めて "Tables" タブを選択し、テーブルにレプリケーション先に指定したテーブルを選択すると、Cloudant のデータが dashDB のテーブルとして自動的にマッピングが定義されていることが確認できます:
2015051615


ここで "Browse Data" をクリックすると、実際のデータレコードが確認できます。元々は Cloudant に含まれていたデータレコードが dashDB に格納されています。また、これはデータのコピーではなく単方向レプリケーションなので、今後 Cloudant にデータが追加されると自動的にこの dashDB のこのテーブルにデータが複製されてくることになります:
2015051616


これで IoT のセンターデータが SQL の使える dashDB に同期で格納できることが確認できました。センサーデータは書き換えることはあまり考えにくく、統計目的で参照することが多いと思われるので、単方向レプリケーションでもあまり問題にならないと思っています。これでセンサーからのビッグデータを統計目的で使う、というためのシステム基盤が簡単に作れることが分かりました。

 

このページのトップヘ