Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 根据Firestore中的数据集进行查询_Firebase_Google Cloud Firestore - Fatal编程技术网

Firebase 根据Firestore中的数据集进行查询

Firebase 根据Firestore中的数据集进行查询,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,最近,我从firebase实时数据库迁移到firebase firestore,因为它说查询的速度取决于从集合中检索的数据集的大小(文档数),而不是集合中的文档数。我检查了100、5000和10000个集合中不同数量的文档,在一次查询中检索了20个文档。我看到的是,当我从集合中的100、5000和10000个文档移动时,查询的结果时间增加了。为什么会这样? 是因为firestore处于测试阶段吗 在android上查询(包含21000个文档的集合) 查询上述集合参考时android monito

最近,我从firebase实时数据库迁移到firebase firestore,因为它说查询的速度取决于从集合中检索的数据集的大小(文档数),而不是集合中的文档数。我检查了100、5000和10000个集合中不同数量的文档,在一次查询中检索了20个文档。我看到的是,当我从集合中的100、5000和10000个文档移动时,查询的结果时间增加了。为什么会这样? 是因为firestore处于测试阶段吗

在android上查询(包含21000个文档的集合)

查询上述集合参考时android monitor的图像:

通过查看堆,您可以看到查询花费了将近一分钟的时间(一分钟后内存变化不大,保持不变,一分钟后网络部分突然出现峰值,您可以由此推断调用了onComplete)。调用“get()”函数和“onComplete”回调之间发生了什么。查询小集合时不会发生这种情况。为什么在android上,网络上的查询速度快而慢?
链接到jsbin:

您是否从同一个Android客户端编写了这些集合,该客户端现在正在从这些集合中加载文档的子集?如果是的话,这就可以解释了

在这种情况下,客户端缓存将包含有关所有文档的信息,而您的应用程序正在花时间快速浏览这些信息

如果您在“干净的客户端”上进行尝试,它将不会缓存任何信息,它应该只在客户端正在请求(或以前已请求)的文档上花费时间


在Firestore退出beta版之前,您当前看到的行为应该会有所改善,因为索引将变得更高效,但也因为它将获得某种形式的GC。

您很可能看到将数据传输到客户端所需的时间,这受到设备带宽的限制。但如果没有看到复制行为的最小代码,很难说有什么结论。但我在所有三种情况下都收到了20份文件,而且这些文件都是相似的,因此客户收到的数据在所有三种情况下都是相同的。当集合中的文档数量较大时,是否会收到除文档(20)以外的其他数据。我应该展示我质疑的方式吗?但是我如何向您展示数据集是不同的呢@FrankvanPuffelenOh对,相同数量的文件。对不起,现在还早一点。:-)我还没有对“性能只取决于结果集的大小”进行过太多测试。你能不能设置一个类似jsbin的东西来重现这种差异,这样我就可以看一看了?到目前为止,我只为android开发了我的应用程序,我不知道如何在firebase项目中设置jsbin。我们可以进行teamviewer会话,以便您可以查看并检查差异。如果您只能使用jsbin进行检查,我可能需要一些时间来熟悉它@FrankvanPuffelenYes我确实从我正在查询子集的客户端编写了所有这些集合。我从设置中清除了应用程序数据,瞧,它加载得很快。多谢各位
   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();

                        }

                    });