首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft/.NET堆栈中此数据迁移任务的最佳并行编程方法

Microsoft/.NET堆栈中此数据迁移任务的最佳并行编程方法
EN

Stack Overflow用户
提问于 2011-07-22 23:14:43
回答 3查看 145关注 0票数 0

我有带有两个表的Server 2008数据库:

  • 表A有列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 (应该在多台机器上拥有多个进程,还是同一台机器中的多个线程将使我非常接近)中执行此操作?瓶子的领口是什么?对于我应该使用什么策略在线程之间共享工作,有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-23 02:04:33

有许多不同的解决方案可以解决这个问题,但我会提出一些新颖的建议。用云彩。

假设真正的瓶颈是将Xml转换为PDF的计算能力,那么获得对具有几乎无限扩展的环境的访问可能是最快的方法。

票数 1
EN

Stack Overflow用户

发布于 2011-07-22 23:24:10

瓶颈肯定是转换过程,我一直在.NET中生成动态PDF,我的大部分2-3页的小文档可以轻松地花上几秒钟(5-8)。任何不能预先生成和存储在临时表中的原因,所以您所要做的就是在准备好时通过SQL移动?另外,要确保生成高效(优化的)PDF,因为130万PDF可以轻松地消耗许多of的存储空间。

票数 2
EN

Stack Overflow用户

发布于 2011-07-23 02:30:24

我这样做是作为一个.net控制台应用程序,而不是一个SQL类型的作业,因为它更容易采取一个控制台程序,并简单地运行在一堆客户端计算机上,目前还没有使用。假设文档中有某种主键,您将知道您需要多少台客户端计算机才能运行该应用程序,然后在它们之间划分主键。如果你有四个,每个应用程序都会得到大约1/4加载的密钥。您可以通过使用各种方法来传递要使用的键范围,这取决于键的外观。

在应用程序本身中,您可以选择要使用的记录,然后使用并行Linq或并行foreach循环来处理该客户端的记录。这两个都是非常容易使用的并行构造,它们创建线程来执行循环中的操作,而不需要显式地处理它(框架为您处理线程)。

在这一点上,这只是一个投入足够的客户在你的时间框架内完成的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6797071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档