Transaction

如何在儲存來自不同應用程序的結果時防止重複

  • October 21, 2018

對於我的情況,多個應用程序根據日期使用數據庫中的數據,此數據是特定於日期的,因此如果存在日期數據,應用程序應該只讀取它,否則它應該從不同站點獲取資訊並進行一些計算以創建日期數據並儲存它在數據庫中並使用它。

由於多個應用程序需要此數據,因此我正在按日期查找 db 中的數據(如果存在),只需讀取它,否則從 Internet 獲取數據,並在經過一些處理後將其與日期一起儲存在 db 中。

但是由於多個應用程序會執行相同的操作,因此第一個應用程序可能會出現並在 db 中查找日期的數據並且沒有找到任何數據,因此它開始從 Internet 獲取此數據,同時其他應用程序也會查找相同的日期數據但它也沒有找到數據,因此它也將開始獲取數據,並且當它完成時,其他應用程序已經儲存了該資訊,因此第二個應用程序將嘗試在表中插入重複資訊。

在這種情況下避免重複的最佳方法是什麼?是否應該在插入之前檢查或使用事務可以提供幫助?

您可以在 db 表上添加唯一鍵約束,表本身將防止第二個應用程序插入重複數據並返回錯誤程式碼,例如“唯一鍵違規”,在應用程序中您需要處理此錯誤/異常。

當您的一個應用程序啟動獲取數據的過程時,您可以創建一個標誌。稍後出現的程序可以在開始程序之前檢查相同的標誌。

引用自:https://dba.stackexchange.com/questions/124502