StreamInsightのサンプルを動かす

前回の記事で StreamInsight をインストールしたので、サンプルを動かしてみます。

検証環境は以下のようになります。

  • Windows 7 x64
  • VisualStudio Ultimate 2013 (Expressとかでもたぶん大丈夫)

サンプルはCodePlexに登録されている他、いろんなブログに点々と登録されているようですが、 今回は以下の記事に掲載されているサンプルを使ってみます。

ソースをダウンロード・展開するとslnファイルが入っているので開きます。
参照設定が切れている場合があるので確認しましょう。

Program.csInstanceName に自分が作成したStreamInsightのインスタンス名を指定します。

f:id:weathercook:20140226120850p:plain

ビルドして実行するとコンソールが立ち上がり、なんとなくデータが流れている雰囲気が醸しだされます。

f:id:weathercook:20140226120945p:plain

中身のはなし

実際の処理のメインは Program.cs の50行目から始まるLINQ式です。

StreamInsightの処理はおおまかに分けると以下の図のようになっていまして、
出展: http://technet.microsoft.com/ja-jp/library/ee391434.aspx

入力アダプターがデータソースからデータを受け取り、CEPサーバー上でLINQ式で処理した結果を出力アダプターで適切な出力先に出力します。
StreamInsightの機能としてLINQを使ったフィルター処理や集計処理の他に、上図のa'ストリームとa2ストリームのように異なるストリームイベントの照合や結合も行えるようです。

Program.cs を基準に考えると、33行目で入力ストリームの定義をしています。

var input = CepStream<[流れてくるストリームデータの型]>.Create("ストリームの名前",
              typeof([Input Adapter Factory]),
              [Input Adapter Config のインスタンス], 
              [イベントモデル]);

イベントモデルには以下の3種類があり、それぞれ使うべきケースが異なります。

  • point : -> ある時点でのみ単発で発生するイベントに使う (Webクリックなど)
  • interval : -> 期間が既知である、一定期間有効なイベントに使う (オークションの入札期間など)
  • edge : -> 期間が未知である、一定期間有効なイベントに使う (Webユーザーセッションなど)

このへんはよくわかっていないので、これから勉強が必要ですね。

また、 Program.cs の68行目あたりで出力ストリームの定義をしています。

var output = query.ToQuery([CEPアプリケーションのインスタンス], "クエリの名前", "クエリの詳細",
                           typeof([Output Adapter Factory]), 
                           [Output Adapter Config のインスタンス],
                           [イベントモデル],
                           [出力順序]);

output.Start();

うーん、よく分からん。

StreamInsightは基本的にInput/Output Adapterのクラスを自分で作成することで様々なプロトコルからデータを受け取ることができます。
このへん、一般的なAdapterのクラスが一箇所に固まっているといいのですが、見つかりませんでした。。。

次回はInput Adapterを自分で作成してみます。