我有存儲在磁盤上,可以是一個Web場中跨多個服務器訪問的文件。根據需要根據數據庫中的數據更改更新此文件。我有一個數據庫表,它存儲了一個包含該文件的URI的行,以及一些基於某些數據庫表的散列。如果散列不匹配它們各自的表,那麼文件需要重新生成並且需要插入一個新行。如何只允許一個更新/插入到表,如果行是過時的
如何讓這個只有1個客戶端重新生成此文件,並插入行?
(因爲鎖)最簡單的,但最糟糕的解決方案是:
BEGIN TRANSACTION
SELECT ROW FROM TABLE (lock the table for the remainder of the transaction)
IF ROW IS OUT OF DATE:
REGENERATE FILE
INSERT ROW INTO TABLE
DO SOME STUFF WITH FILE (30s)
COMMIT TRANSACTION
但是,如果多個客戶端執行此代碼,所有後續的客戶坐了很長一段時間,而「做一些東西WITH FILE「進程。
有沒有更好的方法來處理這個問題?也許改變我在提交之前處理文件的方式以使其更快?我被困在這幾天。
IM觸發器中沒有專家,但可能由於你所提到的文件反映了數據庫中的數據,所以它再生每次他們將是有益的4U –