PipelineDBアドベントカレンダー一日目ということで、多分知らない方が多いこのストリーム処理DBについて、概略の紹介をします。
ちなみに自分はまだPipelineDBをプロダクションで使っているわけではなく、AdventCalendarの投稿はプロダクション投入に向けての調査の意味合いが強いです。
そもそもストリーム処理がなぜ必要か
昨今のWebシステムで生成されるイベントデータやログデータといったものはfluentdなどのログコレクタの発展に伴い様々なデータストアに保存され利用されるようになってきました。
そのサイズは、場合によっては日に数億行という事例も多いですがそうしたデータの利用においては、データを抽出し整形し、DBに導入するだけでもある程度のコスト・時間が必要になってきます。
そうした事例の解決にはHadoop系のプロダクトやRedshiftやBigQueryなどのカラムナー型DBなどが利用されています。これらを使うことで、例えば日の終りに全てのログを走査して集計するなどの処理は以前ほど難しくはなくなりました。
ただし、流れているデータを5分間分だけ集計してシステムにフィードバックするような処理においてはこうしたプロダクトを利用しても間に合わない、もしくはコストに見合わないストレージが必要になることが多々あります。
例えば広告サーバ開発においては未知の商品のCTRを短時間でテストし、適正な配信に活かすためにできるだけ早いログデータの分析とフィードバックが必須となってきています。
そうした場合に、流れているデータをある程度リアルタイムに逐次処理するような仕組みとしてストリーム処理が必要とされています。ストリーム処理であれば、指定した時間枠や量のログデータのみをメモリ上(もしくはディスクの場合もあります)に保持し、小さなストレージで必要とされる処理を実行できます。
こうした用途での製品にはNorikraやApache Kafka、Amazon Kinesisなどがよく使われているのではないでしょうか。
PipelineDBはこうした製品と近しいストリーム処理の仕組みを提供します。
PipelineDB
概要
Official: https://www.pipelinedb.com/
Github: https://github.com/pipelinedb/pipelinedb
Docs: http://docs.pipelinedb.com/introduction.html
紹介記事: http://jp.techcrunch.com/2015/07/08/20150707yc-alum-pipelinedb-releases-open-source-streaming-sql-database/
PipelineDBは端的に表現すると「PostgreSQL互換のクエリでストリームデータへ問い合わせ可能なDB」というと分かりやすいかと思います。
システム上に大量に流れてくるデータをPipelineDB上に流すことで、一定期間分のデータに対するSQL問い合わせを実現し、例えば「直近N時間のクリックイベントの発生数」を集計し続けるような処理が可能です。
特徴として、ストリームを流れてきたデータ自体は保持せず、作成されたContinuousViewという仕組みを通じてストリームデータの集計結果のみを保持するため、DBとしての領域はそれほど必要としません。
PipelineDB is designed to excel at SQL queries that reduce the cardinality of streaming datasets.
この一文がPipelineDBの特徴を示しており、要は流れてきたデータのカーディナリティを減らして保持することに主眼を置いています。
またストリームデータの導入から集計までの全てをSQLで完結させられることから、ETL、つまりデータの抽出・整形・導入の作業をより簡素にすることが可能です。ETLの苦労を減らすという意味ではFluentdの領域とも近く、相性が良いのではないでしょうか。また、最近はkafkaとのコネクタが出た模様で今後もこうしたコネクタが搭載されていくのではないかと思います。 LINK
ちなみにPipelineDBの開発者Derek Nelsonさんは元々AdRoll社で広告系の開発をしていたとのことです。
なぜPipelineDBを使うか
今回PipelineDBを選定した一番の理由はSQL文法がPostgreSQL互換という点です。
実務でRedshiftを利用することが多く、いわゆるラムダアーキテクチャのような直近のデータと長期間のデータを組み合わせたような分析がやりやすいのではないかという観点でメリットを感じています。
また、データの投入がPostgreSQLで可能なことからfluentdとの連携やその他各言語との連携もし易いことも魅力ではないでしょうか。
また開発も活発であり、今後他製品との連携の強化にも期待しています。
次回の自分の担当分について
Advent Calendarの次回担当分では、公式が用意しているサンプルデータを元にPipelineDBを実際に使って見ようかと思います。