我正在 Firebase Android 中开发一个聊天基础应用程序。我有 2 种方法可以获得相同的结果,但无法检测到哪一种性能更好。需要以下帮助。
数据库结构:
Firebase -
- User
- user id
- name
- DOB
- userId
我需要获取所选密钥的用户信息。因此,有两种方法如下:
创建 Firebase 数据库引用,直到用户 ID,并向其添加事件侦听器:
database.child("Users").child(userCurrent.getUserId()).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { } @Override public void onCancelled(DatabaseError databaseError) { } });
创建一个 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
?
查询是否可以创建对用户对象的精确引用。在这种情况下,查询是完全不必要的,当然性能会更差。
第二个选项不会获取 Users 节点上的每个用户,它只会执行查询并返回您要查找的用户。
此外,如果您不想侦听节点上的每个更改,我建议您使用 addListenerForSingleValueEvent()
,它只会读取一次值。