Находятся ли атомарные транзакции в django на уровне базы данных? - PullRequest
1 голос
/ 06 марта 2019

У меня есть бэкэнд-приложение django, которое я запускаю в Docker-контейнере, Я использую атомарные транзакции в некоторых местах, где это необходимо

Так как у меня большой трафик и есть много мест, которые требуют дорогих вычислений, я хотел запустить другой экземпляр приложения django и сбалансировать нагрузку,

У меня вопрос instance1 запустил атомарную транзакцию, и instance2 хочет запустить атомарную транзакцию для той же записи, instance2 видит, что instance1 выполняет атомарную транзакцию, поэтому запрос будет ждать до instance1 закончено?

Спасибо

1 Ответ

0 голосов
/ 06 марта 2019

Да, Django способен обрабатывать такие запросы!

Для одновременных транзакций вы можете использовать метод select_for_update для manager или queryset объекта внутри блока transaction.atomic().документацию по select_for_update из можно найти здесь .

Примечание : использование transaction.atomic() с select_for_update () используется для обработки параллелизма и атомарностина уровне базы данных.

select_for_update выполняет следующий тип запроса на уровне базы данных.

SELECT FOR UPDATE wallet where wallet.id = '1'

, т. е.

from django.db import transaction

user_wallet = Wallet.objects.select_for_update().get(user=request.user)  # select for update query
with transaction.atomic():   # atomic transactions block
    user_wallet.amount += Decimal('200')  # updating user's wallet amount
    user_wallet.save()

Для получения дополнительной информации см. Документация по транзакциям с базой данных Django

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...