2013-08-28 55 views
1

我有一個非常大的(5000萬條記錄)數據集,我正在從舊的Interbase數據庫導入新的SQL Server數據庫。將SQLBulkCopy的大數據集編輯到SQL Server數據庫中

我目前的做法是:

  1. 從Interbase的數據庫獲取CSV文件(已完成,使用了一項名爲「FBExport」我發現某處在線)

  2. 舊數據庫中沒有按的模式(不在我的控制之下),所以現在我需要批量編輯某些字段,以便他們能夠在新的數據庫中工作。這是我需要幫助的區域

  3. 編輯到正確的架構後,我正在使用SqlBulkCopy將新編輯的數據集複製到SQL Server數據庫中。

第3部分作品非常迅速,診斷顯示,在一次導入10,000條記錄的幾乎瞬間完成。

我現在的(慢)方法第2部分是我只是逐行讀取CSV文件一行,並查找相關的信息(例如,CSV文件有一個ID,它是XXX ########,而新數據庫對於每個XXX和########。ex2都有單獨的列,csv文件通過字符串引用模型,但新數據庫通過模型表中的ID引用),然後插入將新行插入我的本地表中,然後在我的本地表變大後執行SqlBulkCopy

我的問題是:對於這個數據編輯步驟,什麼是「最佳」方法(性能明智)?我認爲這很可能是一種linq類型的方法,它會更好地執行,如果它會這樣做,我將如何去做?

+0

這有點寬泛,因爲它肯定會邀請對正確技術的猜測,並且不會顯示任何代碼或錯誤。但是,我認爲你走在正確的道路上。另一個選擇是創建一個與csv具有相同結構的臨時數據庫,然後批量複製這些文件,然後通過sql進行操作。儘管取決於你的模式,但它也有其缺點。 – paqogomez

回答

1

如果步驟#3的導入非常快,我會試圖創建一個臨時數據庫,其模式與舊數據庫完全匹配並將記錄導入到該數據庫中。然後我會考慮在臨時表中添加額外的列,您需要將XXX ########拆分爲XXX和########。然後,您可以使用SQL將源列分成兩個獨立的列。您也可以使用SQL來執行任何基於ID的查找和更新,以確保記錄關係繼續正確。

將數據按照可接受的格式處理後,可以使用IDENTITY_INSERT ON將記錄插入到最終表中,排除所有傳統列/信息。

在我看來,在臨時SQL DB中執行此操作的主要優點是,您可以隨時編寫查詢以確保使用舊密鑰的記錄關係仍與使用新數據庫的記錄正確相關自動生成的密鑰。

這是基於我在SQL中比在C#中進行數據轉換/驗證更舒適的基礎。

相關問題