2011-02-23 41 views
1

這或多或少是一個設計問題。我們必須處理一百萬行並將xml發送給第三方。最初我們必須發送100萬條記錄,稍後我們只會發送增量。什麼是處理來自數據庫的100萬條記錄的技術

現在,存儲過程大約需要15到20分鐘才能返回數據。它是一個consoleapp權利。我知道它不是一個很好的方法來獲得100萬條記錄。

我想知道下面的事情 1)是在連接到數據庫的C#控制檯應用程序是正確的做法還是不 2)是否有這樣做的任何其他方式?

感謝您對此的指導,不需要任何編碼等等,我們需要一些關於如何進行的建議。 在此先感謝。

回答

1

注1:取決於您的架構。那很簡單。這是一種VIABLE方法。

回覆2:是的,噸。所有vaible。您可以根據請求使系統服務處理數據生成。你可以有一個Web應用程序。

一般來說,一個控制檯應用程序會正常工作,並且100萬行nia結果集也不是很多。完全可行。儘管如此,1-20 minuts很奇怪。花費的時間在哪裏? 100萬行轉移寫出時間不超過2-3分鐘。

+0

其不是一個擁有所有記錄的單個表,它是一個連接多個表並獲取數據的巨大存儲過程,假設所有數據在一個表中,我還有一個問題,獲取這麼多數據會有什麼問題嗎?你認爲100萬條記錄是可以的。 – kobe 2011-02-23 07:36:10

+0

我經常處理5億行集合,所以......如果你是正確的硬件,它將非常好。 – TomTom 2011-02-23 15:40:25

1

1)是的,爲什麼不呢。

2)是的。

使用遊標。

1

你需要對你在15到20分鐘內做什麼更具體一些。

您在詢問有關「正確」做事的方式 - 您在優化什麼?

速度? 15-20分鐘的存儲過程聽起來很危險。它在做什麼?

維護/可讀性?控制檯應用程序將工作。測試(單元測試等)比存儲過程更容易。

我從來不喜歡長時間運行存儲過程,因爲它不容易看到進展。至少有一個控制檯應用程序,你可以輸出東西

1

相信我,100萬條記錄是不是一個大問題,以著名的商業數據的基礎上,這是不值得15至20分鐘,返回的記錄。別的地方是錯的!您是否在商店過程中構建XML文件?如果是,請刪除它們並在C#中實現XML構建。 SP只有一個簡單的任務:獲取數據。如果您沒有在另外一百萬條記錄上加入100萬條記錄,則不需要很長時間。在數據進入應用程序之後(在這種情況下控制檯應用程序可以正常工作),可以使用LINQ-to-XML構建XML。如果您仍然不滿意表現,請使用您的代碼parallel

編輯您的SP耗時,您需要對其進行優化。舉個例子:SP 1T記錄中的T_Data連接T_User和1m記錄會花費很多時間。優化之後:在SP T_Data中加入T_User中的一條記錄(幾乎是一個非常快的WHERE表達式),並且在C#代碼中,您將從T_User獲取記錄,爲每條記錄調用SP並獲取數據,然後構建一個部分/*您的XML片*。所有這些都可以同時處理。最後,你將所有的XML合併爲一個。

+0

@Danny - 重新並行 - 在兩個IO點(進出)中,OP幾乎肯定被阻塞;添加更多的CPU無助於 – 2011-02-23 07:40:44

+0

@danny,xml僅在控制檯應用程序中生成,存儲過程有幾個連接,這就是爲什麼它花費了很多時間。我認爲根據這裏所有,它可以在控制檯應用程序中獲得100萬條記錄和進程。 – kobe 2011-02-23 07:41:38

+0

@gov - 如果時間在連接,添加任何適當的索引,denormalize等 – 2011-02-23 07:42:30

2

我的想法:

  • 不獲取所有數據然後處理它;但它處理它,因爲它到達 - 通過IDataReader或LINQ
  • 使用同等流式方法的文件;也許XmlWriter直接,也或許XStreamingElement - 在任何情況下,從源讀取上述

這大大減少了你需要的內存數量,並允許你的機器上做一些有用的東西,而在網絡上等待IO

+0

還有一個問題,如果存儲過程需要時間來返回數據會發生什麼。 – kobe 2011-02-23 07:44:14

+0

@gov然後修復;沒有更多的上下文,我們不能分辨任何東西* – 2011-02-23 07:54:51

相關問題