Блокировки на стороне сервера в облачном хранилище - PullRequest
0 голосов
/ 15 мая 2019

Мне любопытно поведение блокировок, которые выполняются при выполнении транзакций на стороне сервера в Cloud Firestore, как упомянуто в этом видео: https://www.youtube.com/watch?time_continue=750&v=dOVSr0OsAoU

Моя транзакция будет считывать несколько документов и устанавливать блокировки наих.Мой вопрос заключается в том, ограничивают ли эти блокировки весь доступ к документам, включая одновременное чтение из клиентского кода, который не является частью транзакции?Или они только ограничивают записи?

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

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

Спасибо!

1 Ответ

1 голос
/ 16 мая 2019

Моя транзакция будет считывать несколько документов и устанавливать на них блокировки.

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

Мой вопрос заключается в том, ограничивают ли эти блокировки весь доступ к документам, включая одновременное чтение из клиентского кода, который не является частью транзакции?

Ответ - нет, одновременные пользователи могут читать содержимое документа, даже если вы выполняете операцию записи с использованием транзакции.

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

Согласно официальной документации относительно транзакций Firestore , транзакция может завершиться неудачей только в следующих случаях:

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

  • Транзакция превысила максимальный размер запроса в 10 МБ.

  • Размер транзакции зависит от размеров документов и индексных записей, измененных транзакцией. Для операции удаления это включает размер целевого документа и размеры записей индекса, удаленных в ответ на операцию.

Неудачная транзакция возвращает ошибку и ничего не записывает в базу данных. Вам не нужно откатывать транзакцию; Cloud Firestore делает это автоматически.

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