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

我正在尝试通过我的应用程序中的搜索视图通过邮件获取特定用户。


我的数据库中有 7000 多个用户,使用此搜索视图需要 5 到 10 或 15 秒来过滤和获取数据


@Override

public 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 的网络才能完成,这只是一个简单的文本查询的大量网络使用。

http://img1.mukewang.com/611e31ae0001206618470248.jpg

犯罪嫌疑人X
浏览 136回答 1
1回答

慕的地10843

听起来您可能没有在要搜索的字段上定义索引。如果没有索引,则无法在服务器上进行过滤。所以在这种情况下,服务器将所有数据发送给客户端,客户端进行过滤。这将解释为什么它花费的时间比您预期的要长:它必须将所有 7000 个用户配置文件发送到客户端。如果这确实是问题的原因,您可以通过在规则文件中添加索引来修复它。假设您正在对名为users的属性上调用的列表进行排序/过滤email,您可以通过以下方式执行此操作:{  "rules": {    "users": {      ".indexOn": "email"    }  }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java