#swift #firebase #google-cloud-firestore
#swift #firebase #google-облако-firestore
Вопрос:
Я пытаюсь разрешить пользователю массово добавлять кучу документов в Firestore со стороны клиента. Это работает нормально, когда документов не так много, но когда их тонна (например, более 1000 документов), оно добавляет все документы, а затем просто зависает. Если я закрою, а затем снова открою приложение, я увижу, что все документы были добавлены по желанию.
Я добавляю каждый документ один за другим, используя следующее:
self.collection.document(noteID).setData(record.dictionary)
Есть ли причина, по которой это зависает после массового добавления кучи документов, но отлично работает на небольших наборах? Есть ли способ пакетно добавить кучу документов в Firestore, чтобы они не зависали?
Ответ №1:
Это происходит потому, что каждая запись генерирует транзакцию, которую необходимо выполнить, и ваше приложение зависает, ожидая ответа от каждой транзакции.
чтобы записать тонны документов за одно действие, в официальной документации рекомендуется использовать пакетную запись.
Просто примите во внимание, что каждый пакет может занимать до 500 записей tpo.
чтобы добавить данные при пакетной записи, вы можете сделать это следующим образом:
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.")
}
}