gpt4 book ai didi

java - 使用 Firebase 实时数据库的 SearchView 需要很长时间才能提供结果,而且价格昂贵

转载 作者:行者123 更新时间:2023-12-02 10:52:15 26 4
gpt4 key购买 nike

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

我的数据库中有超过 7000 个用户,使用此搜索 View 需要 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 的网络才能完成,对于简单的文本查询来说,这需要大量的网络使用。

See network usage here

谢谢

最佳答案

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

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

{
"rules": {
"users": {
".indexOn": "email"
}
}
}

有关此主题的更多信息,请参阅 Firebase documentation on indexing data .

关于java - 使用 Firebase 实时数据库的 SearchView 需要很长时间才能提供结果,而且价格昂贵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52078639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com