У меня есть система комментариев с потоком, которая работает отлично 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 в процессе, и проблема исчезла - возможно, только из-за того, что обновления db работают быстрее (так что шансы на параллелизм значительно сокращаются), а не на фактическую решающую проблему , – meepmeep