我有一個線程評論系統,它可以在99.9%的時間內正常工作,但偶爾樹會中斷並且左/右值得到重複。django-mptt:處理併發插入
我發現,當兩個帖子同時發生(彼此間隔一秒鐘)時會發生這種情況,並且可能發生的情況是第二個帖子在第一個帖子之前更新了樹的左/右值已經完成了。
從views.py
我的評論插入代碼如下:
@login_required
@transaction.autocommit
def comment(request, post_id):
parent = get_object_or_404(Post, pk=post_id)
if request.method == 'POST':
form = PostForm(request.POST)
form.parent = post_id
if form.is_valid():
new_post = newPost(request.user, form.cleaned_data['subject'], form.cleaned_data['body'])
new_post.insert_at(parent, 'last-child', save=True)
return HttpResponseRedirect('/posts/')
else:
form = PostForm()
return render_to_response('posts/reply.html', {'requestPost': request.POST, 'form': form, 'parent': parent}, context_instance=RequestContext(request))
什麼是正確的方式來處理呢?有沒有Django的方式來確保第二個視圖不被調用,直到第一個數據庫事務完成?還是應該在每次插入後重建樹以確保完整性?還是有更好的插入方法使用?
謝謝!
編輯:我正在使用MySQL。
您是否找到解決方案或更好的解決方法? – Daviddd
我在這個過程中遷移到了一個新的(更快的)主機並升級了django-mptt,問題消失了 - 可能僅僅是因爲數據庫更新運行速度更快(所以併發的機會大大減少),而不是真正解決的潛在問題。 – meepmeep