我在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
}
});
我已经搜索了很多论坛,但没有发现有关此问题的问题。希望有人可以指出我做错了什么方向吗?
答案 0 :(得分:0)
很抱歉自己发布了一个答案,但我只是想出了一些办法。
拥有20批20个文档比批处理400次写入要快得多。
我不确定这是否仅对我而言,但较小的写入批处理似乎比一个大批处理快几倍,即使该批处理明显处于限制之内。
因此,我的解决方案是使每批写入的文件数量上限为20个,而现在,它的工作速度要快得多(尽管我仍然需要20秒才能写入400个文件)。
我将保留这个问题,它可能会对某人有所帮助。或者,也许更了解Firestore的人可以发出声音并确认/驳斥我的看法。