Спросите Firebase об изменениях по сравнению с прошлым разом, когда приложение запускалось - PullRequest
0 голосов
/ 07 апреля 2020

Коротко: Чтобы ограничить количество документов, возвращаемых Firebase, мне интересно, можно ли запросить последние обновленные документы по сравнению с документами в кэше?


В настоящее время я запрашиваю всю коллекцию в виде потока и прослушиваю обновления.

Firestore.instance.collection(COLLECTION).snapshots().listen((snapshot) {
  snapshot.documentChanges.forEach((doc) {
    // ...
  });
});

К сожалению, у меня большая коллекция (> 1000 документов), поэтому каждый раз, когда запускается приложение, один пользователь платит мне много, потому что возвращается более 1000 документов. Прежде чем делать это по-своему, например, добавить столбец «updatedAt», «упорядочить» и попробовать другие подобные вещи, я думаю, что это должно существовать более простым способом.

Так есть ли способ попросить Firebase возвращать только обновленные документы с последнего раза (например, на основе тех, которые находятся в кеше)? Спасибо.

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

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

Так что вам нужно будет иметь поле метки времени в каждом документе это указывает, когда это было последнее обновление, а затем запрашивает только те документы, которые были обновлены с момента последней синхронизации. Firestore не хранит такую ​​информацию автоматически, поэтому вам придется добавить / отследить ее самостоятельно.

Это определенно возможно, но вам придется задуматься, является ли это правильным использованием Firestore. Под локальным кешем понимается только кеш, а не полноценная база данных. Хотя он может выполнять все запросы, которые может выполнять сервер, производительность запросов в локальном кэше действительно ухудшается с размером кэша, в отличие от производительности запросов на сервере.

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

0 голосов
/ 07 апреля 2020

Единственный способ - добавить поле updated и запросить:

Firestore.instance.collection("collectionName").where("updated", isEqualTo : true).getDocuments().then((querySnapshot) {
    querySnapshot.documents.forEach((result) {
      print(result.data);
    });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...