Firestore медленно работает в автономном режиме на устройствах с низким объемом оперативной памяти - PullRequest
1 голос
/ 29 апреля 2019

Я разрабатываю приложение для Android для работы с кэшированной базой данных из Firestore.

Я столкнулся с проблемой после попытки заставить его работать с устройствами с малым объемом памяти (устройства с 1 ГБ и 2 ГБ ОЗУ). Запросы занимают вечность и занимают большую часть памяти приложения - обратите внимание, что я работаю со списком из примерно 10.000 документов. Структура одного документа проста, с 10 строковыми полями.

Вот пример использования памяти из профилировщика: https://i.ibb.co/MPd9h5g/profiler.png

Я попытался заставить приложение работать с меньшим количеством данных, что значительно повышает производительность. Это становится медленнее с размером базы данных.

Синхронизация с базой данных с сервера:

FirebaseFirestore client = FirebaseFirestore.getInstance();
final Query query = client.collection("collection_name").orderBy("name");

ListenerRegistration snapshotListener = query.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot querySnapshot, @Nullable FirebaseFirestoreException e) {
                // success
            }
        });

После синхронизации с сервером (что может занять пару минут) я выполняю запросы с принудительным источником кеша, например:

Source source = Source.CACHE;
client.collection("collection_name")
                .limit(15)
                .whereEqualTo("some_field", "some_value")
                .orderBy("name").get(source);

Если я использую Source.SERVER, он будет работать нормально. Но моя цель - получить его из CACHE.

Есть ли способ переместить расположение базы данных в памяти в хранилище, чтобы избежать использования памяти? Или любой другой способ заставить большую базу данных firestore работать с устройствами с малым объемом памяти без болезненной загрузки?

Заранее благодарю за помощь!

...