0

Я только что прочитал это большое резюме GAE лучших практик: https://cloud.google.com/datastore/docs/best-practicesGAE: Как отменить транзакцию?

Один из них:

Если сделка не удается, убедитесь, что вы попробуйте откатить транзакцию. Откат минимизирует задержку повторной попытки для другого запроса , борясь за тот же ресурс (ы) в транзакции. Обратите внимание, что сам откат может потерпеть неудачу, поэтому откат должен быть выполнен только с максимальным усилием .

Я думал, что откат транзакций был чем-то, что GAE сделал для вас, но приведенная выше цитата говорит, что вы должны сделать это сами.

В документации here также говорится, что вы должны сделать откат, но не знаете, как это сделать.

Итак, как мне отменить транзакцию в GAE Python?

+0

Примечание в цитируемом тексте: «Откат ** минимизирует задержку повторной попытки», - что ИМХО означает просто, что если вы попытаетесь выполнить откат самостоятельно, это может произойти быстрее. Если GAE в конечном итоге не сделает это за вас, но это может занять больше времени, замедляя другие конкурирующие транзакции. –

ответ

1

Документ по лучшим практикам предназначен для использования облачного хранилища данных непосредственно через его API-интерфейс или клиентские библиотеки.

Это необходимо только в гибкой среде Appengine. Даже в этом случае, Cloud Datastore client library предоставляет менеджеру контекста автоматически обрабатывать откаты - это пример кода из the docs

def transfer_funds(client, from_key, to_key, amount): 
    with client.transaction(): 
     from_account = client.get(from_key) 
     to_account = client.get(to_key) 

     from_account['balance'] -= amount 
     to_account['balance'] += amount 

     client.put_multi([from_account, to_account]) 

docs состояние:

По умолчанию, выполняется откат транзакции, если транзакция блокировка выходов с ошибкой

Помните, что клиентская библиотека все еще находится в бета-версии, поэтому поведение может измениться в будущем.

В стандартной среде Appengine, ОПРС библиотека обеспечивает automatic transaction rollback:

ОПРС Клиент может сгруппировать Libary несколько операций в одной транзакции. Транзакция не может быть успешной, если каждая операция в транзакции не удалась; если какая-либо операция завершится неудачно, транзакция автоматически откатится.

Смежные вопросы