2013-07-23 77 views
0

我有一個關於counterCache的問題,文檔根本沒有澄清。 當更新字段值時,counterCache是​​否檢查競爭條件?counterCache是​​否受到競爭條件的影響?

例如,假設我們有一個論壇實現,並且對於每個論壇,我們有一個數字n通過counterCache存儲的主題。然後,如果兩個用戶幾乎同時使用模型(足以覆蓋他們的操作,意味着當一個用戶結束時,另一個用戶仍然會使用它),一個用戶創建一個新的主題,另一個創建一個新的主題(假設它可以)會刪除另一個主題,那麼它會完全顯示n主題,而不是n + 1n-1

回答

0

無論哪種操作首先完成將是結果。這種操作發生在相同的時間,這是非常不可能的,可能在技術上是不可能的。所以兩者中的一個首先出現。然後還有服務器和瀏覽器收到請求所需的時間。所以無論什麼時候下一個查看請求到來,你都會得到數據庫中更新的任何內容。

通過檢查代碼,您還可以看到代碼正在執行find('count')而不是+/- +/-增量。 http://api.cakephp.org/2.3/source-class-Model.html#1913-1981因此,緩存在上一個操作完成後寫入。

最後,我真的不用擔心,如果計數在某個時刻偏離了+/-,特別是在論壇中。

0

我相信它可以,但不是因爲Cake,而是因爲多個SQL操作在非事務性行爲中,並且來自多個客戶機(用戶)同時。任何具有或不具有框架的Web應用都會遭受這種情況。

我對SQL事務不太熟練,但我非常肯定某種事務配置會阻止這種形式的發生。

正如burzum所說,論壇的例子絕對不值得擔心。