2010-05-07 66 views
3

我在不同的Web應用程序中看到過一個功能,包括Wordpress(不確定?),它警告用戶,如果他/她從數據庫中打開文章/帖子/頁面/否則會同時編輯相同的數據。防止兩個用戶編輯相同的數據

我想在我自己的應用程序中實現相同的功能,我已經給了這個想法。下面的例子是如何做到這一點的良好做法?

它去有點像這樣:

1)User A進入編輯頁面的神祕物品X.數據庫表Events進行查詢,以確保沒有其他人編輯同一個頁面的那一刻,沒有人在那。然後隨機生成令牌並將其插入名爲Events的數據庫表中。

1)User B也希望是進行更新文章X.現在,因爲我們User A已經被編輯的文章中,Events查詢表,看起來像這樣:

| timestamp | owner | Origin  | token  | 
------------------------------------------------------------ 
| 1273226321 | User A | article-x | uniqueid## | 

2)時間戳是被檢查。如果它是有效的和小於說百秒老,會出現一條消息,並且用戶不能對所請求的第十條任何改變:如果用戶A決定繼續並保存他的更改,令牌

Warning: User A is currently working with this article. In the meantime, editing cannot be done. Please do something else with your life. 

3)與所有其他數據一起發佈以更新數據庫,並切換查詢以刪除具有標記uniqueid##的行。如果他決定採取其他措施而不是進行修改,那麼文章X仍然可以在100秒內編輯,以便在012秒內完成編輯。User B

讓我知道您對這種方法的看法!

祝大家週末愉快!

回答

0

編輯文章總是少於100秒?

+0

不錯,100秒的延遲只是一個例子,所以這對於一篇文章的複雜更新可能有點不切實際。你會怎麼做? – Industrial 2010-05-08 11:49:44

+2

把100秒作爲「僅僅是一個例子」並不重要。重點是:不存在任何單一的這樣的時間間隔,你可以放心地說:「經過這段時間之後,我可以肯定地知道該編輯不再真的在編輯這篇文章」(並且將把文章釋放在內合理的時間來編輯後續的編輯誰想要做一些真正的工作)。 你想做的事情與「等待用戶輸入時事務處於等待狀態時保持掛起狀態」非常相似。這被認爲是一種非常糟糕的設計技術。 – 2010-05-08 12:04:18

+0

Seb提出了「鎖定中斷」的可能性,也就是說,在沒有明確徵得A的同意的情況下,B有可能否決A的鎖定。 你可以這樣做,但在某些情況下,事情可能會變成競爭用戶之間的拳擊比賽。允許第三方在沒有通知我的情況下「分手」我所做的事情,也不完全是最有禮貌的解決方案。 – 2010-05-08 12:28:33

3

是的,這是偉大的,應該工作正常。

此外,我會添加用戶B打破鎖定的可能性 - 如果完全想要的話!

也就是說,可以用B's替換A的鎖。這樣,你可以避免時間限制,他們會看到'嘿,這是由A編輯的,而這個鎖是XXX秒/分鐘。你想打破這個鎖?'。

有了很好的用戶(即沒有惡意管理員),這種方法可能比編輯一些東西只需100秒更好 - 有時您只需要更多時間。

+0

嗨塞布,這是一個很棒的主意,我真的應該實施。謝啦! – Industrial 2010-05-07 22:26:09

2

聽起來像它會工作正常。如果您想對其進行非規範化並刪除額外的Events表,只需將UserIdTimestamp字段添加到Articles表中,因爲這是您真正需要的。

您可以輕鬆檢查UserId是否不匹配,如果Timestamp年齡小於100秒,則顯示該消息。

這樣,您不必在單獨的表上做任何刪除操作。

2

我只是補充說,如果在頁面上已經做了更新時間戳的操作,你可以每隔一分鐘左右開一個AJAX查詢。

相關問題