スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

あまりパッとしたDremelクローンが出てこないので俺が考えた

ディスクI/Oの並列度が1000超えてないDremelクローンって…

Apache DrillやCloudera ImpalaといったDremelインスパイア系のリアルタイム低遅延でカラム型なデータストア的何かがいくつか出てきて、最初はちょっと身構えた(Amazon RedshiftはRDBクラスタって感じでDremel系とは違うかも)。Dremelの立場危うし! しかし、よくよく話を聞いてみるとどれも並列度が数十って規模らしく、ちょっとガッカリ+安心した次第。オープンソースでDremel的なものを作るなら、俺ならこうするぜ!ってアイディアを今朝思いついたので、自分で実装する気はないけど書き残しておきたい。

ビッグデータの最大のボトルネックはディスクドライブ

先日公開されたBigQueryのホワイトペーパー、英語だし基本はDremelペーパーを読みやすくした程度の内容なのであまりまじめに読んでる人はいないと思うのでポイントをかいつまむと:

  • 世の中のビッグデータ処理にはおおざっぱにOLTP系、バッチ系、OLAP系の3種類の要件がある。前者2つはBigtableクローン(Cassandra等)やMapReduceクローン(Hadoop)が普及しつつあるけど、OLAP系に対応するDremelクローンってのはあまりない(最近いろいろ出てきた)。実業務ではこのOLAP系が速いとめっちゃ便利なのに…
  • OLAP系につかう既存のデータウェアハウス製品とかアプライアンス製品では事前設計したインデックスやディメンジョンから外れるクエリはほとんど実用にならない。でもOLAPって基本、エラい人の気まぐれな疑問に答えるためのad hocなクエリとか、予期せぬトラブルにサクッと対応するための柔軟なドリルダウン作業がキモ
  • となると、結局はインデックスなしのフルスキャン/テーブルスキャン性能をどれだけ速くできるかが重要。ディスク上の1TBのデータを1秒でフルスキャンするには、1万台のディスクを物理的に並べる必要がある。そこでこれまでは、ディスクを使うのあきらめて、データベースアプライアンス製品等にものすごくお金かけてメモリやSSD大量に積んで解決するしかなかった。
  • でもクラウド上には何千・何万ってサーバーとディスクがすでにあるのだから、そこにデータをバラけさせてフルスキャンしてみればいいのでは?>これがDremel

つまり、ビッグデータな今の時代なのに、あいかわらずそのデータをディスクドライブという、すべてのデータをシーケンシャルに読み出していちいちCPUまで持ってこないと何にも処理できないデバイスに貯めこんでるのが最大のボトルネックになってる。これが例えば、ARMチップとSSDがくっついてSQLを直接解釈するようなスマートなストレージ等を大規模並列に並べたりすると世界が変わるはずだが、そういうのが価格容量比的にペイするようになって普及するのはもうちょっと先になる。なのでとりあえずは現状のディスクをどれだけたくさん並列に動作させられるかがポイントだ。

しかし冒頭の書いたように、最近出てきたDremelインスパイア系はどれも数十台規模の並列度な様子。まぁDremelとはそもそも違う用途を想定してる面もあると思うけど、OLAP系のフルスキャン用途については、Dremelのパフォーマンスには何ケタも劣ってしまうはずだ。

自分のデータを自分のディスクに入れてるから遅い

Dremelみたいにサクッと数万ノード上に展開できるような環境がDremel以外にはないからしょうがない…のだけど、でもよく考えたら、大きなデータセンターではディスクは何千、何万って数で動いている。物理的には大規模並列ディスクI/Oのための環境は整っている。問題は、それらのディスクの持ち主が自分のデータを入れるためだけに使ってるってことだ。もしデータセンター上のディスクを利用者全員で共有できるって運用にすれば、ビッグデータの最大のボトルネックを解消できるはずだ。例えば1000万件のデータを保存したかったら、それを1000台のディスクに1万件ずつ分散保存する。それだけで、フルスキャン性能は1000倍にはね上がる。

中央集権的な分散系の構築・運用はきびしいから、ふるゆわP2P系で

もちろん、信頼性の高い分散系を誰が構築・運用するのか、セキュリティの確保、リソース配分で割食わない方法…等々の現実的問題はいろいろ立ちはだかるだろうけど、逆に言えばそれらの問題を解決したオープンソース実装やデータセンター事業者が現れれば、Dremelに十分対抗できる存在になるかも。しかしDremelやHadoopのような中央集権的な設計で分散系構築&運用はヘビー過ぎるので、BitTorrentみたいなP2P系・冗長性の高い・運用とかゆるふわにできるアーキテクチャやノリなら、最初小さく次第に拡大する自然発生コミュニティ的にディスク共有仲間が増えるような気がしないでもない…と思った。誰かやってください。