Мы используем mongo (самодостаточный, а не управляемый сервис) в качестве хранилища данных, но наш объем данных слишком велик для обработки в mongo.Мы собираемся перейти на службу больших таблиц Google, но теперь у нас есть проблема: мы должны сделать одноразовый экспорт 65 миллионов записей (~ 200 ГБ) из одной коллекции Монго.Мы также хотим сделать это за пару часов, чтобы уменьшить объем данных, которые будут обновлены за это время.
Я не очень обеспокоен записью в большую таблицу, так как она показалась довольно быстрой,легко распараллелить, и на самом деле предназначен для обработки такого большого количества данных.Сложная часть - чтение из монго.
Что мы пробовали: Запустить запрос в узле (без сортировок / фильтров), выполнить вывод через преобразование, а затем загрузить в большую таблицу.Как оказалось, такой подход оказался крайне наивным.Мы взорвали процессор на коробке без очевидных узких мест, однако, даже если мы пропустим всю часть записи, часть чтения все еще будет очень медленной.
Следующие варианты все вращались вокруг общей идеи «сделатьполный дамп базы данных, разбить его на куски четного размера, обработать параллельно. '
Использовать mongoexport.Это все еще очень медленно, но существенно лучше, чем запрос базы данных.
Использовать mongodump.Это было быстрее, чем монгоэкспорт, но все же на медленной стороне.Кроме того, я не знаю, как легко разобрать файлы.
У меня возникли трудности с определением узких мест.Процессор обычно высокий, но не максимально (за исключением наивного подхода, упомянутого выше).Как и ожидалось, дисковый ввод-вывод также обычно очень высок.Я также не думаю, что смогу контролировать это, потому что это в облаке (GCP).
Я в основном пытаюсь найти здесь другие идеи / подходы, хотя я полностью осознаю, что это может просто не бытьвозможно, но я хотел бы получить второе мнение, прежде чем сделать такой вывод.