我有一个线程评论系统,它在 99.9% 的时间里都能正常工作,但偶尔树会崩溃,左/右值会重复。
我发现当两个帖子同时发生(彼此在一秒钟内)时会发生这种情况,并且大概发生的事情是第二个帖子在第一个帖子完成之前更新树的左/右值这样做.
我的评论插入代码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。