具有400个文档的Firestore写批处理需要花费几分钟才能完成

时间:2018-08-22 18:32:18

标签: android google-cloud-firestore

我在Android上使用Firestore数据库,发现当我批量写入300-400项(但低于500的限制)时,它可能需要很长时间才能完成,并且成功侦听器需要启动(即3-5分钟)。有时候,听众根本没有反应。

在后一种情况下(当侦听器不响应时),不会调用OnSuccess或OnFailure侦听器。我正在检查日志。 感觉提交像卡在某个地方一样?

我写的文档是关于POJO的。每个POJO /文档都有大约60个索引。索引数量可能是问题吗? 这些文档嵌套在一个子集合中。

这是我的代码:

 for (int i = 0; i < listOfPojos.size(); i++) {

            Pojo pojo= listOfPojos.get(i);


            //set/create the document in subcollection. Use its date as name.
            DocumentReference document = docRef.collection(pojo.getDevice_id()).document(pojo.getDate().toString());
            batch.set(document, pojo);
        }


batch.commit().addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {

           //do stuff
           //log here doesn't kick in


        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {

         //do stuff
        //log here doesn't kick in

        }
    });

我已经搜索了很多论坛,但没有发现有关此问题的问题。希望有人可以指出我做错了什么方向吗?

1 个答案:

答案 0 :(得分:0)

很抱歉自己发布了一个答案,但我只是想出了一些办法。

拥有20批20个文档比批处理400次写入要快得多。

我不确定这是否仅对我而言,但较小的写入批处理似乎比一个大批处理快几倍,即使该批处理明显处于限制之内。

因此,我的解决方案是使每批写入的文件数量上限为20个,而现在,它的工作速度要快得多(尽管我仍然需要20秒才能写入400个文件)。

我将保留这个问题,它可能会对某人有所帮助。或者,也许更了解Firestore的人可以发出声音并确认/驳斥我的看法。