16
Riak Search 2.0を使った データ集計 Bashoジャパン() 坪坂正志

Riak Search 2.0を使ったデータ集計

Embed Size (px)

Citation preview

Page 1: Riak Search 2.0を使ったデータ集計

Riak  Search  2.0を使った  データ集計

Bashoジャパン(株)  坪坂正志

Page 2: Riak Search 2.0を使ったデータ集計

Riakとは

•  分散Key-­‐Value  Store  •  データを複数のサーバに分散して格納することにより高い可用性と拡張性を実現

Page 3: Riak Search 2.0を使ったデータ集計

Key-­‐Value  Storeの問題点

•  DBに入っているすべてのデータについて処理をすることが難しい  

•  RiakにはMapReduce機能はついてはいるがErlangかJSでプログラムを書く必要があるなど難易度が高い

Page 4: Riak Search 2.0を使ったデータ集計

Riak  Search  2.0

•  元々Riak  1.xバージョンでは検索機能は存在した  

•  しかしマルチバイト対応していない、機能が少ないなどの問題があった  

•  2.0からバックエンドにSolrを使うことによりマルチバイト対応やStats  Componentなどの処理が可能に

Page 5: Riak Search 2.0を使ったデータ集計

Solrの機能を使うと •  SolrのStatsComponentを利用することによって、特定フィールドの個数や合計、平均などが計算可能となっている  –  hFp://wiki.apache.org/solr/StatsComponent    

•  SQLでいうところのselect  sum(field)  ~的な処理が可能に  –  Facetsの機能を使うことによりgroup  by的な処理も可能となる  

•  SolrをAnalyQcs  PlaSormに利用している事例としては以下の記事が参考となる  –  hFp://www.lucenerevoluQon.org/sites/default/files/Building%20a%20Real-­‐Qme,%20Big%20Data%20AnalyQcs%20PlaSorm%20with%20Solr.pdf  

Page 6: Riak Search 2.0を使ったデータ集計

Riak  Searchを使った集計 •  各Riakサーバーで動いてるSolrプロセスが個別に集計処理を行い、結果を一つにまとめる  – 複数サーバでの検索はSolrのDistributed  Searchの機能を利用  

– サーバ内での集計処理は独立に行われるのでサーバを増やすことによってスケールアウトが可能

Page 7: Riak Search 2.0を使ったデータ集計

Solr  Cloudとの違い

•  SolrのバイナリがRiakに同梱されているのでZookeeprなどの他のコンポネントを立ち上げる必要が無い  

•  事前にshard数を決める必要が無い  – 必要に応じていくらでもサーバの追加が可能となっている  

Page 8: Riak Search 2.0を使ったデータ集計

適応イメージ

•  Riakに格納した広告ログから広告主ごとのクリック数、インプレッション数などを集計する  

•  Riakに格納したセンサデータから特定時間のセンサの出力の平均値を出したりすることができる  

Page 9: Riak Search 2.0を使ったデータ集計

テストに利用したデータ

•  データマイニングのコンテストで用いられた検索連動型広告のログデータ  – hFps://www.kddcup2012.org/c/kddcup2012-­‐track2    

– 各行にはclick数,imps数,広告ID,表示位置,広告主ID,UserIDなどが含まれる    

– 実験では一部のフィールドを利用  •  {"click_i":0,"imps_i”  1,"adid_s":"20665700",  "advid_s":"34004”,"pos_i":1,"kwid_s":"20775"}

Page 10: Riak Search 2.0を使ったデータ集計

テストに利用したデータ

•  実際のデータは1億4000万件あるが、クライアントからのデータのアップロードに時間がかかるので先頭2000万件を利用  – EC2の料金を節約したかった。。  – アップロードの際にはRiak  Cluster  3台で構築  

•  3台で構築した場合物理サーバにデータが3重化されないことがあるのでProducQonでは5台以上を推奨

Page 11: Riak Search 2.0を使ったデータ集計

Riak  Searchを使ってできるクエリ

•  特定の広告主IDに対するClickの合計を計算する  –  q=advid_s:hoge&rows=0&stats=true&stats.field=click_i  

•  さらにポジションごとのクリック数の合計を計算する  –  +  &stats.facet=pos_i  

Page 12: Riak Search 2.0を使ったデータ集計

Example  Query •  adid_s=20030165のものについて、click_iフィールドの統計値を出力

Page 13: Riak Search 2.0を使ったデータ集計

クエリのパフォーマンスについて

•  特定の広告主を指定してclick/impsの合計を投げた場合  – 数msec程度で結果が帰ってくる  

•  全体のclick/impsの合計を求めた場合  – 数百msec程度のorder  

•  全体的に書き込みを行ってる途中のときと書き込みを行ってないときでパフォーマンスが大きく変わった  

Page 14: Riak Search 2.0を使ったデータ集計

サーバを増やしたときの挙動

•  Riakクラスタを3台=>6台に変更  •  増やしているときは多少のレスポンスの低下が見られた  •  サーバを追加するときも追加の設定やシステムの停止が一切なく、簡単なコマンドで追加可能  

•  変更終了後各サーバの保持している文章量は半分に  –  データが増えていったときもサーバ追加することによりシステムの停止なく対応可能  

•  応答速度は今使っているデータにおいてはそこまで変わらなかった  –  より大規模なデータで試験する必要がある  –  実際のところ2000万件程度であればMySQL1台でも扱える

Page 15: Riak Search 2.0を使ったデータ集計

実験しててはまったところ

•  割当メモリが少ないとSolrが落ちる  – 設定のsearch.solr.jvm_opQonsのXms,Xmxの部分を増やす  

•  最初シングルプロセスでinsertのクライアントを書いたところ書き込みのパフォーマンスがでない  – 並列で書き込みをするように処理を変更するようにして改善

Page 16: Riak Search 2.0を使ったデータ集計

今後の課題

•  より大規模なデータにおけるテスト  – 特に実験環境貸してくれる方とか募集中  

•  今後Solr5.0でAnalyQcs周りが強化されるので、Riak  SearchでのAnalyQcsも強化される  – hFps://issues.apache.org/jira/browse/SOLR-­‐5302