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。硬盤一次只能寫入一個文件。所以多線程不會帶來希望的速度增長。相反,它可能會降低速度,因爲在寫入不同文件時,硬盤可能會被迫回退。