0

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

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

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

由于这是一个供应商应用程序,我不想插入触发器或任何东西。但我可以查询数据库,并且该表有一个使用标识列的 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 回答