我有一个特定的 DLL,其中包含一些语言处理类和方法。
其中一种方法获取一个单词作为参数,并进行大约 3 秒的一些计算,并将相关结果保存在 SQL-Server 数据库上。
我想在 900k 字上运行这个 DLL 方法,并且这项工作可能每周重复一次。
如何使用 C# 轻松地将这项工作分发到多个系统上以节省时间?
回答形式:要求--工具
预定运行——石英网 http://quartznet.sourceforge.net/
Quartz 允许您按任何给定的时间表运行“作业”。它也是维持状态在运行之间,如果由于某种原因服务器出现故障,当它恢复时,它知道要开始运行该作业。非常酷的东西。
分布式队列——N服务总线 http://www.nservicebus.com/
好的 ServiceBus 物有所值。基本上,您想要做的是确保所有工作人员仅执行给定的操作,无论排队的操作有多少。如果您确保您的操作是幂等的 http://en.wikipedia.org/wiki/IdempotenceNServiceBus 是实现这一目标的好方法。
队列 -> Worker1 += Worker 2 += Worker 3 --> 本地数据存储 -> 数据队列 + Workers -> 远程数据存储
数据缓存——RavenDb http://ravendb.net/ or SQLite http://sqlite.phxsoftware.com/
基本上,为了确保给定操作的返回值与 SQL Server 充分隔离,您需要确保将该值缓存在本地存储系统中的某个位置。这可以是像 RavenDB 这样的快速且非关系型的东西,也可以是像 SQLite 这样结构化的东西。然后,您可以通过 NServiceBus 将一些标识符放入另一个队列中,并将其同步到 SQL Server,队列是您的朋友! :-)
异步操作——任务并行库 http://msdn.microsoft.com/en-us/library/dd460717.aspx and TPL数据流 http://blogs.msdn.com/b/pfxteam/archive/2011/04/13/10153399.aspx
您本质上希望确保您的任何操作都不会阻塞并且足够原子。如果您还不了解 TPL,您应该了解一下,它是一些非常强大的东西!我从 Java 人员那里听到了很多这样的说法,但值得一提的是……C# 正在成为异步和并行工作流程的一种非常出色的语言!
新的异步 CTP 带来的另一件很酷的事情是 TPL DataFlow。我没用过,但它似乎正合你的胃口!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)