Транзакции на стороне сервера в целом работают подобно клиентским библиотекам, но вместо этой модели параллелизма, упомянутой в этом видео, работают традиционным способом блокировки данных.Поэтому даже если вы используете транзакцию для одного документа или запроса, эти документы будут заблокированы до завершения транзакции.
Чтобы ответить на ваш вопрос, поскольку транзакция, поступающая из облачной функции, принимаетвнутренне (может занять несколько миллисекунд), документы блокируются на это время.Это означает, что эти документы не могут быть приняты или изменены никакими другими транзакциями.
1) Документ блокируется при получении транзакции на сервере, поэтому другие транзакции на сервере не могут получить его до первой транзакции.Закончено.
Правильно.
2) Документ блокируется при получении транзакции на сервере, но только для записей, так что другие транзакции на сервере могут получить его, ноне изменяйте его до завершения первой транзакции.
Для другой транзакции не имеет смысла получать заблокированный документ.Зачем пытаться получить такой документ, поскольку его нельзя изменить?Более того, заблокированный документ может иметь к моменту завершения транзакции разные значения.Между началом транзакции и ее завершением изменяются некоторые свойства в документе.
3) Документ НЕ блокируется при получении транзакции на сервере, только запись.
Документ блокируется, как только облачная функция запускает транзакцию, и блокировка снимается, когда транзакция завершается.
Редактировать:
Itимеет смысл для другой транзакции получить заблокированный документ.Это не может быть изменено, но если это можно прочитать
Я имел в виду строго с точки зрения письменности.Все документы могут быть прочитаны, независимо от того, заблокирован документ или нет.
, если вы просто хотите прочитать значение
Если вы просто хотите прочитать значение, здесь не о чем беспокоиться.При чтении документов нет блокировок.
Возможно, вам нужно прочитать какое-то значение, чтобы принять решение об изменении другого документа или даже просто показать некоторую информацию пользователю.
Он будет отлично работать.
Также, в зависимости от транзакции, вам все равно, изменится ли документ в течение следующей секунды.Например, если пользователь хочет узнать сумму денег на своем банковском счете, вы можете отобразить значение за одну секунду до этого, без проблем.
Да, это правильно.Там нет никаких ограничений, когда речь идет об операциях чтения и в отношении вашего примера, да, это нормально.Это также работает в одном из моих проектов.
Не могли бы вы указать мне их источники?
Есть много ресурсов, которые объясняют, как традиционный способ блокировкиданные работают.Транзакции на стороне сервера работают таким образом, как подтвердил Тодд Керпельман в понравившемся видео.Цель этой блокировки - обслуживать и защищать общие ресурсы (документы).
Мне действительно нужно быть в этом абсолютно уверенным, поэтому мне нужны источники или кто-то из команды Firebase, подтверждающий их.
Будем также надеяться, что кто-то из команды Firebase найдет время и взглянет на это, но я не уверен, что понимаю, что вас беспокоит?Вы думаете, что во время транзакции вы не сможете читать документы?Или