我的任务是优化线性数据处理例程的性能。以下是已有内容的概述:实时批处理数据处理
数据进入UDP端口,我们有多个侦听器在不同的端口上侦听,并将原始数据写入SQL Server数据库(让我们称之为RawData)。然后,我们有一个单线程线性应用程序的多个实例,它从RawData表中抓取原始数据并处理单个数据行。处理的意思是将原始数据与给定实体的先前接收的数据进行比较,计算完成以计算不同读数的数量,然后针对每个单独的数据行调用几个Web服务,最后为每个数据添加新记录在ProcessedData表中的行。另外对应的实体记录在其他表中更新。
我看到问题的方式,它可以分解成更小的部分,我可以利用生产者/消费者模式进行数据处理: 生产者的一个线程填充共享(阻塞)队列,多个消费者从中获取数据行队列并对它们进行并行处理。消费者完成后,他们将处理后的数据放到另一个共享队列中,然后再由另一个消费者线程(单个)访问,这个线程将执行SqlBulkCopy来插入新记录。沿着这个过程,将会有其他共享队列存储更新的实体信息,而另一个消费者将获取实体的更新信息并执行更新。
问题是,即使它看起来很简单,但它在我看来是一个麻烦的方法。我确实有一种更好的方式来做我想找的事情。有关实施上述生产者/消费者模式的任何建议?或者我应该为我的问题寻找不同的设计模式?
在此先感谢
当你说“共享查询”,你的意思是“共享队列”? – 2011-04-11 19:47:36
是的,我的不好。感谢您的注意。更正 – Dimitri 2011-04-11 19:53:21