機能と技術からわかる!システム基盤の実力

第4回ぎれなく流れ来る大量データを処理する「ストリームデータ処理技術」①ストリームデータ処理とは

近年、電子マネーや電子商取引が普及し、RFID利用による物流管理など、ビジネスで扱うデータの量が爆発的に増加しています。またビジネスのスピードも急激に加速しており、次々に流れてくる大量のデータをリアルタイムに処理することが求められています。

しかし、こうしたリアルタイム処理に従来からあるデータベースを使用すると、クエリなどを用いて蓄積されたデータを一括処理するため、データ検索などのクエリ実行時にタイムラグが生じてしまいます。そこで、現在注目されているのが、ストリームデータ処理技術です。

ストリームデータ処理技術とは、無限に到来する時刻順のデータ(ストリームデータ)をリアルタイムに処理するデータ処理方法です。たとえば、株価のテクニカル指標やランキング情報から売買をリアルタイムに自動判定する、といったシステムに有効です。ほかにも、リアルタイムの在庫管理や、不正操作の監視を行うシステムなどの利用が考えられます。ストリームデータ処理技術を利用することで、⁠今」の状況や状況の変化をリアルタイムに監視できるようになり、そこから新しいビジネスを展開することも期待できます。

今回は、このストリームデータ処理技術の概要を紹介します。ストリームデータ処理を実現する具体例として、日立のストリームデータ処理の汎用基盤である「uCosminexus Stream Data Platform」を取り上げます。⁠uCosminexus Stream Data Platform」のような汎用的な基盤を利用することで、さまざまな分野にストリームデータ処理技術を適用することができます。

ストリームデータ処理技術とは?

「ストリーム」とは、株価情報や交通情報のように、際限なく到来する時刻順の大量データを指します。ストリームデータ処理技術は、このストリームデータを扱う技術です。データベースを使用した「ストック型」のデータ処理技術とは違う新しい技術といえます。

まず、データベースを使用した一括処理の流れと、ストリームデータ処理技術を利用したインメモリ差分計算による高速処理を比較してみましょう。

データベースを使用したデータ処理の流れ

従来のデータベースを使用したデータ処理技術では、SQLのクエリを発行したタイミングでストックしておいた全データを処理し、その後、結果を抽出します(一括処理⁠⁠。

図1 データベースを利用した処理技術
図1 データベースを利用した処理技術

図1の場合、idごとの合計値を求めるクエリが発行されると、データベース内にあるa、およびbの値がすべて抽出され、id別に加算されます。このような検索・演算は、クエリを発行するたびに実行されます。そのため、データベース内のデータの量が増加するにつれて、処理スピードが相対的に低下します。

ストリームデータ処理の流れ

ストリームデータ処理技術の場合、入力ストリームとしてデータが入力されると、その場でデータ処理を行います。また、前回処理した結果を中間データとして保持しておくため、中間データとの差分だけを処理します(差分処理⁠⁠。

図2 ストリームデータ処理技術
図2 ストリームデータ処理技術

図2の場合、中間データとして「a=9」⁠b=6」が保持されています。ここに、入力ストリームとして「a=6」が到着すると、中間データ「a=9」に、入力ストリーム「a=6」が加算され、結果ストリームとして「a=15」が出力されます。

ストリームデータ処理では差分処理が行われるため、処理対象となるデータをすべて処理する必要はありません。大量データのリアルタイム処理に適したデータ処理技術といえます。またストリームデータ処理技術では、直前に処理した結果をメモリ上で保持する「インメモリデータ技術」を採用しています。これにより、ハードディスクなどの外部記憶装置にアクセスする時間を削り、高速な処理を実現します。

ストリームデータ処理の仕組み

ストリームデータ処理の仕組みについてもう少し詳しく見てみましょう。

ストリームデータ処理の定義

「uCosminexus Stream Data Platform」では、ストリームデータの処理内容(シナリオ)を、あらかじめCQL(Continuous Query Language)というクエリ言語を使って定義します。CQLはデータベースの標準的な言語であるSQLを拡張した言語です。CQLは汎用的な言語であるため、さまざまな業種に対応できます。またSQLの知識があれば、CQLを使って容易にプログラミングができます。

CQLで処理を定義するため、集計・分析処理用の専用アプリケーションを開発する必要はありません。そのため、ニーズの変化に応じて処理内容を変更したい場合にも速やかに対応することが可能です。

ストリームデータ処理の流れ

ストリームデータ処理では、登録されたCQLの内容に従って、次の流れでストリームデータ処理を実行します。

  • ① ストリームデータの中から処理対象となるデータを取り出します(ウィンドウ演算)
  • ② 取り出したデータに対して、フィルタリングや結合処理などを実施します(関係演算処理)
  • ③ ②の演算結果からストリームデータを生成します(ストリーム化演算)
図3 ストリームデータ処理の流れ
図3 ストリームデータ処理の流れ

上記手順のうち、①のウィンドウ演算と③のストリーム化演算で処理する内容はCQL固有の文法で定義します。関係演算はSQLの文法と同じです。以下にCQLの定義例を示します。

CQLの例
IStream(                 ←ストリーム化演算
  Select id, Sum(val)    ←関係演算
   From str [Rows 3]     ←ウィンドウ演算
  Group by id)

ウィンドウとウィンドウ演算

ストリームは時刻順に連続して到来するため、データの切れ目がありません。処理対象としたいデータを取り出すため、ストリームデータ処理技術ではストリームを「ウィンドウ」という単位で分割します。図4では新着データ10個をウィンドウとして取り出す例を示しています。

図4 ウィンドウの例
図4 ウィンドウの例

この例では、最新のデータである「10」から「1」までが処理対象として取り出されます。取り出すデータの個数や抽出条件は、CQLによりウィンドウの種類で定義します。また、定義したウィンドウの種類に従ってデータを取り出すことをウィンドウ演算と言います。ウィンドウの種類は表1のようになります。

表1 ウィンドウの種類
種類概要
ROWSウィンドウ取得するデータの数を指定する場合に利用します。
RANGEウィンドウ取得するデータの時間を指定する場合に利用します。
PARTITIONウィンドウグループを指定してグループ内のデータを取り出す場合に利用します。

CQLでウィンドウを指定すると、ウィンドウの種類に従ってデータが取り出されます。これがウィンドウ演算です。ウィンドウ演算では取り出すデータの個数や抽出条件を定義できます。表1の3種類のウィンドウは、CQL内で組み合わせて使うこともできます。

ストリーム化演算

関係演算の結果をストリームデータとして整形して出力するための処理が「ストリーム化演算」です。ストリームデータは刻々と到着するため、ウィンドウ演算で取り出すデータや関係演算の結果も変化します。ストリーム化演算では、どのタイミングでデータをストリームデータとして出力するかを定義します。ストリーム化演算には、表2の3種類があります。

表2 ストリーム化演算の種類
種類概要
ISTREAM(Insert Stream)関係演算の結果、新たに追加されたデータを出力します。
DSTREAM(Delete Stream)関係演算の結果、削除されたデータを出力します。
RSTREAM(Relation Stream)一定の時間間隔で演算結果のデータを出力します。

以上が、ストリームデータ処理の概要となります。次回はこのストリームデータ処理技術を採用したストリームデータ処理基盤「uCosminexus Stream Data Platform」を適用して、実際にどのようなシステムを構築できるかを紹介します。

おすすめ記事

記事・ニュース一覧