【问题标题】:Android Firebase: Compare values on device or use `equalTo` method?Android Firebase:比较设备上的值还是使用`equalTo`方法?
【发布时间】:2021-09-22 15:57:44
【问题描述】:

我有一个用户 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 个用户也是如此。

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


那么哪个选项更快?

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

【问题讨论】:

  • 你能说明你是如何初始化user_reference的吗?以及数据库中该路径的 JSON 的 sn-p(请作为文本,没有屏幕截图)。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。

标签: android firebase firebase-realtime-database


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多