データ分析・活用現場のボトルネック②「ストレージ」
―― ところでミックさんはデータベースのほうで以前から分析に関わられてきたとのことですが、その観点からのボトルネックについてはいかがでしょうか。
ミック ► 先ほどの西内さんのお話では「分析自体は結構速くいけます」とのことでしたが、システム屋から見ると、分析システムの処理や、基幹システムから分析用データを持ってくる仕組みのところで、まだまだ時間がかかっている印象です。システム側は、本当のリアルタイム性・高速性をまだ実現できていないんじゃないかなと。
大量のデータを分析をしようとしたときに、何がボトルネックになってくるかというと、今はもう完全にストレージです。以前はボトルネックといえばネットワークでしたし、そもそもこれほど大量のデータを扱うという発想がありませんでした。ネットワークのブロードバンド化が進み、帯域問題が解決するのと並行して、ストレージの低価格化によって大量データを保存できるようになった結果、ストレージの読み書きの遅さがボトルネックになって性能が出ない、というのが現在の状況です。
こうした大量データを扱う際の性能問題に対するシステム側からの解としては、いくつかありますが、やはり高速なメディアを使うのが一番手っ取り早い解です。インメモリでデータを扱えれば、処理できるデータサイズは小さくなってしまいますが、これが一番速い。それが無理な場合、最近ではSSD(Solid State Disk)、Fusion-ioといった非ディスクのストレージや、大量データの分析に特化したアプライアンス製品を利用するケースも増えてきています。
―― クラウドの登場で、システムのスケールアウトが比較的容易になったと思うのですが、データベースに関してそれは解決策になりませんか?
ミック ► システム全体では、そのように複数のノードに処理を分散させて性能を線形で伸ばしていく戦略もありますが、データベースに関しては、伝統的にそれが難しいところがあります。データベースには、データを1箇所に集めないと処理がなかなかできない、というタイプのものが多いからです。CPUやメモリといったスケールアウトできる部分は分散化されているのですが、データだけはどうしても共有にならざるを得ません。特に大量のデータを扱う分析では、そこがボトルネックになる場合が多いです。
―― 西内さんはこのように、システム上のボトルネックを感じたことはありますか?
西内 ► それは実際にはよくあります。たとえば「レコメンデーションエンジンを作りましょう」という場合、アルゴリズムの面ではもういろんな研究成果が論文になっていて、計算式まで書いてありますし、むしろそれをスクラッチで作れない方がおかしいと思うくらいです。しかし、理論上はこれでいけるとわかったとしても、実際にシステムにして使い出してみると「いかにして、そこから手を抜くか勝負」というか、「精度をほとんど落とさずに計算量を減らし、近似的に計算結果を近いものにするか」、あるいは「力業として、ハードウェアに投資をするか」という判断は経験というか、実際にやってみないとよくわからない部分だったりします。
これの対応策には「基本的にはデータはRDBで管理しているけれども、計算に必要なここの部分だけはNoSQLで管理する」とか、いろんなものが提案されているんですが、まだ過渡期の技術という印象です。そこで、「ちょっとこれ、試してみたいから提案してみよう」といった実験的なものを、検証を兼ねて仕事の中に紛れ込ませることもあります。
ミック ► レコメンデーションエンジンには確立された理論があるというお話ですが、これをシステム側の観点から言い換えると、データをCPUに食わせて回すことにかけては、すでに確立された方法論があるということ。CPUの処理能力(リソース)は爆発的に増えていく一方なので、データをCPUに渡すことができれば、後はとてもスムーズにいくことが保証されているといえると思うんです。問題は、どうやってデータをCPUまで持っていくか。我々システム屋が一番悩むところです。
―― なるほど。
ミック ► この問題の解決策には、3つあると思っています。1つはNoSQLに一部のデータを持たせてやる、インメモリでデータを持たせてやるといった、いわば「スモールデータ」に回帰するような戦略。もう1つは、ハードウェアであくまでごりごりと解決していこう、という力技の対策。最後の1つは、アーキテクチャで解決する方法。Hadoopなどを利用した分散処理のアーキテクチャによって解決していくといったものです。
先ほども述べたように、ネットワークはボトルネックではなくなり、今はストレージがボトルネックになっています。現在は、それ(ボトルネック)を何とかCPUにまで持っていこうという努力がなされているところだと、自分は理解しています。ボトルネックがCPUまで行ったら、もうそれは、システム側のアーキテクチャあるいはハードウェアとして一通りのことが終わった段階と考えていいと思います。
西内 ► そうですね。完成といえると思います。
