Загрузка 2 миллионов записей в память для партии - это нормально? - PullRequest
0 голосов
/ 24 сентября 2018

Мне нужно запустить весеннее пакетное задание.Я должен прочитать около 2 миллионов документов из Монго.В документах зафиксировано 15 полей.Они содержат строки, даты и _id.

Мой вопрос: как лучше всего это обработать?Просто сделать в 1 шаг или распространить через много шагов?Какова лучшая практика?Не плохо ли загружать 2 миллиона записей в память?Я знаю, при загрузке записей через Apache Spark, он передает данные, что хорошо.Но я не использую Apache Spark.

1 Ответ

0 голосов
/ 24 сентября 2018

Лучший способ - использовать шаг, ориентированный на чанк.См. Раздел блок-ориентированная обработка в документации.

Загрузка 2 миллионов записей в память - не очень хорошая идея (даже если вам удастся сделать это, добавив больше памяти в JVM) потому что у вас будет одна транзакция для обработки этих 2 миллионов записей.Если ваша работа падает, скажем, после обработки 1 миллиона записей, обработка этой первой половины будет потеряна.Идея состоит в том, чтобы обрабатывать документы порциями и фиксировать транзакции для каждого порции.Этот тип прецессии:

  • эффективен: поскольку он не загружает весь входной набор данных в памяти за один раз
  • надежный: так как сбой задания не требует повторной обработкиуже обработанные документы

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...