【发布时间】:2011-08-03 08:31:58
【问题描述】:
我的任务是优化线性数据处理例程的性能。以下是对已有内容的概述:
数据来自 UDP 端口,我们有多个侦听器侦听不同的端口并将原始数据写入 SQL Server 数据库(我们将表称为 RawData)。然后我们有一个单线程线性应用程序的多个实例,从 RawData 表中获取原始数据并处理单个数据行。什么处理手段是将原始数据与给定实体的先前接收的数据进行比较,进行计算以计算不同读数的数量,然后为每个单独的数据行调用几个 Web 服务,最后为每个数据添加一条新记录ProcessedData 表中的行。相应的实体记录也在其他表中更新。
我看到问题的方式,它可以分解成更小的部分,我可以利用生产者/消费者模式进行数据处理: 生产者的一个线程填充一个共享(阻塞)队列,多个消费者从队列中获取数据行并对它们进行并行处理。消费者完成后,他们将处理后的数据放入另一个共享队列,然后另一个消费者线程(单个)将访问该队列,该线程将执行 SqlBulkCopy 以插入新记录。在此过程中,将有其他共享队列存储实体信息以进行更新,而另一个消费者将获取实体的更新信息并执行更新。
问题是,尽管它看起来很简单,但在我看来它是一种繁琐的方法。我确实觉得有更好的方法来做我正在寻找的事情。关于实现上述生产者/消费者模式的任何建议?或者我应该为我的问题寻找不同的设计模式?
提前致谢
【问题讨论】:
-
当您说“共享查询”时,您的意思是“共享队列”吗?
-
是的,我的错。感谢您注意到它。已更正
标签: .net sql-server multithreading design-patterns batch-processing