どらちゃんのポッケ

R・統計・技術メモなど勉強ログ置き場

スケーラブルリアルタイムデータ分析入門読んだ

スケーラブルリアルタイムデータ分析入門 ―ラムダアーキテクチャによるビッグデータ処理

スケーラブルリアルタイムデータ分析入門 ―ラムダアーキテクチャによるビッグデータ処理

なぜこの本を読もうと思ったのか

最近、ちょっとリアルタイムデータ分析の基盤を考えるみたいなことが数回あったけれども、自信があまり持てていなかったので、リアルタイムデータ分析の設計を勉強したかった。また、Sparkとか、Stormとか、ツールベースではある程度追いかけているが、ツールベースになってしまって、思想的な部分が抑えられていないなーと思っていた。

この本は、ツールや実装によらない思想的な部分を書いているとあったので、今求めている本だなとポチった。

読んでみて

仕事でBigqueryを使ったり、ビッグデータ分析基盤をお守りしたりとかしている中で、自然とこうした方がいいなーと思っていたことが、体系立てて書いてあってスッキリした。私の漠然とした設計指針はそこまで間違ってなかったと安心・・・。

  • ローデータさえ守れば、その後の集計処理は何回でもやり直すことができるから、ローデータを死守する
  • 2つ同じレコードが登録されていた場合、同じレコードが重複登録されたのか、別レコードなのかということを判別するためにハッシュをつけておく
  • キューの仕組み

・・・などなど、思想的なもの/Tips的なもの、Bigqueryとか使うだけだと意識しないようなデータ設計など参考になった。

今までのRDBのような設計とは全く別の設計が必要なんだなと改めて再認識。RDBアーキテクチャはかなり枯れてきていて、研修や書籍も豊富にあるが、ビッグデータ系の設計についての書籍や研修はまだまだこれからといった感じだと思っている。今後5年10年で枯れてくるのだろうか?それとも、さらに新しいテクノロジが出てきて、もう一度技術の積み直し始めることになるのだろうか??

HyperLogLogアルゴリズム

今回、この本を読んで初めて知ったアルゴリズム。この本には、HyperLogLogの詳しい内容は書いていなかったけど、その存在を知れたたけでも収穫だった。HyperLogLogの説明は、この辺の説明がとてもわかりやすかったです。

http://yebisupress.dac.co.jp/2016/03/16/hyperloglog/

http://ameblo.jp/principia-ca/entry-11965682405.html

このアルゴリズム考えた人すごい賢いなとビックリした。

例えば、BigqueryのCOUNT DISTINCTの仕様はこんな感じで、近似値を返す。

COUNT([DISTINCT] field [, n])

関数のスコープ内の非 NULL 値の合計数を返します。 DISTINCT キーワードを使用した場合は、指定したフィールドの一意の値の数を返します。ただし、DISTINCT を指定したときに返される値は統計的近似値であり、必ずしも正確な値であるとは限りません。

ずっと、なんで近似値なんだろう?と思っていたが、その謎が解けた。BigqueryがHyperLogLogを使っているのかどうか、私が調べた範囲では出てこなかったので、HyperLogLogではない別のアルゴリズムかもしれないが、似たようなアルゴリズムで高速に集計しているのだろうと思う。

この本、1回読んだだけでは全然理解できていない&実装できないと思うので、何回か繰り返し読みたいと思います。