Резервне копіювання за допомогою 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

Монгоекспорт насправді зберігає типи, але це робить дані непослідовними. Якщо ви експортуєте поле з 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.