C# 从数据库中处理一百万条记录的技术是什么

C# 从数据库中处理一百万条记录的技术是什么,c#,sql-server,C#,Sql Server,这或多或少是一个设计问题。我们必须像处理一百万行一样处理数据,并将xml发送给第三方。最初我们需要发送大约100万条记录,之后我们只发送Delta 现在,存储过程大约需要15到20分钟才能返回数据。这是一种安慰。我知道这不是一个一次获得100万张唱片的好方法 我想知道以下事情 1) 连接到数据库的c#中的控制台应用程序是否正确 2) 还有其他的方法吗 感谢您的指导,不需要任何编码,我们需要一些关于如何继续的建议。 提前感谢。Re 1:取决于您的体系结构。那很简单。这是一个可行的办法 回复2:是的

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

现在,存储过程大约需要15到20分钟才能返回数据。这是一种安慰。我知道这不是一个一次获得100万张唱片的好方法

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

感谢您的指导,不需要任何编码,我们需要一些关于如何继续的建议。
提前感谢。

Re 1:取决于您的体系结构。那很简单。这是一个可行的办法

回复2:是的,吨。一切都是徒劳的。您可以根据请求创建一个处理数据生成的系统服务。您可以有一个web应用程序

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


不过,1-20分钟很奇怪。时间花在哪里?传输和写出100万行所需的时间不应超过2-3分钟。

Re 1:取决于您的体系结构。那很简单。这是一个可行的办法

回复2:是的,吨。一切都是徒劳的。您可以根据请求创建一个处理数据生成的系统服务。您可以有一个web应用程序

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

不过,1-20分钟很奇怪。时间花在哪里?要传输和写出100万行不应超过2-3分钟。

1)是的,为什么不呢

2) 对

使用光标。

1)是的,为什么不呢

2) 对


使用光标。

在15到20分钟内,你需要更具体地说明你在做什么

你在问“正确”的做事方式——你在优化什么

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

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


我从不喜欢长时间运行的存储过程,因为不容易看到进度。至少有了一个控制台应用程序,你可以输出一些东西,你需要在15到20分钟内更具体地说明你在做什么

你在问“正确”的做事方式——你在优化什么

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

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


我从不喜欢长时间运行的存储过程,因为不容易看到进度。至少有了一个控制台应用程序,你可以输出一些东西

相信我,100万条记录对一个著名的商业数据库来说并不是什么大不了的事,15到20分钟返回这些记录是不值得的。别的地方错了!您是否正在存储过程中构建XML文件?如果是,请删除它们并在C#中实现XML构建。SP只有一个简单的任务:获取数据。如果你不加入另外100万张唱片中的100万张唱片,这不会花很长时间。数据进入应用程序后(在本例中,控制台应用程序可以),使用LINQ to XML构建XML。如果您仍然对性能不满意,请编写代码


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

相信我,一百万条记录对于一个著名的商业数据库来说并不是什么大问题,15到20分钟返回这些记录是不值得的。别的地方错了!您是否正在存储过程中构建XML文件?如果是,请删除它们并在C#中实现XML构建。SP只有一个简单的任务:获取数据。如果你不加入另外100万张唱片中的100万张唱片,这不会花很长时间。数据进入应用程序后(在本例中,控制台应用程序可以),使用LINQ to XML构建XML。如果您仍然对性能不满意,请编写代码

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

我的想法:

  • 不要获取所有的数据,然后再进行处理;但在它到达时进行处理-通过
    IDataReader
    或LINQ
  • 对文件使用相同的流式处理方法;可能是直接
    XmlWriter
    ,也可能是
    XStreamingElement
    ——在这两种情况下都是从上面的源代码读取
这大大减少了您所需的内存量,并允许您的机器在等待网络IO时做一些有用的事情

我的想法:

  • 不要获取所有的数据,然后再进行处理;但在它到达时进行处理-通过
    IDataReader
    或LINQ
  • 对文件使用相同的流式处理方法;可能是直接
    XmlWriter
    ,也可能是
    XStreamingElement<