当前位置: 首页 > 面试题库 >

getChildrenCount()如何在后台工作?

燕博文
2023-03-14
问题内容

在我的数据库中,我可以说有5000多个用户,现在,如果我getChildrenCount()在主父节点中使用来获得多少人,

我知道getChildrenCount会返回一个带有父级内部子级数量的long,但这会如何影响性能?

几个月前,我制作了一个应用程序来管理用户,该应用程序比通过Web控制台更有效地管理用户,因为页面变得静态并且用户不断增长。

现在,我想知道是否每当我请求用户数量时,该应用程序就会循环遍历5000+个用户,并对每个用户进行计数,因此我在浪费读取资源。

我的问题:

是否getChildrenCount()将最新检索到的用户数量存储在某个地方?
getChildrenCount()执行每个我跑我的应用程序中的每个孩子+ =算时间?

我认为执行此操作的最佳做​​法是运行一次getChildrenCount,然后将这些用户存储在一个节点中userQuantity = 5000,然后说一次,然后每次有新用户进入(带有事务处理)时,将该节点添加1,所以我只是在查询单个节点以获得数量,它比再次遍历所有父节点来获得用户的效率更高


问题答案:

使用DataSnapshot的getChildrenCount()方法时,并不表示您正在遍历整个DataSnapshot对象。相反,如果您使用的是DataSnapshot的getChildren()方法,那么您正是在这样做。让我们举个例子,假设您有一个名为的节点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数据库中的每个节点都是a
Map,因此DataSnapshot也可以称为a
Map

DataSnapshot实例包含Firebase数据库位置中的数据。每次读取数据库数据时,您都会以DataSnapshot的形式接收数据。

因此,如果要将DataSnapshot对象强制转换为Map,则以下代码行将非常好:

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

因此调用getChildrenCount()一个对DataSnapshot对象就像调用size()一个方法Map,它在内部统计它所包含的对象的数量。

我在浪费阅读资源

对于新的Cloud Firestore数据库,此功能可用,其中根据您对Firestore数据库执行的CRUD操作数向您收费。如果您有兴趣,可以通过这种方法计算CloudFirestore中集合下的文档数。如您所见,除了经典的计数操作外+=,我们还有task.getResult().size()。我还提到过,存储计数器的最佳实践是将它们存储在Firebase实时数据库中。因此,我认为,请继续进行此操作并将其分别存储。

如果您认为应用程序将快速增长,那么另一种方法是,每次在您的节点中添加或删除用户时,都可以使用Cloud
Functions更新用户计数器users。该技术适用于大型数据集。

并回答您的问题:

getChildrenCount()是否将我的用户的最新检索数量存储在某个地方?每次我运行我的应用以在每个孩子中用+
=进行计数时,getChildrenCount()是否都会执行?

如果您认为最新检索到的号码以某种方式存储在磁盘/内存中,则不会。每次打开应用程序时,getChildrenCount()都会调用方法来获取最新的用户数。如果要实时获得该号码,则应在users参考上附加一个侦听器。



 类似资料:
  • 本文向大家介绍Node.js如何在后台工作-简要分析,包括了Node.js如何在后台工作-简要分析的使用技巧和注意事项,需要的朋友参考一下 Node.js仅使用一个JavaScript执行线程。 问题是-Node.js如何处理多个http或任何其他请求,并且在性能,安全性方面也可能存在疑问? Node.js在应用程序启动时启动事件循环并使用它处理回调函数.Node.js维护工作池。长时间运行的操作

  • 问题内容: 在下面的示例中,我在绿色背景上绘制了一个自定义,但是它没有出现。为什么会这样? 问题答案: JComponent不会绘制其背景。您可以自己绘制,也可以使用可以绘制背景的JPanel

  • 7.1 ABP后台服务 - 后台作业和后台工人 7.1.1 简介 ABP提供了后台作业和后台工人,来执行应用程序中的后台线程的某些任务。 7.1.2 后台作业 由于各种各样的原因,你需要后台作业以队列和持久化的方式来排队执行某些任务。 例如: 用户等待执行一个长时任务。例如:某个用户按下了报表按钮生成一个需要长时间等待的报表。你添加这个工作到队列中,当报表生成完毕后,发送报表结果到该用户的邮箱。

  • 从所有的搜索和阅读中可以清楚地看出,我需要调用platform.runlater()来更改GUI。似乎我还需要使用Runnable接口。也许我也应该使用任务? 但我不知道该怎么用。另外,我不确定我该把他们放到哪一个班。我是JavaFX的超级新手。 我的试用JavaFX项目只有一个Label和一个TextField。标签包含一个问题,而TextField用于回答问题。足够简单。 我遇到了这个问题:

  • 我需要帮助。Firebase通知在后台不工作。这是我的代码:

  • 我是一名前端开发人员。后端开发人员离职了。因此,我还将处理后端部分。我没有任何后端开发经验。我正在分析后端代码。我有几个问题。我想澄清我的概念。 我已经附加了Java代码文件。 1-这些进口产品的用途是什么 2-为什么在声明每个变量之前先放置@JsonProperty? 3-为什么我们在少数几个方法中使用类名?例如: 4-有什么用: 5-有什么用: 6-hashCode()方法实际上在做什么? 请