【问题标题】:Firebase Android: Which one is a better way to query in for selected node?Firebase Android:哪个是查询选定节点的更好方法?
【发布时间】:2017-01-20 16:07:53
【问题描述】:

我正在 Firebase Android 中开发一个聊天基础应用。我有两种方法可以获得相同的结果,但无法检测出哪一种性能更好。在关注方面需要帮助。

数据库结构:

Firebase - 
    - User
          - user id
                - name
                - DOB
                - userId

我需要获取所选密钥的用户信息。所以有以下两种方式:

  1. 创建 Firebase 数据库引用直到 userId 并向其添加事件侦听器:

    database.child("Users").child(userCurrent.getUserId()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
    
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
    
        }
    });
    
  2. 在用户节点之前创建一个 Firebase 数据库引用,然后尝试使用 equalTo 查询键找到确切的用户:

    database.child("Users").orderByKey().equalTo(userCurrent.getUserId()).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
    
                }
    
                @Override
                public void onCancelled(DatabaseError databaseError) {
    
                }
            });
    

第二个选项是否会从User 节点获取每个用户,然后查询equalTo

【问题讨论】:

标签: android performance firebase firebase-realtime-database


【解决方案1】:

您不需要查询是否可以创建对用户对象的精确引用。在这种情况下,查询是完全没有必要的,当然性能更差。

第二个选项不会获取用户节点上的每个用户,它只会执行查询并返回您要查找的用户。

另外,如果你不想监听节点上的每一个变化,我建议使用addListenerForSingleValueEvent(),它只会读取一次值。

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 2018-01-07
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2012-10-13
    • 1970-01-01
    相关资源
    最近更新 更多