Бэкап с mongoexport или mongodump?


9

Для производственного резервного копирования MongoDB рекомендует mongodump вместо mongoexport для точности данных. Тем не менее, мне нужно «очистить» данные от базы данных MongoDB, прежде чем выполнять их резервное копирование. Я не знаю ни о каких параметрах очистки данных на стороне сервера, кроме mongoexport . Два вопроса:

  1. Доступен ли mongoexport кэш MongoDB в оперативной памяти? Изменит ли это рабочий набор в оперативной памяти, как это делает mongodump ?
  2. Команда mongodump имеет эту опцию --query . «Предоставляет документ JSON в виде запроса, который необязательно ограничивает документы, включенные в вывод mongodump». Требуется ли запрос для исключения определенных полей в документе?

1
Похоже, вы ищете экспорт, а не резервную копию. Если вы экспортируете только подмножество полей, вероятно, вы не сможете восстановить это и иметь полностью работоспособную базу данных. Есть еще несколько вариантов: зашифруйте любые поля с помощью конфиденциальных данных (с помощью кода приложения), чтобы вы могли сделать обычное mongodumpрезервное копирование или снимок из файловой системы, или написать собственный экспорт, если mongoexportне получается то, что вам нужно. Любые инструменты или программы, которые читают данные, mongodмогут изменить ваш рабочий набор, если ваши данные для экспорта превышают объем оперативной памяти.
Снимки

Спасибо за разъяснение. Шифрование на полях - это то, о чем я не подумал, хорошее предложение.
Говард Ли

Ответы:


6

В ответ на ваш первый вопрос оба инструмента (по умолчанию) просто пройдут по _idиндексу, чтобы извлечь данные, а затем запишут их на диск. Итак, да, оба инструмента будут одинаково влиять на ваш рабочий набор, поэтому я обычно рекомендую запускать их на вторичном устройстве (желательно на скрытом вторичном, если это возможно). Я повторю Стенни в комментариях и рекомендую другие способы резервного копирования, если вы имеете дело с большими объемами данных.

Что касается второго вопроса, я предполагаю, что вы ищете mongodumpэквивалент --fieldsопции, из которой mongoexportможно вывести только определенные поля. Вариант запроса может быть использован для фильтрации результатов, но он не может быть использован с выступом (для выбора полей , возвращаемых) - это запрос функции , которая отслеживается в TOOLS-28 , но пока не планируется. Как также упоминал Стенни, другой вариант здесь - это написать собственный экспортер, который соответствует вашим потребностям (и снова, я бы по-прежнему рекомендовал запускать его против вторичного устройства для защиты вашего рабочего набора).


6
  1. (извините, не знаю)

  2. --query будет выбирать или исключать целые документы, а не поля.

Это было бы хорошей идеей, хотя:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodump использует структуру файла bson и сохраняет типы данных . Mongoexport будет терять тип данных значений . Например, NumberLong ("1431677405876") будет преобразован в 1431677405876. Вот почему рекомендуется использовать mongodump, если вам необходимо выполнить импорт обратно в MongoDB.

Спасибо за ваше разъяснение по --query и пример по типу данных потерь mongoexport.
Говард Ли

0

Mongoexport на самом деле сохраняет типы, но делает данные несовместимыми. Если вы экспортируете поле с помощью Ints и Longs, оно экспортирует его как объекты Numbers и JSON соответственно, что может усложнить его в будущем.

«Строгий режим. Представления строгого режима типов BSON соответствуют JSON RFC. Любой анализатор JSON может анализировать эти представления строгого режима как пары ключ / значение; однако только внутренний анализатор JSON MongoDB распознает информацию о типах, передаваемую форматом».

https://docs.mongodb.com/manual/reference/mongodb-extended-json/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.