1
在我的Django應用程序,我有被用電話淹沒到一個更新的方法,我稱之爲IncrementMagicNumber一個AJAX的看法:處理同步會話更新
def IncrementMagicNumber(request) :
number = request.GET['increment']
request.session['magicnumber'] = request.session['magicnumber'] + int(number)
return HttpResponse("OK!")
這對於一個更新工作正常,在同一時間,但是當客戶連續幾次調用SetMagicNumber時,事情就會變得混亂。比方說,magicnumber最初是0,客戶端發送了3個連續的AJAX請求IncrementMagicNumber:
IncrementMagicNumber(2)
IncrementMagicNumber(5)
IncrementMagicNumber(4)
客戶要求此值是11,現在,但是Apache同時處理所有這些要求,所以只有最後的更新變保留。同步Django會話的任何提示/技巧?
事情,我想,以避免如果可能的話:
- 客戶端配料(我知道這會解決這個問題,但這是一個後端的問題,最好是固定在那裏)
- 某種數據庫鎖定;如果可能,我寧願避免使用這種方法。
我應該澄清。我不想做表級鎖定。行級鎖定會很好。你能分享一下你的實施細節嗎? – 2010-10-13 08:35:25
啊對,我沒有在Django中做過這個,但是我已經在我們工作的舊ISAM中完成了,所以代碼對你來說無濟於事!谷歌搜索「Django行鎖」引發了很多片段,你遇到了標準方法的問題嗎?主要考慮 – jambox 2010-10-13 17:42:13
糟糕!在鍵盤上的貓。主要考慮的問題是您的IncrementMagicNumber是否有意義,或者只是一個任意數字,如序列號。如果是後者,你總是可以用一行和一列創建一個新表格,只需保存該數字即可。或者你可以研究交易,但這不是靈丹妙藥。此外:http://stackoverflow.com/questions/1030270/race-conditions-in-django – jambox 2010-10-13 17:51:23