Мы используем облачную функцию для удаления всех данных старше 6 месяцев из нашего пожарного депо. К сожалению, это заканчивается тайм-аутом. Мы создали код на основе: https://firebase.google.com/docs/firestore/manage-data/delete-data
Мы извлекаем коллекцию, которую нам нужно l oop, используя listDocuments()
. Мы не можем использовать get()
в нашем случае, так как он не вернет все документы. У нас есть документы, которые были созданы без явного создания пути к нему.
Это было наше первое препятствие на самом деле, когда облачная функция достигла таймаута для этой функции. Обновление нашей облачной функции до последней версии (изменения кода) [https://github.com/googleapis/nodejs-firestore/issues/825] и увеличение тайм-аута до 300 секунд помогли решить проблему.
Однако сейчас мы достигли тайм-аутов на действия по удалению. Мы заметили, что удаление в больших коллекциях происходит очень медленно, например, попытка удалить 10 документов в коллекции из 2000 документов медленнее, чем удаление 200 документов из коллекции из 210 документов. Каждое из этих удалений может занять от нескольких миллисекунд (для небольших коллекций) до почти 3 секунд (для больших коллекций). Потому что пакетные действия ограничены макс. из 500 [https://firebase.google.com/docs/firestore/manage-data/transactions] , в итоге мы получим несколько 3-секундных удалений, которые в конечном итоге достигнут тайм-аута.
Шаги, которые мы предприняли для решения проблемы:
- Просмотрите документацию firebase еще раз и проверьте stackoverflow для возможных решений, хотя, кажется, нет поста, имеющего решение для этого
- Contact firebase, но они не помогли, поскольку упомянули, что это было вне их области поддержки и что нам нужно было проверить stackoverflow.
- Обновлена облачная функция для использования последних версий (и изменений кода), которая установила тайм-аут на
listDocuments()
- Увеличил тайм-аут до 540 секунд, что является максимумом, который мы могли бы установить на [https://cloud.google.com/functions/docs/concepts/exec#timeout]