Утилита 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] .
Второй подход позволяет вам указать num разделов, и в некоторых случаях из-за этого может работать быстрее, верно?
blockquote>Не совсем. Оба подхода позволяют указать количество разделов - в первом случае через
spark.sql.shuffle.partitions
spark.conf.set("spark.sql.shuffle.partitions", parallelism)
Однако второй подход по своей сути менее эффективен, если дубликаты являются общими, поскольку он тасует сначала, а потом сокращает, пропуская сокращение на стороне карты (другими словами, это еще одна группировка по ключу). Если дубликаты редки, это не будет иметь большого значения.
В примечании стороны
Dataset
уже представленыdropDuplicates
варианты , которые принимают набор столбцов, иfirst
/last
не имеет особого смысла здесь (см. Обсуждение в Как выбрать первый ряд каждой группы? ).