Sauvegarde avec mongoexport ou mongodump?

9

Pour la sauvegarde de la production, MongoDB recommande mongodump au lieu de mongoexport pour la précision des données. Cependant, je devrais "nettoyer" les données d'une base de données MongoDB avant de les sauvegarder. Je ne connais aucune option de nettoyage des données côté serveur autre que mongoexport . Deux questions:

  1. Mongoexport accède- t- il au cache MongoDB dans la RAM? Cela modifierait-il l'ensemble de travail en RAM comme le fait mongodump ?
  2. La commande mongodump a cette option --query . "Fournit un document JSON en tant que requête qui limite éventuellement les documents inclus dans la sortie de mongodump." Faut-il une requête pour exclure certains champs d'un document?
Howard Lee
la source
1
Il semble que vous recherchiez une exportation plutôt qu'une sauvegarde. Si vous exportez uniquement un sous-ensemble de champs, vous ne pourrez probablement pas le restaurer et disposer d'une base de données entièrement fonctionnelle. Il y a quelques autres options à considérer: crypter tous les champs avec des données sensibles (via le code d'application) afin que vous puissiez faire une mongodumpsauvegarde instantanée ou un instantané du système de fichiers, ou écrire une exportation personnalisée si mongoexportne fait pas ce dont vous avez besoin. Tous les outils ou programmes qui lisent des données mongodpourraient altérer votre ensemble de travail si vos données à exporter sont plus grandes que la RAM disponible. Les instantanés du système de fichiers sont moins perturbateurs
Stennie
Merci pour la clarification. Le cryptage sur les champs est quelque chose auquel je n'ai pas pensé, bonne suggestion.
Howard Lee

Réponses:

6

En réponse à votre première question, les deux outils (par défaut) parcourent simplement l' _idindex pour récupérer les données, puis les écrivent sur le disque. Donc, oui, les deux outils auront un impact similaire sur votre ensemble de travail, c'est pourquoi je recommanderais généralement de les exécuter sur un secondaire (de préférence un secondaire caché si possible). Je vais faire écho à Stennie dans les commentaires ici et recommander d'autres méthodes de sauvegarde si vous traitez de grandes quantités de données.

Pour la deuxième question, je suppose que vous recherchez un mongodumpéquivalent de l' --fieldsoption de mongoexportpour ne vider que des champs spécifiques. L' option de requête peut être utilisée pour filtrer les résultats, mais elle ne peut pas être utilisée avec une projection (pour sélectionner les champs retournés) - il s'agit d'une demande de fonctionnalité qui est suivie dans TOOLS-28 mais n'est pas encore planifiée. Comme Stennie l'a également mentionné, l'autre option ici est d'écrire un exportateur personnalisé qui correspond à vos besoins (et encore une fois, je recommanderais de l'exécuter contre un secondaire pour protéger votre ensemble de travail).

Adam C
la source
6
  1. (désolé, non)

  2. --query sélectionnera ou exclura des documents entiers, pas des champs.

Ce serait une bonne idée cependant:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodump utilise la structure de fichiers bson et préserve les types de données . Mongoexport va perdre le type de données des valeurs . Tels que NumberLong ("1431677405876") serait converti en seulement 1431677405876. C'est pourquoi mongodump est conseillé si vous devez réimporter vers MongoDB.
aldwinaldwin
la source
Merci pour vos éclaircissements sur --query et l'exemple sur le type de données de perte mongoexport.
Howard Lee
0

Mongoexport conserve en fait les types mais rend les données incohérentes. Si vous exportez un champ avec Ints et Longs, il l'exportera respectivement en tant qu'objets Numbers et JSON, ce qui peut le rendre plus difficile sur la route.

"Mode strict. Les représentations en mode strict des types BSON sont conformes au RFC JSON. Tout analyseur JSON peut analyser ces représentations en mode strict en tant que paires clé / valeur; cependant, seul l'analyseur JSON interne de MongoDB reconnaît les informations de type véhiculées par le format."

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

lf2225
la source