Уменьшение количества чтений в Firestore - PullRequest
1 голос
/ 19 февраля 2020

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

 query.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot snapshot,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    return;
                }
                if (snapshot != null && !snapshot.isEmpty()) {
                    List<FeedDetails> feedDetailsList = new ArrayList<>();
                    for (DocumentSnapshot document : snapshot.getDocuments()) {
                        FeedDetails feedDetails = document.toObject(FeedDetails.class);
                        feedDetailsList.add(feedDetails);
                    }
                    feedItemAdapter.updateData(feedDetailsList);
                } 

            }
        });

В отдельном профиле выполните c, у меня есть 10-12 полей с одним онлайн / оффлайн информационным полем. Допустим, если никакое другое поле не было изменено, но статус онлайн / офлайн для некоторых профилей изменился, слушатель снова будет читать этот документ. Есть ли способ сократить эти чтения?

1 Ответ

2 голосов
/ 19 февраля 2020

У меня есть поле 10-12 с одним онлайн / оффлайн информационным полем. Итак, скажем, если никакое другое поле не изменилось, но состояние некоторых онлайн / офлайн изменилось, то слушатель будет снова читать этот документ.

В Cloud Firestore нет способа, в котором вы могли бы только слушать на набор свойств документа и исключить другие. Это весь документ или ничего. Поэтому, если это поле online=true изменить на online=false, вы получите весь документ.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...