2014-09-19 18 views
0

我正在處理一個批量導入API,它需要有一個'預覽'功能,向用戶顯示導入文件時將創建的每種類型的記錄數。一般情況下,批量中不會有很多記錄 - 10,000是一個現實的上限 - 但系統目前相當緩慢,並且此類導入可能需要十分鐘或更長時間。鑑於我們希望批量導入儘可能接近真正的導入(即數據庫約束/觸發器,事件處理程序觸發等),實現此預覽功能的最佳方法是什麼?批量導入幹運行 - 事務回滾一個可怕的想法?

會做一個事務內的批量導入,然後回滾是一個可怕的想法?我不確定鎖定行爲會給我們什麼,只是插入數據...它看起來像一個簡單的解決方案,但我的spidey感覺告訴我這是一個糟糕的。

謝謝!

回答

1

會做一個事務內的批量導入,然後回滾是一個可怕的想法?

是的。 10分鐘長的交易將是一場災難。至少它釘住日誌,防止截斷,導致日誌增長。但更有可能會導致系統大規模停機,因爲所有其他事情都會阻止這種持久的未提交事務獲得的鎖定。

如果您只需要顯示估計的計數的用戶,那麼做真正的工作只是被丟棄是一種可怕的資源浪費。你會造成10分鐘中斷只是爲了給出估計數,然後回滾,然後再次造成相同的10分鐘中斷!

我會認真重新考慮要求顯示這個估計計數與所有副作用。基本上,除了做實際工作之外沒有任何辦法,在這一點上,你最好只做一次工作。即使像在備份數據庫上工作也可能是不切實際的,因爲大多數數據庫都具有跨數據庫依賴性(例如,觸發器可能導致插入到不同的數據庫中,並且具有真正的,不太乾燥的副作用)。

更現實的要求是向用戶顯示源文件的記錄計數(「在foo.txt中有9876條記錄」),這可以通過解析源文件來輕鬆完成。

+0

謝謝,這很符合我的擔心。我們將放棄這個想法,並在請求中只計算有效的對象。 – GoatInTheMachine 2014-09-22 10:38:41