2010-07-20 34 views
1

我有一個項目,我需要拉入大量記錄並根據一些標準對其進行修改。大型數據集.net和SQL服務器?

基本上,我們有一個系統,用戶可以上傳文件。這些文檔在數據庫中被標記出來以用於其他用戶的驗證原因。我們根據特定標準驗證文件,然後將其標記爲有效。所以我們有2列isValid和驗證。

我不能依賴數據庫來驗證這些文件,所以我有一個應用程序來完成一些驗證工作。可能有數十萬個文件需要驗證。應用程序迭代數據庫的最佳方法是什麼?有一個想法,就是編寫一個SP來拉取沒有驗證標誌設置爲真的TOP X數量的記錄。然後運行另一個查詢以查看是否還有剩餘記錄。如果是這樣,請再次運行相同的SP,將記錄拉出並處理它們。我不確定應用程序如何處理這些記錄。

+1

請在未來使用段落 - 越容易閱讀,越容易幫助您。 – 2010-07-20 19:44:42

+0

我通常這樣做,出於某種原因,他們沒有在帖子中翻譯。 – DDiVita 2010-07-20 19:48:30

回答

2

您的方法非常合理。例如,我使用了類似的方法進行羣發郵件(讀取最高1000,直到用完記錄)。最重要的是,你永遠不需要拉超過X記錄,這使得你的循環很快。

如果不能解決問題,您可以添加Service Broker並將其放入QUEUE,您可以在其中添加進程監聽的驗證訂單。這種後面的方法可以讓您實際上也輕鬆地進行驗證的多個讀取器。但是,如果驗證是一個瓶頸(因爲它需要時間 - 你永遠不會說實際驗證了什麼)。

+0

這樣的處理基本上是一個隊列。如果需要高性能/吞吐量,該表必須考慮到排隊設計:http://rusanu.com/2010/03/26/using-tables-as-queues/ – 2010-07-20 23:41:34

+0

問題是沒有更新你不能輕易放入多個閱讀器。所以,對於沒有很高處理要求的東西來說,這樣做很好,但是運行300個進程來拉動最新的項目比僅僅選擇頂部要複雜一點。 – TomTom 2010-07-21 05:00:42

-2

我會先看看BulkRead和BulkWrite對數據庫。我沒有個人有理由使用它們,但我相信它們會非常接近你所需要的:一種非常快速的方式從數據庫中獲取數據,然後以非常快的方式寫回數據庫以及。

+0

完全不是用戶需要什麼。 Gratulations。 – TomTom 2010-07-20 20:42:55

1

您是否嘗試過在SQL Server中使用FILESTREAM列?如果不是,here是簡要說明。

從本質上講,您的文檔可以物理地存儲在文件系統中,但仍然被SQL Server視爲數據庫的組成部分 - 這意味着您不必使用大型BLOB列和/或更新記錄將能夠使用直接文件系統調用來管理文檔本身。

只是一個想法。