В документах Firestore говорится, что обе транзакции и пакетные записи являются атомарными операциями - либо все изменения записываются, либо ничего не изменяется.
Этот вопрос касается того, могут ли изменения атомной операции в Firestore быть частично наблюдаемый , или все или ничего не распространяется на читателей тоже?
Пример:
Предположим, что у нас есть база данных Firestore, по крайней мере, с двумя документами X и Y.
Давайте также скажем, что к этой базе данных подключены как минимум два клиента (A и B).
В некоторый точечный клиент A выполняет пакетную запись, которая обновляет как документы X, так и Y.
Позже клиент B считывает документ X и замечает изменение, сделанное клиентом A.
Теперь, если клиент B также будет читать документ Y, есть ли гарантия того, что изменение, сделанное A (в той же операции с пакетной записью), будет наблюдаться?
(Предполагая, что никаких других изменений, внесенных в эти документы )
Я тестировал его, и я никогда не обнаруживал его в консистенция. Однако просто проверить этот вопрос не может быть достаточно. Это зависит от уровня согласованности, предоставляемого Firestore при любых обстоятельствах (высокая частота записи, большие наборы данных, переход на другой ресурс и т. Д.)
может быть в том случае, если разрешено Firestore (в течение ограниченного промежутка времени), чтобы выставить изменение документа X клиенту B, но все же не подвергать изменения документа Y. Оба изменения будут отображаться в конечном итоге .
Вопрос; будут ли они отображаться как атомная операция или это простота, предусмотренная только для записи?
Я получил отличный ответ от Гила Гилберта в группе Firebase Google.
Короче говоря; Firestore действительно гарантирует, что чтение также соответствует. Никаких частичных наблюдений, о которых я беспокоился.
Однако, Гил упоминает, что два случая заключались в том, что клиент мог наблюдать подобную несогласованность в любом случае из-за автономного кэширования и обработки сеанса.
Ответ Гила (ссылка выше) для деталей.