#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
будет постоянно проверять, но будет регистрироваться только для чтения, если данные изменяются