Группа SparkBy против перераспределения плюс mapPartitions

Утилита mongodump создает двоичный экспорт данных из MongoDB и сохраняет определения индексов и параметры сбора в metadata.json, связанные с каждой сбрасываемой базой данных. Данные индекса не занимают сколько-нибудь значительного места в вашей резервной копии и обычно будут использоваться mongorestore для повторного обеспечения индексов после того, как каждый из данных для каждой коллекции будет импортирован из дампа.

Если вы хотите во избежание создания каких-либо новых вторичных индексов после завершения восстановления mongorestore имеет опцию --noIndexRestore .

Примечание: индекс по умолчанию _id

инкрементно восстанавливает mongo db без восстановления индексов?

blockquote>

Параметр для --noIndexRestore применяется независимо от того, вы или нет восстановление в существующую базу данных. Если вы mongorestore в существующей базе данных с индексами, использующими параметр --noIndexRestore, новые индексы не будут добавлены, но существующие индексы будут по-прежнему обновляться по мере ввода данных.

Инкрементное резервное копирование & amp; восстановление действительно представляет собой отдельный вопрос, если у вас нет упрощенного варианта использования: вставка новых документов из последовательных дампов.

Как и в MongoDB 2.6, утилита mongorestore вставляет только документы (т. е. нет опций для обновлений / upserts). Вы можете использовать mongorestore для вставки нескольких дампов в существующую коллекцию, но любые документы, вызывающие повторяющиеся исключения ключей (например, _id), будут пропущены.

Обычно я ожидал, что инкрементное резервное копирование & amp; восстановление подразумевает дельта изменений (все вставки / обновления / удаления с момента предыдущего резервного копирования) и возможность повторного применения их к более старой копии одних и тех же данных. Чтобы получить инкрементное резервное копирование, вам понадобится история изменений данных, которые в случае MongoDB будут предоставлены журналом операций реплики [o3] .

1
задан user10465355 16 January 2019 в 14:43
поделиться

1 ответ

Второй подход позволяет вам указать num разделов, и в некоторых случаях из-за этого может работать быстрее, верно?

Не совсем. Оба подхода позволяют указать количество разделов - в первом случае через spark.sql.shuffle.partitions

spark.conf.set("spark.sql.shuffle.partitions", parallelism)

Однако второй подход по своей сути менее эффективен, если дубликаты являются общими, поскольку он тасует сначала, а потом сокращает, пропуская сокращение на стороне карты (другими словами, это еще одна группировка по ключу). Если дубликаты редки, это не будет иметь большого значения.

В примечании стороны Dataset уже представлены dropDuplicates варианты , которые принимают набор столбцов, и first / last не имеет особого смысла здесь (см. Обсуждение в Как выбрать первый ряд каждой группы? ).

0
ответ дан user10465355 16 January 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: