2014-02-20 89 views
0

我們的數據庫中有兩個表需要使用另一個源的提取進行更新。這種提取爲我們提供了一個文本文件。從文本文件更新Db

由於Talend的原因,第一次插入很容易,但現在我們遇到了另一個問題。

我們不想做一個簡單的插入或更新,但我們想比較兩個來源,並給用戶選擇哪些值適合每個條目。

目前找到的唯一解決方案是將新內容插入到另一個表格中,並且要比較每個條目感謝程序,然後我們顯示已修改的條目。

問題是我們有超過1500個條目,而且這個解決方案的性能非常低,所以我們正在尋找一個新的。

會有像從我們的數據庫引入文本文件的解決方案,然後自動比較這兩個文件,並gerenate第三個文件,只包括修改。第三個將更容易加載到程序中並進行分析。

感謝您的幫助

+0

由於你的輸入是常規的文本文件,我會使用[比較軟件](http://stackoverflow.com/questions/96051/which-file-comparison-tool-can-handle-block-movement-and-多個版本) - 假設您的文本文件'記錄'始終以相同的順序排列。除非你多次做這個過程,否則寫一些特定的程序可能會更好。 – Laoujin

+0

感謝您的快速回答, 我的觀點不是比較IT服務中的文件,而是將自動提供的問題數據自動提供給軟件,以便我們可以通過該程序向用戶提出問題數據,以便讓他們選擇哪些數據要保留 – Krowar

回答

0

因爲只有少數記錄(1500+)數據庫:

  • 從數據庫裝載到內存中的所有記錄,
  • 開始閱讀每一行更新的輸入文件
  • 查看是否存在與內存中的記錄完全匹配的內容
  • 如果沒有,則將該記錄插入數據庫,並且鏈接到原始數據庫記錄

對於您的選擇:

  • 如果「鏈接」欄爲空,這是一個「真實記錄」
  • 如果在鏈接列中的值,你可以用它來選擇需要記錄由用戶

當你的數據庫變得太大加載一切到內存中進行比較,你必須切換到批量處理(使用PL/SQL或T-SQL或.. )或者稍微改變這個過程。

+0

感謝您的回答! 但是,「將條目加載到內存」是什麼意思? 再次感謝 – Krowar

+0

我認爲最簡單的方法是創建一個類型化的DataSet並填充它。從本質上選擇數據庫中的所有記錄並將它們存儲到DataSet中。DataTable(它是DataRows的一個集合) – Laoujin

+0

我不確定要理解,與我們的解決方案有什麼不同: 我們當前加載了來自兩個表中的條目列表,然後將條目與相同的ID進行比較。 什麼需要時間沒有得到整個列表,但compareason(目前不是很聰明(我們比較串的串),但仍然有效)。 然後,我們只返回一個只包含「有問題的條目」的表格,這些條目僅支持其中的幾個。 再次,需要花時間的是前面(管理員中的t_admin管理員)循環 – Krowar