从数据库处理100万条记录的技术是什么?

时间:2011-02-23 07:26:37

标签: c# sql-server

这或多或少是一个设计问题。我们必须像100万行一样处理并将xml发送给第三方。最初我们必须发送100万条记录,之后我们只发送增量。

现在,存储过程大约需要15到20分钟才能返回数据。它是一个consoleapp权限。我知道这不是一次获得100万条记录的好方法。

我想知道以下事情 1)连接到数据库的c#中的控制台应用程序是否接近 2)还有其他方法吗?

感谢你对此的指导,不需要任何编码等等,我们需要一些关于如何进行的建议。 提前谢谢。

5 个答案:

答案 0 :(得分:3)

我的想法:

  • 不提取所有数据然后处理它;但在到达时 - 通过IDataReader或LINQ
  • 处理它
  • 对文件使用同等流式处理方法;也许是XmlWriter直接,或者XStreamingElement - 在任何一种情况下都可以从上面的来源阅读

这大大减少了您需要的内存量,并允许您的计算机在等待网络IO时执行一些有用的操作

答案 1 :(得分:1)

Re 1:取决于您的架构。那么简单。这是一种VIABLE方法。

回复2:是的,吨。全部都是可以的。您可以根据请求制作处理数据生成的系统服务。你可以有一个Web应用程序。

一般来说,一个控制台应用程序可以正常工作,结果集中的100万行也不是很多。完全可行。

但是,1-20分钟是奇怪的。花在哪里的时间? 100万行转移和写出不超过2-3分钟。

答案 2 :(得分:1)

1)是的,为什么不呢。

2)是的。

使用游标。

答案 3 :(得分:1)

您需要更加具体地了解您在15到20分钟内所做的事情。

您在询问“正确”的做事方式 - 您在优化什么?

速度?一个15 - 20分钟的存储过程听起来很危险。它在做什么?

维护/可读性?控制台应用程序将工作。测试(单元测试等)比存储过程更容易。

我从不喜欢长时间运行的存储过程,因为它不容易看到进度。至少使用控制台应用程序,您可以输出某些内容

答案 4 :(得分:1)

相信我,100万条记录对于着名的商业数据库来说并不是什么大不了的事情,返回记录的时间不值15到20分钟。别的地方错了!您是否在存储过程中构建XML文件?如果是,请删除它们并在C#中实现XML构建。 SP只有一个简单的任务:获取数据。如果您没有在另外100万条记录上加入100万条记录,则不会花费很长时间。在数据进入应用程序之后(在这种情况下控制台应用程序就可以了),使用LINQ-to-XML构建XML。如果您仍然不满意效果,请创建代码parallel

编辑您的SP非常耗时,您需要对其进行优化。例如:在具有1m记录的SP T_Data中,连接T_User和1m记录需要花费大量时间。优化后:在SP中T_Data连接T_User中的一条记录(几乎是一个非常快的WHERE表达式),在C#代码中,您从T_User获取记录,对于每条记录,调用SP并获取数据,然后构建一条您的XML的部分 / * piece *。所有这些都可以同时处理。最后,将所有XML部分合并为一个。