0

これは StreamInsight がなくてもできるかもしれませんが、興味があります。

テーブルに「メッセージ」を入力するアプリケーションがあります (テーブルに行を挿入します)。

メッセージが「到着」する速度と、メッセージが「処理」される速度 (フラグが更新される) について、このテーブルを監視する監視アプリケーションを作成したいと考えています。

これはベンダーのアプリケーションであるため、トリガーなどをドロップしたくありません。しかし、データベースにクエリを実行でき、テーブルには ID 列を使用して PK があります。

ホッピング ウィンドウ クエリを取得するにはどうすればよいですか? 過去 30 分間のメッセージ受信率とメッセージ処理率を示す折れ線グラフを表示したいと思います。

4

1 に答える 1

1

このメッセージ テーブルに取り込まれる情報によっては、SQL クエリを実行するだけで、おそらくこれをより高速に実行できると思います。

StreamInsight を使用してこれを行う場合は、次のコードを使用して作業を開始してください。

var app = Application;
var interval = TimeSpan.FromSeconds(1);
var windowSize = TimeSpan.FromSeconds(10);
var hopSize = TimeSpan.FromSeconds(1);

/* Replace the Observable.Interval with your logic to poll the database and
   convert the messages to instances of TPayload. It just needs to be a class
   that implements the IObservable<TPayload> interface. */
var observable = app.DefineObservable(()=> Observable.Interval(interval));

// Convert the observable to a point streamable.
var streamable = observable.ToPointStreamable(
            e=> PointEvent.CreateInsert(DateTimeOffset.Now, e),
            AdvanceTimeSettings.IncreasingStartTime);

/* Using the streamable from the step before, write your actual LINQ queries
   to do the analytics you want. */
var query = from win in streamable.HoppingWindow(windowSize, hopSize)
        select new Payload{
            Timestamp = DateTime.UtcNow,
            Value = win.Count()
        };

/* Create a sink to output your events (WCF, etc). It just needs to be a
   class that implements the IObserver<TPayload> interface. The
   implementation is highly dependent on your needs. */
var observer = app.DefineObserver(()=> Observer.Create<Payload>(e => e.Dump()));

query.Bind(observer).Run();
于 2012-10-24T16:16:35.760 に答える