我有带有两个表的Server 2008数据库:
ID (int), XmlDocument (xml) 表B有列ID (int), XmlDocument (xml
我有一些.NET代码,可以将XmlDocument转换成PDF格式。表A中有130万行,按顺序转换所有行将花费130万行@1行/秒= 15天。
我想接近,让我们在不到2小时内完成这件事。这个问题似乎是并行化的完美案例。我的问题是,我应该用什么来实现这一点,如果有人有什么好的建议,在过去行之有效的。我可以访问虚拟机实验室,并且可能会产生几台(5-6)虚拟机,这是一个我可以在任何地方复制的测试数据库。
例如,我应该在SQL (service或sql作业用于并行并调用CLR进行转换)或.NET (应该在多台机器上拥有多个进程,还是同一台机器中的多个线程将使我非常接近)中执行此操作?瓶子的领口是什么?对于我应该使用什么策略在线程之间共享工作,有什么建议吗?
发布于 2011-07-23 02:04:33
有许多不同的解决方案可以解决这个问题,但我会提出一些新颖的建议。用云彩。
假设真正的瓶颈是将Xml转换为PDF的计算能力,那么获得对具有几乎无限扩展的环境的访问可能是最快的方法。
发布于 2011-07-22 23:24:10
瓶颈肯定是转换过程,我一直在.NET中生成动态PDF,我的大部分2-3页的小文档可以轻松地花上几秒钟(5-8)。任何不能预先生成和存储在临时表中的原因,所以您所要做的就是在准备好时通过SQL移动?另外,要确保生成高效(优化的)PDF,因为130万PDF可以轻松地消耗许多of的存储空间。
发布于 2011-07-23 02:30:24
我这样做是作为一个.net控制台应用程序,而不是一个SQL类型的作业,因为它更容易采取一个控制台程序,并简单地运行在一堆客户端计算机上,目前还没有使用。假设文档中有某种主键,您将知道您需要多少台客户端计算机才能运行该应用程序,然后在它们之间划分主键。如果你有四个,每个应用程序都会得到大约1/4加载的密钥。您可以通过使用各种方法来传递要使用的键范围,这取决于键的外观。
在应用程序本身中,您可以选择要使用的记录,然后使用并行Linq或并行foreach循环来处理该客户端的记录。这两个都是非常容易使用的并行构造,它们创建线程来执行循环中的操作,而不需要显式地处理它(框架为您处理线程)。
在这一点上,这只是一个投入足够的客户在你的时间框架内完成的问题。
https://stackoverflow.com/questions/6797071
复制相似问题