Как взаимодействовать с Firestore, чтобы уменьшить потребление оперативной памяти на стороне клиента? - PullRequest
0 голосов
/ 10 февраля 2019

Я разрабатываю приложение для Android, которое использует много данных от и в направлении моей базы данных Firestore.

Вот краткий обзор того, что я делаю.

  1. Использование из: Я настраиваю прослушиватели на документы и коллекции и использую метод get;

  2. Использование в направлении : я храню документы, используя и не используя set, я также обновляю документы.

Пока что каждый раз, когда я делаю любое из упомянутых действий, я создаю класс с именем SetupFirebaseFirestore.Это AsyncTask, который создает Firestore.Когда он закончен, он также выполняет обратный вызов (данный, когда я создаю экземпляр SetupFirebaseFirestore).

Вы можете найти код ниже:

public class SetupFirebaseFirestore extends AsyncTask<Void, Void, Void> {    
    private SetupFirebaseFirestorePostExecuteCallback post_execute_callback;
    private FirebaseFirestore db;

    public SetupFirebaseFirestore(SetupFirebaseFirestorePostExecuteCallback callback) {
        post_execute_callback = callback;
    }

    private void createFirebaseProducts() {
        db = FirebaseFirestore.getInstance();
        db.setFirestoreSettings(new FirebaseFirestoreSettings.Builder()
                .setTimestampsInSnapshotsEnabled(true)
                .build());
    }

    @Override
    protected Void doInBackground(Void[] params) {
        createFirebaseProducts();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        post_execute_callback.onTaskCompleted(db);
    }
}

Проблема и вопрос

Проблема в том, что мое приложение взаимодействует много с Firestore.Таким образом, существует множество экземпляров Firestore и, следовательно, много потребления ОЗУ.

Кстати, возможно, он перегружает Firestore, так как я звоню getInstance() и build()?

Как могЯ делаю что-то более чистое с точки зрения потребления оперативной памяти?Должен ли я использовать шаблон синглтона? Это позволило бы мне создать Firestore один раз, и то же самое для создания его настроек.

1 Ответ

0 голосов
/ 11 февраля 2019

Клиент базы данных Firebase уже выполняет все сетевых операций в фоновом потоке.Это означает, что все операции выполняются без блокировки вашего основного потока.Помещение операций в AsyncTask не дает никаких дополнительных преимуществ.Более того, создание экземпляра FirebaseFirestore объекта внутри него не поможет вам вообще.Когда вы взаимодействуете с базой данных Cloud Firestore, открывается сокетное соединение между вашим приложением и серверами Firebase.С этого момента весь трафик между приложением и базой данных проходит через тот же сокет.Поэтому не имеет значения, сколько раз вы звоните getInstance(), у вас всегда будет одно соединение.

Если в течение определенного периода времени нет активных прослушивателей, клиент Cloud Firestore автоматически закроетсоединение, но оно снова откроет соединение, когда вы подключите слушателя или снова выполните операцию чтения / записи.

Таким образом, не имеет значения, сколько раз вы получаете соединение или сколько у вас слушателейважно, сколько данных вы обрабатываете на стороне клиента.И чтобы ответить на ваш вопрос:

Как взаимодействовать с Firestore для уменьшения потребления оперативной памяти на стороне клиента?

Сократить количество документов, которые вы получаете в одномзапрос.Производительность запроса зависит от количества элементов, которые вы запрашиваете, а не от количества элементов, к которым вы их запрашиваете.Чтобы получить данные небольшими порциями, см .:

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