从表中跳转Windows / SQL StreamInsight /?

时间:2012-10-24 00:19:46

标签: sql streaminsight

也许这可以在没有StreamInsight的情况下完成,但我很好奇。

我有一个用“消息”填充表格的应用程序(在表格中插入一行)。

我想创建一个监控应用程序,监控此表以显示消息“到达”的速率,以及它们“处理”的速度(标记更新)。

由于这是供应商应用程序,我不想放入触发器或任何东西。但是我可以查询数据库,并且表中有一个使用标识列的PK。

如何进入跳跃窗口查询?我希望在过去的30分钟内显示一条线图,显示邮件的进入速度,以及邮件处理速度。

1 个答案:

答案 0 :(得分: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();