2

問:從XML文件中的大數據遷移到數據庫

我面臨着以下問題兩個星期前,我不知道如何處理它走的是性能問題,考慮到數據的完整性。

我要做的就是:

我想從XML文件將數據遷移到其類似表在我的數據庫

例如:

  • 我有兩個節點(XML文件):

    coursesteachers

  • 兩個表(數據庫)

    coursesteachers

我允許用戶將XML文件上傳到我的服務器上的文件夾,我開始讀取XML文件和數據插入到我的數據庫。

的問題是:

如果插入操作過程中的一些故障發生時,我想刪除所有所有表中插入記錄(或回滾)。

我開始思考transaction,每個實體的插入會通過交易來進行,但我面對兩個問題:

  1. 我應該把所有的實體都插入在一個事務或 一個實體每個上傳器都有一個事務?(所有實體數據必須全部插入或根本沒有插入)。

  2. 時,我有記錄的數量龐大的說(1500記錄)。以下 例外出現:

    This IfxTransaction has completed; it is no longer usable,沒有 一個修復它。

  3. 我的團隊負責人告訴我不要使用該事務,因爲它會鎖定表和許多用戶使用這些表。他想要一些其他的 機制。

請我想解決我的問題(詳細的說明),如何處理這種情況下,保持性能問題和數據的完整性和一致性。

回答

2

下面是我們在同樣的問題,使用的機制,開始保存在臨時表中的數據,如果有在臨時表中插入後不會執行任何操作,運行一個將這些臨時表的內容複製到實際表的存儲過程,然後從臨時表中刪除*。 以這種方式,當使用事務機制時,您不會鎖定對錶的訪問。 還有另一種機制,但如果你使用它,你必須重新思考所有的數據庫結構,它被稱爲CQRS(對於.NET,有一個稱爲NCQRS的API)

1

如果我正確地理解了你正在做的批量插入。爲什麼不使用Spring Batch,它具有從最後一個失敗點重試,重試,分塊,數據分區等設施...

我知道你已經標記了asp.net,但數據的加載可能發生在一個技術獨立的方式和解耦的方式。不是嗎?