前回は、dashDBの管理画面を利用してRスクリプトを実行するSQL方法を試してみました。あらかじめ作られているスクリプトの実行にはいいですが、いろいろと試行しながら進めていくには使いづらいです。今回はRの統合環境であるRStudioを利用してみます。
RStudioへのログオン
dashDBのWeb管理画面の左上にある RStudioのボタンを押します。
すると、RStudioへのログオン画面が表示されます。ここでユーザー名、パスワードを聞かれます。この情報は、dashDBのWeb管理画面のConnection->Connction Informationのページ書かれているデータベースへ接続するためのユーザー名、パスワードを利用します。Bluemixのユーザーではないので注意してください。
無事にログオンができると、RStudioの画面が表示されます。このWebブラウザで利用できるRStudioは、ローカルにダウンロードしてインストールするRStudioと操作感に変わりはありません。どこからでもアクセスして分析ができたり、前のセッションもサーバー内に残っているので途中から継続できたりして便利です。(ログから確認するとRedHatのサーバーが立っていて、そこにRStudio Serverが導入されているようです)
そもそも、ローカルPCのメモリとかCPUとか気にする必要もないので非力なPCから接続しても作業ができます。iPadからもアクセスしてみましたが、これも問題ありませんでした。
出先でiPadから接続して分析を進めるなんてカッコイイかもしれません。
それでは、前回dashDBに作成したテーブルをRStudioで利用できるように取り込んでみます。
下記のスクリプトをRStudioの左側のところに入力して実行していきます。
## dashDBへの接続方法
# ここからはRStudioからdashDBへ接続するための設定
# df_appl_logというデータフレームにdashDBのテーブルの値を読み込んでいます
library(ibmdbR)
mycon<- idaConnect("BLUDB","","")
idaInit(mycon)
df_appl_log<- as.data.frame(ida.data.frame('"DASH102187","APPL_LOG"')[,c('ERAPSED_TIME','SERVER_NAME','SQL_ID'.'TIME_STRING')])
summary(df_appl_log) #取り込んだデータフレームの確認
データフレームを作成するところでは、件数もかなりあるので時間がかかりました。数分待っているとプロンプトが戻ってきて、右上のところに作成したデータフレームが表示されました。(df_appl_logというデータフレームにdashDBのAPPL_LOGテーブルの内容がセットされました)
データサマリーの結果
ちゃんと2604万件セットされています。ちょっと分析してグラフを作ってみる
それでは、取り込んだデータフレームを使ってグラフを作成してみます。
今回のデータは1日分のアプリケーションログからSQLの実行時間だけを抜き出したものです。これが1日を通してどのような処理時間分布になっているのかを確認してみます。
パッケージの追加
時系列データの操作には、xtsパッケージが便利です。RStudioではもともと準備されているパッケージであれば、画面右下のpakagesのタブをクリックすると既に取り込まれているものと、取り込まれていないものがリストされます。もともと準備されているものであれば、チェックボックスをチェックするだけでライブラリが読み込まれて使用可能になります。
もし、必要なライブラリがない場合には、
install.packages("xts")
のようにコマンドを発行すれば、パッケージを探してインストールしてくれます。
それでは、続けていきます。
# 時系列処理用のパッケージxtsの読み込み
# 今回は、packagesのタブでxtsをチェックしたら自動的に下記スクリプトが実行されました。
# xtsが見当たらなければ、install.packages("xts")
# library("xts") とスクリプトを実行してください。
library("xts", lib.loc="/mnt/blumeta0/home/dash102187/R/x86_64-redhat-linux-gnu-library/3.2")
# とりあえず1台のサーバー分を分析してみます
# 特定のサーバーのSQL処理時間の分析
# データフレーム作成時に条件をしています
df_server1<-df_appl_log[df_appl_log$SERVER_NAME=="server-1",]
# データフレームの中から時間情報を取得
ct_server1 <- as.POSIXct(strptime(paste("2015/07/20",df_server1$TIME_STRING),"%Y/%m/%d %H:%M:%S",tz="JST"))
# xtsオブジェクトを作成
df_server1.xts <- xts(df_server1$ERAPSED_TIME,ct_server1)
# 散布図で作成してみます
plot(df_server1.xts,type="p",main="server-1 SQL response",ylab="ms")
最後のplotでは、サーバー1台分のプロットを散布図に記入していきます。
それでも600万件。大分時間がかかりました。(20分くらいかかりました)まぁ、こんな無茶ができるのもクラウドだからでしょうか。頑張っているサーバーが全然見えないので罪悪感も少ないです。
朝一のSQLレスポンスが悪いという報告だったけど、グラフを見る限りでは朝一よりも日中のオンラインサービス中のアクセスが多いときにレスポンスの悪い処理がちらほらみえているような感じです。縦軸を50秒までにして同じ数字をグラフ化してみると。
お。朝一のところに何やら盛り上がりが確かにある。処理時間としては日中の方が悪くなっているのですがアクセス数の一番少ない朝の最初に応答時間が悪いところが確かにありそうです。
ここまでくれば、後はRの世界なのでdashDBとはあまり関係なくなってきますが、ポイントしては、In-database型のデータフレームが利用できるところにあります。通常Rはメモリ中にデータを全部展開して処理をしますが、In-database側のファンクションを使ってデータフレームを作成すると、必要なときにdatabase側にデータを取得しにいくことでメモリ中に展開しきれないようなデータを操作することができるようになるそうです。このときにはSQLが発行されますので検索レスポンスのすぐれたdatabaseが必要となります。この点、dashDBを利用するメリットになるかとおもいます。
キーワードは、大量データ、In-database型ファンクション、そしてRでの解析です。
次回
とりあえず、今回まででdashDBにデータを取り込み、それをRを使って分析する環境が構築でき、また簡単ですがRでの分析をしてみました。
これだけの環境をクラウドで無料で使えているところはすばらしいです。今はBluemixのトライアル期間中ですが、それが終了した後もdashDBであれば1GBのデータ量までは無料枠なので、今回のデータ2600万件(元データは1.2GB)くらいを取り込んで、dashDB上は、700MBほどで済んでいるので、無料枠に収まりそうです。
次はまだ決めていませんが、
- cloudantにデータを入れて、そしてそれをdashDBと連動させて見る
- 外部ツールからdashDBに接続して見る
- 他のRDBに比べて本当に速いのか試して見る
くらいから考えてみようかと思います。
シリーズ一覧
1.BluemixでAnalytics 〜dashDBを作って見る
2.BluemixでAnalytics 〜dashDBにデータをロードしてみる
3.BluemixでAnalytics 〜dashDBをSQLで操作してみる
4.BluemixでAnalytics 〜dashDBをRから使ってみる
5.BluemixでAnalytics 〜dashDBにR Studioから接続してみる