Как лучше всего выполнять обновления Firebase для больших коллекций через облако? - PullRequest
0 голосов
/ 18 июня 2020

Предполагая, что размер коллекции составляет +100 тыс. Документов, каков наиболее эффективный способ обновления всех документов?

Мы говорим о процессе обновления всей базы данных, где мне нужно прочитать каждую операцию c , добавьте / удалите некоторые поля в зависимости от определенных правил c, затем запишите обновленные поля в do c обратно в коллекцию. И повторите этот процесс для всех документов.

И в идеале я хотел бы иметь возможность делать это в облаке. c Использование моего локального компьютера уже вызывает проблемы с точки зрения того, сколько времени это занимает, и возрастающей нагрузки на память. ограничения (2 ГБ) и ограничение тайм-аута 9 минут, даже при использовании пакетной записи ...

1 Ответ

2 голосов
/ 18 июня 2020

Это определенно можно сделать с помощью облачных функций.

Я не думаю, что вы должны сталкиваться с ограничениями памяти, если только вы не пытаетесь запросить сразу всю коллекцию. Используйте запрос с разбивкой на страницы , чтобы ограничить количество документов, прочитанных за один раз, а затем вместо этого l oop по страницам.

Вариант 1

Один Быстрый способ обойти ограничение времени ожидания - использовать облачную функцию pub / sub trigger . Когда ваша функция приближается к тайм-ауту, просто дайте ей publi sh к своему собственному pub / sub topi c, чтобы она запустилась снова. Но убедитесь, что ваша функция перестает публиковаться, когда больше нет документов для обновления, иначе она застрянет в бесконечном l oop.

Вариант 2

Если вам нужно, чтобы эта задача обновления была выполнена очень быстро, вы можете использовать стратегию «разделяй и властвуй», которая выглядит следующим образом.

[Fn A] = publish = to => [Pub / Sub] = trigger => [Fn B], [Fn B], [Fn B], [Fn B]. . .

Облачная функция A запрашивает коллекцию, используя постраничный запрос со страницами размера N. Publi sh uid первого документа на каждой странице и значение N для pub / sub topi c.

Напишите облачную функцию B, которая запускается этим пабом / подпунктом c. Он прочитает uid документа и номер N из pub / sub. Он будет использовать этот uid документа в качестве отправной точки, а затем обновит следующие N документов. Эта функция будет запускаться много раз параллельно. Один раз для каждой публикации pub / sub из Fn A. Ваш выбор N повлияет на количество экземпляров функции B, которые будут появляться.

...