リアルタイムにビッグデータを処理するためのソフトウェア手法
スマート時代のITに欠かせないのはビッグデータ処理であることに異論を唱える人は少ないだろう。
現在、例えばスマートメーターなどの検針機器から送信されるリアルタイムの消費電力情報や、自動車や携帯機器から送信されるGPS情報などのM2Mデータ、Webに集まるログなど、今までとは桁違いの大量データの管理・運用を否応なく行わなければならない状況になっている。しかし、果たしてそれにふさわしいITの技術基盤としてのソフトウェアは、どのようになっているのだろうか。
ここで間違いなく言えるのは、従来のリレーショナルデータベース(RDB注1)では情報爆発による大量データを現実的な時間とコストで処理することはできないということである。
リレーショナルデータベースでは、情報の各項目を追加変更や削除するたびに、メモリの確保や排他ロックを行ってリレーション情報の更新を行う仕組みになっている。そして、取り扱うデータが巨大になればなるほど、累乗的にパフォーマンスが低下する。これはすべての処理に対してリアルタム性を求めた結果である。
このことは、私たちIT利用者が求めるリアルタイム性とかなりの温度差がある。なぜならば、ITユーザーは、自分が利用するときに最新の情報を早いレスポンスで入手したいのである。そして、入手した最新の情報をもとに、経営判断や改善行動を行うのである。
しかし、このような経営判断や改善行動に迅速さを求めることは、「短時間に何度も経営判断や改善行動を行うことではない」のである。
例えば、電力供給者が来月の発電のための燃料の量を判断するのに、できるだけ直近の電力消費のデータを利用して正確に見積もることは必要である。現状の計測の仕組みでは、判断のタイミングは月1回しかない。つまり、この場合だと、月1回の頻度でしかリアルタイム性は必要とされないのである。したがってこのタイミングを目指して、直近のデータが更新終了されればよいのであって、次のタイミングまでの間はデータの整理は不要なのである。平たく言えば、「間に合えばよい」のである。
このことは私たちの実生活における何らかの準備と同じである。
つまり、本番時にはすべて美しく仕上がってなければならないが、準備の最中は散らかっていても一向にかまわない、というようなものである。
この考え方をデータ処理に持ち込むと、大量のデータでも非常に効率よく行えるのである。このことの本質は、実は「バッチ処理注2」である。
ここでは、バッチ処理の考え方でリアルタイムにビッグデータを処理する「ユニケージ開発手法」について簡単に紹介しよう。
ユニケージ開発手法とは?
ユニケージ開発手法は、UNIXの考え方に忠実なシステム開発手法である。UNIXは、小さな道具(=コマンド)を組み合わせて、テキストファイルを順次加工するという点が基本的な思想である。
例えば、データの項目を選択するには「selfコマンド」、データの並びを整列するには「sortコマンド」、結合するには「join1コマンド」、集計するには「sm2コマンド」を使う。このようなコマンドを順次データファイルに適用して目的の加工を行っていく。
ユニケージ開発手法で使われるコマンドは「usp Tukubaiコマンド」と呼ばれ、その例を図1に示す。
図1 ユニケージ開発手法の特色①:単機能を極めたコマンド群
各コマンドはパイプと呼ばれる記号で結ばれ、加工されるデータはこのパイプを通じて「バケツリレー」のように、順番に次のコマンドに送られて処理されるようになっている。
このパイプの正体は、メモリ上の小さなバッファ(CPU上のキャッシュ)であり、各コマンドは処理の過程において同時に実行(=並列動作)する(図2)。このプログラムのことを「シェルスクリプト」と呼ぶ。一見古くさく思える伝統的なこの言語は、現在のマルチコアCPUの性能をフルに生かし、リアルタイムバッチ処理が行える高速化の究極手法であることに、最近では注目が集まっている。
図2 ユニケージ開発手法の特色②:パイプ多用でマルチコアを効率よく使う
このユニケージ開発手法は、取り扱うデータの種類や量に制限はなく、プログラム(シェルスクリプト)の記述はシンプルである。安価なエントリーモデル(1Uサイズ)のPCサーバで高速に動作し、高価なミドルウェア注3も必要としない。UNIXの基本機能だけで動作するので、OS(オペレーションシステム)の種類やバージョンに左右されることもなく、簡単にプログラムもデータも移植できる(図3)。
図3 ユニケージ開発手法の特色③:ミドルウェアを使わないシステム構成
さらに、プログラムもデータもすべてテキストファイルとして整理するので、システム内部がホワイトボックス化する。
つまり、通常のパッケージソフトやミドルウェアは、内部構造がブラックボックスになっているが、ユニケージ開発手法は処理の内容が明確になっているである。それゆえに最近では一般企業においても、システム内製化(自社の社員がシステムを開発する)やコストダウン、処理高速化の手法として広まりつつある。
▼ 注1
リレーショナルデータベース(RDB):データ管理方式の1つ(データベース)で、1件のデータを複数の項目の集合として表現し、データの集合をテーブルと呼ばれる表で表す方式。中小規模のデータベースでは最も一般的な方法。SQLと呼ばれる言語を使う。
▼ 注2
バッチ処理:一定期間あるいは一定量のデータを集めておき、まとめて一括処理を行う処理方式。
▼ 注3
ミドルウェアには、OSやハードウェアによる違いを吸収して、さまざまなプラットフォームで動作するアプリケーションソフトの開発を容易にするというメリットがある。