我正在尝试允许用户从客户端向Firestore大量添加一堆文档。当文件不多但工作量很大(例如1000多个文件)时,它可以正常工作,它会添加所有文件然后挂起。如果我关闭然后重新打开该应用程序,则会看到所有文档均已根据需要添加。
我正在使用以下命令逐个添加每个文档:
self.collection.document(noteID).setData(record.dictionary)
是否有原因为什么在大量添加一堆文档后将其挂起,但在较小的文档集上可以正常工作?有没有一种方法可以向Firestore批量添加一堆文档,以使它们不会挂起?
答案 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.")
}
}