一次向Firestore中添加大量文档(例如1000多个文档)时,应用程序挂起

时间:2020-08-19 16:38:33

标签: swift firebase google-cloud-firestore

我正在尝试允许用户从客户端向Firestore大量添加一堆文档。当文件不多但工作量很大(例如1000多个文件)时,它可以正常工作,它会添加所有文件然后挂起。如果我关闭然后重新打开该应用程序,则会看到所有文档均已根据需要添加。

我正在使用以下命令逐个添加每个文档:

self.collection.document(noteID).setData(record.dictionary)

是否有原因为什么在大量添加一堆文档后将其挂起,但在较小的文档集上可以正常工作?有没有一种方法可以向Firestore批量添加一堆文档,以使它们不会挂起?

1 个答案:

答案 0 :(得分:2)

之所以发生这种情况,是因为每次写入都会生成一个需要执行的事务,并且您的应用会在等待每个事务响应之前挂起。

一次写入大量文档,官方文档中的建议是使用Batch Writes

仅考虑每批可以处理tpo 500次写操作。

要在批处理写入中添加数据,您可以这样做:

let batch = self.batch()

//set Documents to add 
let doc1 = self.collection(<COLLECTION>).document(noteID)
batch.setData(record.dictionary, forDocument: doc1)

//commit the batch
batch.commit() { err in
    if let err = err {
        print("Error writing batch \(err)")
    } else {
        print("Batch write succeeded.")
    }
}