首页 > 解决方案 > Android Firebase:比较设备上的值还是使用`equalTo`方法?

问题描述

我有一个用户 ID 列表,我需要获取相应的用户信息。我看到两种方法。

第一的:

user_reference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
            Users users = dataSnapshot.getValue(Users.class);
            
            if (idList.contains(users.getUser_id())) {
                usersList.add(users);
            }
        }
    }
});

第二:

for (int i = 0; i < idList.size(); i++) {
    user_reference.orderByChild("user_id").equalTo(idList.get(i))
                   .addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {
                Users users = dataSnapshot.getValue(Users.class);
                usersList.add(users);
            }
        }
    });
}

第一个似乎效率低下,因为如果我有几千个用户,它会加载每个用户,如果我只需要 5 个用户也是如此。

但是,第二种方法似乎相似,只是比较发生在服务器端。


那么哪个选项更快?

或者这两种选择都不是好方法?那么有没有我没有想到的更好的解决方案?

标签: androidfirebasefirebase-realtime-database

解决方案


第二种选择几乎总是更快,因为带宽通常是影响性能的最大因素。

要从使用服务器端查询中获得性能提升,请务必将索引添加到数据库的安全规则中。如果您忘记这样做,过滤将在 SDK 的客户端完成,它会在您的 logcat 输出中写入警告,告诉您添加索引。


推荐阅读