StreamInsightのサンプルを動かす
前回の記事で StreamInsight をインストールしたので、サンプルを動かしてみます。
検証環境は以下のようになります。
サンプルはCodePlexに登録されている他、いろんなブログに点々と登録されているようですが、 今回は以下の記事に掲載されているサンプルを使ってみます。
ソースをダウンロード・展開するとslnファイルが入っているので開きます。
参照設定が切れている場合があるので確認しましょう。
Program.cs
の InstanceName
に自分が作成したStreamInsightのインスタンス名を指定します。
ビルドして実行するとコンソールが立ち上がり、なんとなくデータが流れている雰囲気が醸しだされます。
中身のはなし
実際の処理のメインは Program.cs
の50行目から始まるLINQ式です。
StreamInsightの処理はおおまかに分けると以下の図のようになっていまして、
入力アダプターがデータソースからデータを受け取り、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を自分で作成してみます。