0

我有一个拥有数百万行的表。它有日志记录数据。我想将数据移动到文本文件。每一天的数据都应该放入自己的文本文件中。我在.net环境中。什么是实现它的有效方式?使用.net和并行处理进行文本归档的SQL

我想使用并行处理,因为我们有很多核心的强壮的服务器。我能想到的一些选择是:

  1. 有并行数据读取器。每位读者查询一部分数据。我如何使用这种方法管理总连接?此外,如果我走了这条路线,我不得不中断用户的正常使用。我用这种方法可以看到的另一个问题是管理我自己的线程并设置一个上限,而Parallel.ForEach会更简单。

  2. 生产者 - 消费者模式:一个线程读取数据并将其排入内存中。多个编写者从内存中消耗数据并将其写入文本文件。

我向PetaPoco/NPoco开放。理想情况下,我想使用Parallel.ForEach,而不会使线程代码太复杂。

+1

这听起来像BCP的工作(https://msdn.microsoft.com/en-us/library/ms162802(v=sql.130).aspx)。您可以有一个每天导出日志的SQL代理作业。 BCP在导出数据方面非常高效,您可以使用查询来选择要导出的数据。您也可以考虑将表分区添加到组合中。这是[一个示例](https://www.mssqltips.com/sqlservertip/2780/archiving-sql-server-data-using-partitioning/)可以对分区进行的操作。 – PHeiberg

回答

0

并行处理有助于涉及大量计算。但是,在这里,您主要涉及I/O。硬盘一次只能写入一个文件。所以多线程不会带来希望的速度增长。相反,它可能会降低速度,因为在写入不同文件时,硬盘可能会被迫回退。