C# StreamInsight性能问题

C# StreamInsight性能问题,c#,.net,streaminsight,complex-event-processing,C#,.net,Streaminsight,Complex Event Processing,我正在使用StreamInsight 2.1,遇到了意想不到的性能问题 我有一个金融数据的输入适配器,每秒有5000到10000个事件。然后,我有大量针对该输入的查询。每个查询都连接到完全相同的passthrough查询,因此我有1000个查询使用完全相同的输入数据 为了测试系统是否能够处理这个问题,我创建了1000个查询,这些查询除了将事件传递(从fullStream select d中的d)到只释放事件的输出适配器之外,什么都不做 当我以这种方式运行1000个查询时,系统无法跟上流。它越来越

我正在使用StreamInsight 2.1,遇到了意想不到的性能问题

我有一个金融数据的输入适配器,每秒有5000到10000个事件。然后,我有大量针对该输入的查询。每个查询都连接到完全相同的passthrough查询,因此我有1000个查询使用完全相同的输入数据

为了测试系统是否能够处理这个问题,我创建了1000个查询,这些查询除了将事件传递(从fullStream select d中的d)到只释放事件的输出适配器之外,什么都不做

当我以这种方式运行1000个查询时,系统无法跟上流。它越来越落后了。如果我将其缩减到100个查询,系统将保持完美


我是否只是在StreamInsight中遇到了性能墙?它是否无法处理我正在构建的解决方案类型?还是我在做些傻事。。。。任何帮助都是很好的,不知道还有什么可以让它更快。我需要它能够执行1000多个查询,并且我需要运行比这更复杂的查询。

我认为您可能会因为当前的方法而出现性能问题

首先,让我们讨论StreamInsight版本之间的差异。标准版只有一个调度程序线程,而Premium每个核心只有一个。评估版相当于高级版

我认为解决这个问题的方法是减少查询的数量。如果您要创建1000个查询(每个查询都有自己的输出适配器实例),我可以看到您将遇到的问题。在四核机器上,您将有4个调度程序线程试图运行1000个查询


“水平”排列的查询是否执行相同的操作?如果是这样,请查看是否可以合并它们。例如,如果我需要像“Price>5vol每个查询都需要一个线程来执行。您有1000个查询。那么你需要多少线程?正确的。实际上,StreamInsight将使用线程池来限制创建的线程数。所以执行查询的线程数量有限。您将花费更多的时间进行上下文切换,而不是实际执行查询

我不明白你为什么需要1000个查询。我们已经构建了应用程序,从多个来源接收100个传感器,并一起分析它们。。。每秒超过10万个事件。最后,是你的应用程序设计不佳,而不是StreamInsight的性能不佳,导致了这个问题


你真的需要花点时间重新思考一下你是怎么做的。无论你如何划分,你当前的方法都会给你带来问题。而且。。。考虑这个…每个输入适配器是否创建自己的线程来侦听入站和排队事件?你认为这会增加多少线程

这听起来确实像是一个扩展问题。您已经确定可以在服务器上运行100个查询而不会出现任何问题。然后,在您对其他答案的评论中,您谈论的是成千上万的客户添加了数千个查询。有这么多客户,我想您将能够负担得起添加新服务器以满足这些客户群的需求


因此,通过分散负载来提高吞吐量,我不知道,也许是通过某种形式的分布式计算?

在不知道您试图解决的问题的情况下,我没有提供好的解决方案的所有信息。您使用的StreamInsight的版本和版本是什么?为什么您需要1000个查询?我现在正在使用评估版,我相信这相当于企业版。最新的2.1版本。因此,我正在构建一个解决方案,客户可以在其中创建查询(价格>5 VolI我明白你的意思,我认为我尝试做的并不完全适合StreamInsight。凭借我尝试提供的功能,我可能有数千个小的、独特的查询来运行大量数据。我计划合并一些类似的查询,但即使这样,也会有成千上万的客户ght添加数千个独特的查询。当构建少量复杂理论而不是大量简单查询时,StreamInsight的效果似乎更好。我向大量客户提供了此功能,允许他们自定义查询。我计划合并查询的类似部分,但很容易实现数千个独特的查询。我认为StreamInsight不会为这种情况提供我想要的性能。我有另一种解决方案,可以为这个问题提供更好的性能(大量独特、简单的查询)。我希望StreamInsight可以取代其中的一些代码,通过大量查询限制数据,但我当前的代码似乎更适合我们的需要。那么,另一个解决方案是什么呢?
var myPrice5Vol2kSourceStream = from s in sourceStream
join r in referenceStream
on s.StockSymbol equals r.StockSymbol
select s;