2017-07-06 75 views
1

我有一個表,存儲客戶提交的表格。從cronjobs mySQL鎖記錄

還有一個cron腳本,用於從該表中選擇記錄進行處理。它每分鐘運行一次。

SELECT * from Forms where to_CRM = 0 limit 10

的問題是有時API需要一段時間才能完成,這樣有時下一批已經要求前一批次完成之前運行。

這會導致選擇同一個人進行處理,因爲他的To_CRM標誌仍然爲0;

鎖必須鎖定表不能插入新記錄。

什麼是最好的方法來解決這個問題通過交易或不同的方法,如在處理表時設置一列?

+0

我想通過防止cron每次運行多次 - 也許是在啓動時檢查和「touch()」鎖定文件,然後在完成時取消鏈接()。 – ceejayoz

回答

1

也許你想實際更新表:

UPDATE Forms SET to_CRM=1499358596 WHERE to_CRM=0 LIMIT 10 

凡表示執行的時間。然後:

SELECT * From Forms WHERE to_CRM=1499358596 

這不會增加一倍,因爲每次運行將排除它是從因WHERE條款後續運行操作上。我假設你可以在這裏使用to_CRM這個字段,但是你可以添加另一個專門用於鎖定/聲明的字段。

+0

這就是我最初想的,我只是想知道一個交易是否會達到同樣的目的。 – Edward

+0

事務不會幫助你,因爲你的'SELECT'不會修改任何內容。您需要編寫兩個進程進行協調。你會使用一個事務來解救你的進程崩潰,以釋放這些更新和任何不完整的寫入。這可能最終會阻止其他工作人員,具體取決於您如何實施它,這可能會或可能不需要。 – tadman

+0

對,但我總是在交易結束時寫入以更改記錄中的to_CRM標誌 – Edward