StreamInsight和长时间运行的查询

时间:2015-06-02 23:19:03

标签: c# .net complex-event-processing streaminsight

我有一个建立在StreamInsight 1.2之上的应用程序,它有几个常设查询在User Defined Operators中运行一些计算。有时其中一个计算需要相对较长的时间才能完成(几秒钟),我发现它会阻止其他查询执行。我不太熟悉StreamInsight如何工作,所以我推测所有查询都在一个线程上运行。有没有办法让查询并行运行?

除了以某种方式将查询放在不同的线程上之外,还有什么其他方法可以阻止一个偶尔长时间运行的查询阻止其他查询吗?

2 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的StreamInsight? Standard Edition在单核上运行调度程序,而Premium使用所有可用内核。 至于延迟,如果你的所有查询都依赖于挂断的时间线 - 通过join,union等 - 那么这就是导致它挂起的原因。事件不会从长期运行的UDO中“释放”以提供其他流。如果是这种情况,除非您能以某种方式重构查询,否则您无法执行任何操作。 我也开始研究为什么“偶尔”UDO需要几秒钟。这让我觉得UDO有些不妥之处,但后来不知道它在做什么的细节,我不能肯定地说。

答案 1 :(得分:1)

如果计算有时会花费几秒钟而且的性质正在运行标准版,那么您可以做的最好的事情就是不要阻止线程计算正在进行中。 StreamInsight没有为此内置任何内容......它您的责任。从StreamInsight的角度来看,您的UDO需要一些时间。它不知道为什么会这样。如果线程被阻止,它将无法运行任何其他东西,直到你的UDO返回。因此,我会a)验证您运行的是标准版,然后b)如果您是,请更改UDO以使其无阻塞/异步。