使用应用程序BL将大量数据从同一个数据库迁移到不同数据库的性能

时间:2012-02-16 22:51:56

标签: c# .net performance sql-server-2008 data-migration

我有这个问题。我有一个应用程序,每15分钟从网上下载一个文件并将其批量复制到数据库中。

我的应用程序的用户订阅了此文件,因此他们发出信号告诉我们他们想要将此文件“复制”到他们的数据库中。我写了“复制”,因为我应该在放入数据库之前对这些数据应用一些业务逻辑。这种业务逻辑取决于客户。

问题是起始数据库包含每15分钟更改100.000行的内容(一些是新记录,一些是更新的,一些是删除的。)

你会如何解决这个问题?我尝试了正常的开发过程:

  1. foreach customer
  2. 获取新数据 - >为该用户应用业务逻辑 - >戴上他的数据库
  3. 采取更新数据 - >申请BL - >更新他的数据库
  4. 采取del数据 - >申请BL - >从他的数据库中删除
  5. 但这需要太多。离15分钟很远。有时单个用户需要一个小时。

    你会做什么?

    谢谢, 马可

2 个答案:

答案 0 :(得分:1)

100.000行听起来不太多。

这取决于您的业务逻辑,但如果是某些数据转换,您可以考虑使用SSIS包(就MS SQL Server而言,其他RDBMS还有其他工具)来导入您的数据。

你也可以利用并行性,例如,有几个线程(甚至虚拟机)为你工作:只需对文件进行分区并同时处理所有分区。即使实施简单的map / reduce算法也可能有所帮助。

无论如何,做一些性能测量,你真的想知道为什么你的数据处理很慢。您的代码中的某些内容可能会被优化很多。

每小时100.000行是非常慢的,那里出现了一些错误(除非你需要在每一行上执行繁重且超级复杂的业务逻辑)

答案 1 :(得分:0)

如果没有看到代码,很难说,但您可以尝试使用类似Ants Performance Profiler的代码来分析代码,以尝试确定减速发生的位置。如果您不想使用它,我相信Visual Studio 2010包含一个分析工具。

显然,您希望针对调试或暂存构建而不是生产系统运行分析。

如果您认为这是数据库速度问题,您可能希望了解如何进行插入以及是否有任何索引或触发器影响数据库插入速度。