【发布时间】:2018-07-15 11:22:09
【问题描述】:
最近我从 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”回调之间发生了什么。查询小型集合时不会发生这种情况。以及为什么网络上的查询速度很快但在安卓上却很慢? jsbin链接:http://jsbin.com/fusoxoviwa/1/edit?html,css,js,console,output
【问题讨论】:
-
您很可能会看到将数据传输到您的客户端所需的时间,该时间受设备带宽的限制。但是如果没有看到重现行为的最小代码,就很难说出任何结论。
-
但我在所有三种情况下都收到了 20 份文件,而且文件相似,因此客户收到的数据在所有三种情况下都是相同的。当集合中的文档数量很大时,是否收到了除文档(20)之外的其他数据。我应该展示我查询的方式吗?但是我怎样才能告诉你数据集是不同的呢? @FrankvanPuffelen
-
哦,对,相同数量的文档。抱歉,这里还有点早。 :-) 我还没有测试过“性能仅取决于结果集的大小”。你能设置一个类似jsbin的东西来重现差异,让我看看吗?
-
到目前为止,我只为 android 开发了我的应用程序,但我不知道如何使用我的 firebase 项目设置 jsbin。我们可以进行团队查看器会话,以便您查看并检查差异。如果只能用jsbin查,我可能需要一段时间才能熟悉。 @FrankvanPuffelen
-
是的,我确实从正在查询子集的客户端编写了所有这些集合。我从设置中清除了应用程序数据,瞧,它加载得非常快。太感谢了 ???? @FrankvanPuffelen
标签: firebase google-cloud-firestore