База данных Firebase в режиме реального времени очень высокая загрузка - PullRequest
1 голос
/ 03 октября 2019

Следующий код тратит 1 МБ на извлечение данных из базы данных. Это нормально? Что я могу сделать, чтобы уменьшить его? Потому что это слишком дорого. Я думаю, что есть лучший способ. Кто-нибудь может помочь?

    mDatabaseRef.child("FalMetinleri").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        long KapasiteGiris= dataSnapshot.child("giris").child(finalKategoriCinsiyet).child(finalKategoriGiris).getChildrenCount();
        long KapasiteKarsilama= dataSnapshot.child("karsilama").getChildrenCount();
        long KapasiteAskDurumu1= dataSnapshot.child("askDurumu").child(finalKategoriCinsiyet).child(finalKategoriAskdurumu).getChildrenCount();
        long KapasiteAskDurumu2= dataSnapshot.child("askDurumu2").child(finalKategoriCinsiyet).child(finalKategoriAskdurumu).getChildrenCount();
        long KapasiteisDurumu1= dataSnapshot.child("isDurumu").child(finalKategoriCinsiyet).child(finalKategoriMeslek).getChildrenCount();
        long KapasiteisDurumu2= dataSnapshot.child("isDurumu2").child(finalKategoriCinsiyet).child(finalKategoriMeslek).getChildrenCount();
        long KapasiteBitis= dataSnapshot.child("bitis").child(finalKategoriCinsiyet).child(finalKategoriBitis).getChildrenCount();

        kapasite[0] = KapasiteGiris;
        kapasite[1] = KapasiteKarsilama;
        kapasite[2] = KapasiteAskDurumu1;
        kapasite[3] = KapasiteAskDurumu2;
        kapasite[4] = KapasiteisDurumu1;
        kapasite[5] = KapasiteisDurumu2;
        kapasite[6] = KapasiteBitis;

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        dialogFragment.dismissAllowingStateLoss();

   }
});

Вывод:

       KapasiteGiris:8
       KapasiteKarsilama:5
       KapasiteAskDurumu1:4
       KapasiteAskDurumu2:14
       KapasiteisDurumu1:5
       KapasiteisDurumu2:4
       KapasiteBitis:13

CLI отчет:

CLIreport

1 Ответ

1 голос
/ 03 октября 2019

Единственный фрагмент кода, который имеет здесь значение, - это запрос, который присоединяет слушателя:

mDatabaseRef.child("FalMetinleri").addListenerForSingleValueEvent()

Что он делает, это выборку всего под узлом "FalMetinleri". Весь другой код внутри слушателя больше не стоит данных, так как весь снимок этого потомка уже будет в памяти. Похоже, что в этом снимке содержится около 1 МБ данных.

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

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