最近我已经从firebase实时数据库迁移到firebase firestore,因为它说查询的速度取决于从集合中检索的数据集的大小(文档的数量),而不是取决于数据集中的文档数量。采集。我检查了100,5000和10000集合中不同数量的文档,我在一个查询中检索了20个文档。我看到的是当我从一个集合中的100,5000和10000个文档移动时,查询的结果时间增加了。为什么会这样? 是因为firestore处于测试阶段吗?
查询android(21000个文档的集合)
collectionReference= FirebaseFirestore.getInstance().collection("_countries").document("+91").collection("_classes-exams").document(String.valueOf(mItem)).collection("_profiles").document(mOtherUserUid==null?uid:mOtherUserUid).collection("user_data");
collectionReference.document("_content").collection(articlesOrQuestions)
.orderBy("mTimeStampAsDate", Query.Direction.DESCENDING).limit(20).get().addOnCompleteListener(mCompleteListener)
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
});
查询上述集合引用时android监视器的图像:https://i.stack.imgur.com/QZaVX.jpg
通过查看堆可以看到查询花了差不多一分钟(一分钟后内存没有变化很多并保持不变,1分钟后网络部分突然出现峰值,你可以推断出onComplete是所谓的)。调用' get()'之间发生了什么?功能和' onComplete'打回来。查询小集合时不会发生这种情况。为什么web上的查询速度快但在android上慢? 链接到jsbin:http://jsbin.com/fusoxoviwa/1/edit?html,css,js,console,output
答案 0 :(得分:1)
您是否从同一个Android客户端编写这些集合,而这些客户端现在正在从它们加载一部分文档?如果是这样,那就可以解释。
在这种情况下,客户端缓存将包含有关所有文档的信息,并且您的应用正在花时间浏览这些信息。
如果您尝试使用“干净的客户端”,它将不会缓存任何信息,并且只应将时间花在客户端请求的文档上(或之前已请求过的文档)。
您目前看到的行为应该在Firestore退出测试版之前得到改善,因为索引会变得更有效率,但也因为它会获得某种形式的GC。