Имеет ли Firebase Datasnapshot все данные из ссылки? Некоторая ясность в отношении потребления данных в базе данных - PullRequest
0 голосов
/ 20 января 2020

Я знаю, что по Firebase Datasnapshot задают много вопросов, но я все еще немного не прояснил свои сомнения. Вот в чем дело,

У меня есть структура данных в базе данных Firebase Realtime,

enter image description here

Если у меня есть 100kb файл внутри вышеуказанной ссылки, скажем, val ref = FirebaseDatabase.getInstance().getReference("Groups") Если я вызываю `ref.addValueEventListener (object: ValueEventListener {

        override fun onCancelled(p0: DatabaseError) {
        }

        override fun onDataChange(p0: DataSnapshot) {
           // access getvalue here
        }
    })

`

Я получаю снимок данных внутри ссылка в виде p0.

Вопрос-1 Будет ли в этом конкретном снимке все доступные данные внутри ссылки (будет ли размер загруженного снимка 100 КБ ?). Если я вырезал inte rnet в первой строке onDataChange, могу ли я получить доступ ко всем данным внутри datasnapshot или данные будут загружены только при вызове команды p0.getValue для onDataChange & datasnapshot как ссылка на данные?

Question-2

В моем коде я поместил ValueEventListener в «Группы», поэтому, если есть одно изменение в активности person2 (либо новое действие добавлены или существующие данные изменены), я дау загрузка всех данных в «Группы», которых я хотел избежать, поскольку группы становятся больше, чем больше данных потребляется. Как эффективно получить данные только от person2, когда данные person2 изменены или добавлены новые действия. Я попытался добавить дочерний прослушиватель событий в «Группы», который ведет себя так же, как ValueEventListener. Я не могу добавить слушателя для каждого человека, так как число людей неизвестно, и это может быть большее число, я не хочу, чтобы в моем коде было так много слушателей. Мой код уже работает, поэтому я не могу даже изменить структуру базы данных.

1 Ответ

1 голос
/ 20 января 2020
  1. Да, моментальный снимок будет содержать все в памяти в тот момент, когда вы получите его в обратном вызове. Вам даже не нужно получать доступ к снимку.

  2. При использовании ValueEventListener, если что-либо в моментальном снимке изменяется, пока прослушиватель подключен, будут переданы только эти изменения. Весь снимок не загружается полностью для каждого изменения дочернего элемента. Однако вам придется написать код, чтобы точно определить, что изменилось в снимке. Это может быть сложно, так как вам придется сравнивать все дочерние значения друг с другом из предыдущего и нового снимка.

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