Я разрабатываю приложение для 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 работать с устройствами с малым объемом памяти без болезненной загрузки?
Заранее благодарю за помощь!