2010-10-10 69 views
0

我目前有一個需要每晚更新的3m記錄表。 填充此表的數據來自大約100個API,這些API都被歸一化爲一個巨型表。反映兩個數據集之間的記錄刪除/添加

問題: 如何反映正在添加的新記錄以及在源處刪除的記錄?

事實: 我不能每天晚上截斷表並重新插入。 每個API爲每條記錄提供一個常量ID(這樣我就可以跟蹤什麼是什麼)。 有些字段將每晚更新。

解決方案: 新記錄很容易,我只是將它們添加到我的表與一個AvailableFrom日期。 更新也很容易,對於每條記錄我會檢查它是否存在以及數據是否已更改(性能會變差)。

刪除的記錄是我卡住的地方。 這些API只會轉儲一大堆數據,我該如何判斷一條記錄是否「脫落」?

我在想某種交換表 - 任何想法?

回答

0

如果要告訴記錄是否被刪除,唯一的方法是檢查api是否提供了它,而不知道你正在尋找什麼記錄,你需要跟蹤iports。如果你總是做一個完整的進口:

解決方案1:

設置標誌,用於在數據庫中的每一行,然後做進口和更新你的每一行的標誌,然後刪除了並不代表一切已更新。

解決方案2: 爲每個導入設置導入ID(綁定到日期?)並將其寫入數據庫條目。所以你知道哪一行來自哪個導入。使用最新導入中的導入ID覆蓋現有數據。 然後,您只能使用上次導入的數據。

但是如果你總是做一個完整的導入,放棄之前的一切應該更快不應該?

+0

謝謝,我去了第一個解決方案。解決方案2可能更整潔(我可以創建帶有統計數據的導入對象等),但是我添加了LastUpdated列。一個單獨的進程然後清除舊的行。完全導入會破壞其他地方引用的表ID。 – jimi 2010-10-11 14:03:26

相關問題