2012-07-15 14 views
2

我正在開發一個藝術家檔案和一個桌面軟件的網站來管理其數據庫內容。 有許多運營商會在其收件箱中收到相同數量的待審批記錄,以便進行修改以供批准和發佈。 問題是兩個或多個操作員試圖編輯相同的記錄時。它的數據庫服務器(遠程mysql)會引發鎖定錯誤,或者僅保留最後一次保存的操作員的數據。如何檢查用戶是否在允許其他用戶編輯之前編輯表格記錄,而不是等待帖子?

什麼是最好的方法(更簡單,更有效的方法)檢查​​是否有任何人已經編輯記錄在授予訪問此記錄給另一個用戶之前,或者如果記錄的所有者本人正在更新他的記錄再次在網站上?

該軟件仍在實驗室。但是當我將它交付給客戶時,我知道這將是一個問題。

我可以創建一個表來標記每個記錄爲「編輯」或「空閒」,所以我不需要改變表格的結構(因爲人們已經在網站上使用它們)。但我需要確保有一個更優雅/更快的方式來做到這一點。

回答

5

有很多系統級的方法可以用來處理這個問題。鎖定記錄以進行排他編輯僅爲傳統上由舊系統選擇的記錄之一。

一個更現代的方法是允許兩個編輯進行而不鎖定—稱爲optimistic concurrency control。如果有重疊的編輯,看它是否可以自動解決—許多同時編輯實際上並沒有引起爭議,特別是如果他們編輯記錄的不相關部分。

在出現衝突的情況下,重要的是不要簡單地丟失第一個編輯:第一個編輯器已經發出成功事務的信號。責任是向第二位編輯表明他們的編輯與較早的編輯衝突。通常情況下,最好的方法是向他展示他提出的變更以及其他最近的變更,並讓他們選擇要執行的操作:放棄變更,覆蓋以前的變更(可能顯示第一個編輯器)或手動合併變更。

這可能不是什麼大不了的事。對系統的描述表明用戶不會與具有編輯價值的事件緊密同步。每次編輯發生的隨機時間表明編輯衝突很少。在這種情況下,您的空閒/編輯指示可能綽綽有餘。

+0

你不覺得這個新表會增加至少50%的信息流量嗎?這就是我所害怕的...... – PSyLoCKe 2012-07-15 23:14:08

+2

@EASI:手,我看不出任何這些方法會影響流量。即使這是一個問題,防止數據丟失,可靠地執行和執行用戶所期望的操作比系統或網絡繁忙得多。系統在那裏爲人類服務 - 而不是相反。 – wallyk 2012-07-16 03:21:26

相關問題