2013-05-03 55 views
0

對於我的記錄系統(RDBMS)中的給定表,我需要實現一個功能來逐步導出記錄。例如,如果用戶運行一個返回x個記錄的導出作業,我想將快照ID返回給用戶。對於下一個導出作業,用戶會將該快照ID傳遞給我,並使用它我應該只能導出已修改或添加的記錄。理想情況下,我希望我的快照ID可以重複使用。換句話說,我不希望我的快照ID過期,但這不是一個困難的要求。從數據庫表中增量導出記錄

鑑於我在我的所有表格中都有LAST_UPDATE_DATE(Timestamp)列,解決此問題的最佳方法是什麼?

我不是在尋找代碼,工具或命令。我只是在尋找如何生成此快照ID的邏輯,並在隨後的調用中將其識別爲在給定表中執行記錄的增量導出。

回答

1

時間戳顯然是全局的,因此快照ID只需要一個時間戳。例如,在SQL Server中,您可以運行SELECT CURRENT_TIMESTAMP以獲取當前時間戳。

如果要導出,請在每個表上運行各個查詢以導出在最後一次導出和當前時間之間具有時間戳記的行。如果時間戳字段被索引,這些查詢中的每一個都應該相當快,顯然取決於要導出的數據量。

假設您在數據庫上可能發生其他更新的同時運行這些導出,重要的是您只獲取一次當前時間戳,將其作爲變量存儲並使用該值(而不是自由使用例如CURRENT_TIMESTAMP),否則有些數據偶爾會丟失。

您可能需要考慮在每個表上使用Deleted列標誌並更新它而不是刪除行,以便知道哪些行被「刪除」。

+0

謝謝,優秀的建議。客戶端可以保留用作導出作業的上限的current_timestamp,這將成爲下一次運行的起點,即較低的值。我也喜歡沒有物理刪除的想法,否則我不知道哪些記錄被標記爲刪除。這看起來很簡單,可能會成爲公認的答案。 – RHT 2013-05-04 05:13:34