Backup con mongoexport o mongodump?


9

Per il backup di produzione, MongoDB raccomanda mongodump invece di mongoexport per la precisione dei dati. Tuttavia, avrei bisogno di "cancellare" i dati da un database MongoDB prima di eseguirne il backup. Non sono a conoscenza di opzioni di eliminazione dei dati sul lato server diverse da mongoexport . Due domande:

  1. Fa mongoexport accesso MongoDB cache in RAM? Altererebbe il working set nella RAM come fa mongodump ?
  2. Il comando mongodump ha questa opzione --query . "Fornisce un documento JSON come una query che facoltativamente limita i documenti inclusi nell'output di mongodump." È necessaria una query per escludere determinati campi in un documento?

1
Sembra che tu stia cercando un'esportazione piuttosto che un backup. Se esporti solo un sottoinsieme di campi, presumibilmente non sarai in grado di ripristinarlo e avrai un database completamente funzionante. Ci sono alcune altre opzioni da considerare: crittografare tutti i campi con dati sensibili (tramite il codice dell'applicazione) in modo da poter eseguire un mongodumpbackup di snapshot normale o del file system o scrivere un'esportazione personalizzata se mongoexportnon fa quello che ti serve. Qualsiasi strumento o programma da cui leggere i dati mongodpotrebbe alterare il tuo working set se i tuoi dati da esportare sono più grandi della RAM disponibile. Le istantanee del filesystem sono meno dirompenti
Stennie il

Grazie per il chiarimento. La crittografia sui campi è qualcosa a cui non ho pensato, buon suggerimento.
Howard Lee,

Risposte:


6

Come risposta alla tua prima domanda, entrambi gli strumenti (per impostazione predefinita) eseguiranno semplicemente l' _idindice per recuperare i dati e quindi scriverli sul disco. Quindi, sì, entrambi gli strumenti avranno un impatto simile sul set di lavoro, motivo per cui in genere consiglierei di eseguirli su un secondario (preferibilmente un secondario nascosto, se possibile). Farò eco a Stennie nei commenti qui e consiglierò altri metodi di backup se hai a che fare con grandi quantità di dati.

Per la seconda domanda, suppongo che tu stia cercando un mongodumpequivalente --fieldsdell'opzione mongoexportper scaricare solo campi specifici. L' opzione di query può essere utilizzata per filtrare i risultati, ma non può essere utilizzata con una proiezione (per selezionare i campi restituiti): si tratta di una richiesta di funzionalità che viene monitorata in TOOLS-28 ma non è ancora pianificata. Come accennato anche da Stennie, l'altra opzione qui è quella di scrivere un esportatore personalizzato che soddisfi le tue esigenze (e, ancora una volta, consiglierei comunque di eseguirlo su un secondario per proteggere il tuo set di lavoro).


6
  1. (scusa, non lo so)

  2. --query selezionerà o escluderà interi documenti, non i campi.

Sarebbe una buona idea però:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodump utilizza la struttura dei file bson e conserva i tipi di dati . Mongoexport si perderanno tipo di dati dei valori . Ad esempio NumberLong ("1431677405876") verrebbe convertito in solo 1431677405876. Ecco perché è consigliabile mongodump se è necessario importare nuovamente in MongoDB.

Grazie per il chiarimento su --query e l'esempio sul tipo di dati perdita mongoexport.
Howard Lee,

0

Mongoexport attualmente conserva i tipi ma rende i dati incoerenti. Se stai esportando un campo con Ints e Long, lo esporterà rispettivamente come oggetti Numbers e JSON, il che può renderlo più difficile lungo la strada.

"Modalità rigorosa. Le rappresentazioni in modalità rigorosa dei tipi BSON sono conformi alla RFC JSON. Qualsiasi parser JSON può analizzare queste rappresentazioni in modalità rigorosa come coppie chiave / valore; tuttavia, solo il parser JSON interno MongoDB riconosce le informazioni sul tipo trasmesse dal formato."

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.