Firebase实时数据库下载使用率非常高

jaql4c8m  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(137)

下面的代码花费了1MB从firebase中提取数据。这正常吗?我能做些什么来减少它呢?因为它的开销太大了。我认为有一个更好的方法。有人能帮忙吗?

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报告:

mrwjdhj3

mrwjdhj31#

这里唯一重要的代码是附加监听器的查询:

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

它所做的是获取节点“FalMetinleri”下的所有内容。侦听器中的所有其他代码都不会消耗更多的数据,因为该子节点的整个快照已经在内存中了。看起来该快照中大约有1MB的数据。
如果您不需要该子项的全部内容,则可以单独请求其中的每个嵌套子项。这将需要为每个子项创建一个查询,并为每个子项创建一个新的侦听器。

xmjla07d

xmjla07d2#

如果每个节点内都有大量数据,getChildrenCount()是一个不好的做法。您应该尝试使用firestore。

相关问题