第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

getChildrenCount() 如何在后臺工作?

getChildrenCount() 如何在后臺工作?

catspeake 2021-07-20 17:14:38
在我的數(shù)據(jù)庫中,我可以說超過 5000 個用戶,現(xiàn)在如果我getChildrenCount()在主父節(jié)點中使用我有多少人我知道 getChildrenCount 返回一個包含父級內(nèi)子級數(shù)量的 long ,但是,這如何影響性能?幾個月前,我制作了一個應(yīng)用程序來管理用戶,比從 Web 控制臺更有效地管理用戶,因為頁面變得靜態(tài)并且用戶在增長。現(xiàn)在,我想知道是否每次我請求用戶數(shù)量時,應(yīng)用程序都會遍歷 5000 多個用戶并為每個用戶計數(shù),所以我在浪費閱讀資源。我的問題:是否getChildrenCount()將最新檢索到的用戶數(shù)量存儲在某處?每次我運行我的應(yīng)用程序以計算每個孩子的 += 時是否getChildrenCount()執(zhí)行?我認為這樣做的最佳實踐是運行 getChildrenCount 一次,然后將這些用戶存儲在一個節(jié)點中userQuantity = 5000,然后每次有新用戶進入(帶有交易)時向該節(jié)點添加 1,所以在我的應(yīng)用程序管理器中,我只是查詢單個節(jié)點獲取數(shù)量,比再次遍歷所有父節(jié)點獲取用戶更有效
查看完整描述

1 回答

?
慕娘9325324

TA貢獻1783條經(jīng)驗 獲得超4個贊

當您使用 DataSnapshot 的getChildrenCount()方法時,并不意味著您正在遍歷整個DataSnapshot對象。相反,如果您正在使用 DataSnapshot 的getChildren()方法,那么您正是在這樣做。讓我們舉個例子,假設(shè)您有一個名為的節(jié)點users,如您所說,擁有超過 5000 個用戶。


DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

DatabaseReference usersRef = rootRef.child("users");

ValueEventListener valueEventListener = new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

        long numberOfUsers = dataSnapshot.getChildrenCount(); // Count the number of users


        //This is called iteration

        for(DataSnapshot ds : dataSnapshot.getChildren()) {

            // Get user object on every iteration

        }

    }


    @Override

    public void onCancelled(@NonNull DatabaseError databaseError) {}

};

usersRef.addListenerForSingleValueEvent(valueEventListener);

由于 Firebase 數(shù)據(jù)庫中的每個節(jié)點都是Map,因此DataSnapshot也可以稱為Map。


DataSnapshot 實例包含來自 Firebase 數(shù)據(jù)庫位置的數(shù)據(jù)。任何時候讀取數(shù)據(jù)庫數(shù)據(jù)時,都會以 DataSnapshot 的形式接收數(shù)據(jù)。


因此,如果您想將DataSnapshot對象強制轉(zhuǎn)換為 a Map,則以下代碼行將完全正常工作:


Map<String, Object> map = (Map<String, Object>) dataSnapshot;

所以調(diào)用getChildrenCount()一個DataSnapshot對象就像調(diào)用 a 的size()方法Map,它在內(nèi)部計算它包含的對象的數(shù)量。


我在浪費閱讀資源


這適用于新的 Cloud Firestore 數(shù)據(jù)庫,根據(jù)您對 Firestore 數(shù)據(jù)庫執(zhí)行的 CRUD 操作數(shù)向您收費。如果您有興趣,您可以通過這種方式計算 Cloud Firestore 中某個集合下的文檔數(shù)量。如您所見,除了經(jīng)典的計數(shù)操作之外+=,我們還有task.getResult().size(). 我還提到存儲計數(shù)器的最佳做法是將它們存儲在 Firebase 實時數(shù)據(jù)庫中。所以在我看來,繼續(xù)這樣做并將它們分開存儲。


如果您認為您的應(yīng)用程序會增長得非??欤硪环N方法是在每次從節(jié)點添加或刪除用戶時使用Cloud Functions更新用戶計數(shù)器users。這種技術(shù)非常適用于大型數(shù)據(jù)集。


并回答您的問題:


getChildrenCount() 是否將最新檢索到的用戶數(shù)量存儲在某處?每次我運行我的應(yīng)用程序以計算每個孩子的 += 時,getChildrenCount() 是否執(zhí)行?


如果您認為最新檢索到的號碼以某種方式存儲在磁盤/內(nèi)存中,則不會。每次打開應(yīng)用程序時,getChildrenCount()都會調(diào)用方法來獲取最新的用戶數(shù)。如果您想實時獲得該數(shù)字,那么您應(yīng)該在users參考上附加一個偵聽器。


查看完整回答
反對 回復 2021-07-23
  • 1 回答
  • 0 關(guān)注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號