Добавление слушателя к значению, которое не существует - PullRequest
1 голос
/ 30 марта 2019

Я недавно запустил свое приложение для Android, которое использует базу данных Firebase в реальном времени, и неожиданно счет был очень велик из-за того, что в Firebase было загружено 1 ГБ.
Мое приложение сейчас приостановлено, и я пытаюсь исправить это, как только смогу. Раньше я не добавлял слушателей внизу и всегда добавлял в корне, что вызывало это.

A

mDatabaseReference.child("Data").child(ID).child("Details").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                       //Do Something
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });

B

mDatabaseReference.child("Data").child(ID).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if(dataSnapshot.hasChild("Details")){
                        //Do Something
                        }
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });

Первый метод не выдает ошибку, если данные не существуют, но я хочу знать, выполняет ли их поиск в базе данных (что в сумме загружено в ГБ) или нет?

Так есть ли разница между A и B или лучше (если оно не превышает загруженный ГБ)

Документация Google мало что говорит о слушателях. Часто ли добавление слушателей в моем приложении приводит к загрузке в ГБ? Также могу ли я что-нибудь сделать с протоколом соединения и шифрованием SSL?

1 Ответ

0 голосов
/ 30 марта 2019

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

A вызывает загрузку меньших общих данных, чем B, потому что A более специфичен, чем B. B приведет к загрузке всех дочерних элементов под ним.

...