Выполняют ли слушатели Firestore snapshost () чтение исходного документа для всех данных при каждом перезапуске приложения?

#firebase #google-cloud-firestore

#firebase #google-cloud-firestore

Вопрос:

При использовании firestore snapshot() и настройке прослушивателя Cloud Firestore отправляет вашему прослушивателю первоначальный снимок данных, а затем еще один снимок при каждом изменении документов.

Однако, если я закрою приложение и снова открою его, выполняет ли firestore чтение всех данных, которые он уже запросил, или существует внутренняя система синхронизации (например, если они хранят метаданные документов, например updatedAt , они могут читать только документы, которые не обновлялись с x)?

Другими словами. если я использую onSnapshot() прослушиватель, я буду сначала считывать x документов, а затем 1 документ при каждом изменении документа. Мой вопрос: если я закрою приложение и документ изменится, то при открытии приложения будет выполнено 1 чтение или x 1?

Для меня это важно, потому что у меня есть куча начальных вызовов, и мне интересно, как это повлияет на стоимость ($).

Также важно знать о моделировании данных и о том, как это влияет на стоимость.

Ответ №1:

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

Я предлагаю прочитать это: https://medium.com/firebase-developers/firestore-clients-to-cache-or-not-to-cache-or-both-8f66a239c329

Комментарии:

1. Эта статья на самом деле не отвечает на вопрос. Когда у вас есть слушатель и изменяется 1 документ, у вас будет только 1 чтение. Если вы настроили начального прослушивателя, у вас есть X прочитанных документов (в зависимости от того, сколько возвращено изначально) 1 чтение для каждого изменения документа. Однако, если вы уже настроили прослушиватель в прошлом перед закрытием приложения, неясно, перечитывает ли он начальный набор данных или нет. Для этого они вполне могли бы использовать метаданные синхронизации, как это обычно делается в автономных первых базах данных.

2. Другими словами. если я использую snapshots прослушиватель, я буду получать x документов изначально, а затем 1 документ при каждом изменении документа. Мой вопрос: если я закрою приложение и 1 документ изменится, то при открытии приложения будет выполнено 1 чтение или x 1?

3. Я позаимствовал ваш ответ здесь: softwareengineering.stackexchange.com/a/421573/148725

4. более того, прослушиватель snapshots не позволяет вам указать источник. итак, статья немного не имеет отношения к моему вопросу. Хотя, похоже, он отвечает на вопрос Джонатана, так что это хорошо.

5. Статья не предназначена для ответа на вопрос — приведенный здесь текст отвечает на вопрос. Статья предоставлена для добавления информации о том, как на самом деле работает система кэширования, поскольку это единственное, что может предотвратить стоимость чтения при каждом выполнении запроса. Мне непонятно, что вы подразумеваете под чтением «x 1». Чтение документа — это просто простая операция чтения. Это не сложнее, чем это. Документы не сохраняют историю, что приводит к увеличению количества операций чтения. У них всегда есть только текущее состояние.

Ответ №2:

Это зависит от типа слушателя

OnChange() будет считываться только при изменении данных

addListenerForSingleValueEvent проверит только один раз, и если это onCreate раздел, он будет выполнен немедленно

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