为了账号安全,请及时绑定邮箱和手机立即绑定

带有 Firebase 实时数据库的 SearchView 需要很长时间才能获得结果,而且价格昂贵

带有 Firebase 实时数据库的 SearchView 需要很长时间才能获得结果,而且价格昂贵

犯罪嫌疑人X 2021-08-19 18:24:43
我正在尝试通过我的应用程序中的搜索视图通过邮件获取特定用户。我的数据库中有 7000 多个用户,使用此搜索视图需要 5 到 10 或 15 秒来过滤和获取数据@Overridepublic boolean onQueryTextSubmit(String s) {    searchQuery.startAt(s).endAt(s+"\uf8ff").limitToFirst(3).addListenerForSingleValueEvent(new ValueEventListener() {        @Override        public void onDataChange(DataSnapshot dataSnapshot) {            for(DataSnapshot snapshot : dataSnapshot.getChildren()){                UserPojo user = snapshot.getValue(UserPojo.class);                Log.i(TAG, "onDataChange: " + user.getEmail());            }        }        @Override        public void onCancelled(DatabaseError databaseError) {        }    });    return false;}问题是过滤数据所需的时间(从 5 到 15 秒)有没有用更好的查询更快地过滤?还是我需要首先获取所有数据,在本地存储,然后在客户端对其进行过滤?关于如何解决这个问题的任何建议?我还注意到分析器每次搜索都需要 4 到 8mb 的网络才能完成,这只是一个简单的文本查询的大量网络使用。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

听起来您可能没有在要搜索的字段上定义索引。如果没有索引,则无法在服务器上进行过滤。所以在这种情况下,服务器将所有数据发送给客户端,客户端进行过滤。这将解释为什么它花费的时间比您预期的要长:它必须将所有 7000 个用户配置文件发送到客户端。


如果这确实是问题的原因,您可以通过在规则文件中添加索引来修复它。假设您正在对名为users的属性上调用的列表进行排序/过滤email,您可以通过以下方式执行此操作:


{

  "rules": {

    "users": {

      ".indexOn": "email"

    }

  }

}


查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信