也许这可以在没有 StreamInsight 的情况下完成,但我很好奇。
我有一个应用程序正在使用“消息”填充表(在表中插入一行)。
我想创建一个监视应用程序来监视此表的消息“到达”速率,以及它们“处理”的速度(标志更新)。
由于这是一个供应商应用程序,我不想插入触发器或任何东西。但我可以查询数据库,并且该表有一个使用标识列的 PK。
如何进行跳窗查询?我很想显示过去 30 分钟的折线图,显示消息进入的速度,以及消息被处理的速度。
也许这可以在没有 StreamInsight 的情况下完成,但我很好奇。
我有一个应用程序正在使用“消息”填充表(在表中插入一行)。
我想创建一个监视应用程序来监视此表的消息“到达”速率,以及它们“处理”的速度(标志更新)。
由于这是一个供应商应用程序,我不想插入触发器或任何东西。但我可以查询数据库,并且该表有一个使用标识列的 PK。
如何进行跳窗查询?我很想显示过去 30 分钟的折线图,显示消息进入的速度,以及消息被处理的速度。
根据此消息表中捕获的信息,我认为您可以通过运行 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();