Comment importer et exporter une base de données MongoDB sur Ubuntu 14.04

MongoDB est l’un des moteurs de base de données NoSQL les plus populaires. Il est réputé pour être évolutif, puissant, fiable et facile à utiliser. Dans cet article, nous allons vous montrer comment importer et exporter vos bases de données MongoDB.

Nous devons préciser que, dans cet article, nous entendons par importation et exportation le traitement de données dans un format lisible par l’homme, compatible avec d’autres produits logiciels. En revanche, les opérations de sauvegarde et de restauration créent ou utilisent des données binaires spécifiques à MongoDB, ce qui préserve non seulement la cohérence et l’intégrité de vos données, mais également ses attributs MongoDB spécifiques. Ainsi, pour la migration, il est généralement préférable d’utiliser la sauvegarde et la restauration tant que les systèmes source et cible sont compatibles. La sauvegarde, la restauration et la migration dépassent le cadre de cet article - voir https://www.digitalocean.com/community/tutorials/how-to-back-up-restore-and-migrate-a-mongodb-database- on-ubuntu-14-04 [Comment sauvegarder, restaurer et migrer une base de données MongoDB sur Ubuntu 14.04].

Conditions préalables

Avant de suivre ce didacticiel, assurez-vous de remplir les conditions préalables suivantes:

Sauf indication contraire, toutes les commandes nécessitant des privilèges root dans ce tutoriel doivent être exécutées en tant qu’utilisateur non root avec des privilèges sudo.

Comprendre les bases

Avant de continuer avec cet article, une compréhension de base de la question est nécessaire. Si vous avez de l’expérience avec les systèmes de base de données relationnels populaires tels que MySQL, il est possible que vous rencontriez des similitudes lorsque vous utilisez MongoDB.

La première chose à savoir est que MongoDB utilise les formats json et bson (binaire json) pour stocker ses informations. Json est le format lisible par l’homme, parfait pour exporter et, éventuellement, importer vos données. Vous pouvez gérer davantage les données exportées avec n’importe quel outil prenant en charge json, y compris un simple éditeur de texte.

Un exemple de document json ressemble à ceci:

Exemple de format json

{"address":[
   {"building":"1007", "street":"Park Ave"},
   {"building":"1008", "street":"New Ave"},
]}

Json est très pratique à utiliser, mais il ne prend pas en charge tous les types de données disponibles dans bson. Cela signifie qu’il y aura une soi-disant «perte de fidélité» de l’information si vous utilisez JSON. C’est pourquoi, pour la sauvegarde / restauration, il est préférable d’utiliser le bson binaire qui permettrait de mieux restaurer votre base de données MongoDB.

Deuxièmement, vous n’avez pas à vous préoccuper de la création explicite d’une base de données MongoDB. Si la base de données que vous spécifiez pour l’importation n’existe pas déjà, elle est automatiquement créée. Mieux encore, c’est le cas de la structure des collections (bases de données). Contrairement à d’autres moteurs de base de données, dans MongoDB, la structure est à nouveau automatiquement créée lors de l’insertion du premier document (ligne de la base de données).

Troisièmement, dans MongoDB, lire ou insérer de grandes quantités de données, par exemple pour les tâches de cet article, peut nécessiter beaucoup de ressources et consomme une grande partie du processeur, de la mémoire et de l’espace disque. Il s’agit là d’un point critique étant donné que MongoDB est fréquemment utilisé pour les bases de données volumineuses et les Big Data. La solution la plus simple à ce problème consiste à exécuter les exportations / sauvegardes pendant la nuit.

Quatrièmement, la cohérence des informations peut être problématique si vous avez un serveur MongoDB occupé où les informations changent pendant le processus d’exportation de la base de données. Il n’y a pas de solution simple à ce problème, mais à la fin de cet article, vous verrez des recommandations pour en savoir plus sur la réplication.

Importation d’informations dans MongoDB

Pour savoir comment importer des informations dans MongoDB, utilisons un exemple de base de données MongoDB sur les restaurants. Il est au format .json et peut être téléchargé en utilisant + wget + comme ceci:

wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

Une fois le téléchargement terminé, vous devez avoir un fichier nommé + primer-dataset.json in (taille de 12 Mo) dans le répertoire en cours. Importons les données de ce fichier dans une nouvelle base de données appelée + newdb + et dans une collection appelée + restaurants +. Pour importer, nous utiliserons la commande + mongoimport + comme ceci:

sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

Le résultat devrait ressembler à ceci:

Sortie de mongoimport

2016-01-17T14:27:04.806-0500    connected to: localhost
2016-01-17T14:27:07.315-0500    imported 25359 documents

Comme le montre la commande ci-dessus, 25359 documents ont été importés. Comme nous n’avions pas de base de données appelée + newdb +, MongoDB l’a créée automatiquement.

Vérifions l’importation en vous connectant à la base de données MongoDB nouvellement créée et appelée + newdb + comme ceci:

sudo mongo newdb

Vous êtes maintenant connecté à la nouvelle instance de base de données + newdb +. Notez que votre invite a changé, indiquant que vous êtes connecté à la base de données.

Comptez les documents dans la collection de restaurants avec la commande:

db.restaurants.count()

Le résultat devrait indiquer "+ 25359 +", exactement le nombre de documents importés. Pour une vérification encore meilleure, vous pouvez sélectionner le premier document de la collection restaurants comme suit:

db.restaurants.findOne()

Le résultat devrait ressembler à ceci:

Sortie de db.restaurants.findOne ()

{
       "_id" : ObjectId("569beb098106480d3ed99926"),
       "address" : {
               "building" : "1007",
               "coord" : [
                       -73.856077,
                       40.848447
               ],
               "street" : "Morris Park Ave",
               "zipcode" : "10462"
       },
       "borough" : "Bronx",
       "cuisine" : "Bakery",
       "grades" : [
               {
                       "date" : ISODate("2014-03-03T00:00:00Z"),
                       "grade" : "A",
                       "score" : 2
               },
...
       ],
       "name" : "Morris Park Bake Shop",
       "restaurant_id" : "30075445"
}

Une vérification aussi détaillée pourrait révéler des problèmes avec les documents, tels que leur contenu, leur codage, etc. Le format json utilise le codage + UTF-8 + et vos exportations et importations doivent être dans ce codage. Pensez-y si vous éditez manuellement les fichiers JSON. Sinon, MongoDB le gérera automatiquement pour vous.

Pour quitter l’invite MongoDB, tapez + exit + à l’invite:

exit

Vous serez renvoyé à l’invite de ligne de commande normale en tant qu’utilisateur non root.

Exporter des informations depuis MongoDB

Comme nous l’avons mentionné précédemment, en exportant des informations MongoDB, vous pouvez acquérir un fichier texte lisible par l’homme avec vos données. Par défaut, les informations sont exportées au format JSON mais vous pouvez également exporter au format CSV (valeur séparée par des virgules).

Pour exporter des informations depuis MongoDB, utilisez la commande + mongoexport +. Il vous permet d’exporter une exportation très fine afin de pouvoir spécifier une base de données, une collection, un champ et même utiliser une requête pour l’exportation.

Un exemple simple + mongoexport + serait d’exporter la collection de restaurants de la base de données + newdb + que nous avons précédemment importée. Cela peut être fait comme ça:

sudo mongoexport --db newdb -c restaurants --out newdbexport.json

Dans la commande ci-dessus, nous utilisons + - db + pour spécifier la base de données, + -c + pour la collection et + - out + pour le fichier dans lequel les données seront sauvegardées.

La sortie d’un + mongoexport + réussi devrait ressembler à ceci:

Sortie de mongoexport

2016-01-20T03:39:00.143-0500    connected to: localhost
2016-01-20T03:39:03.145-0500    exported 25359 records

La sortie ci-dessus montre que 25359 documents ont été importés - le même nombre que ceux importés.

Dans certains cas, vous devrez peut-être n’exporter qu’une partie de votre collection. Compte tenu de la structure et du contenu du fichier json des restaurants, exportons tous les restaurants qui répondent aux critères requis pour séjourner dans l’arrondissement du Bronx et proposer une cuisine chinoise. Si nous voulons obtenir ces informations directement lorsque nous sommes connectés à MongoDB, connectez-vous à nouveau à la base de données:

sudo mongo newdb

Ensuite, utilisez cette requête:

db.restaurants.find( { borough: "Bronx", cuisine: "Chinese" } )

Les résultats sont affichés sur le terminal. Pour quitter l’invite MongoDB, tapez + exit + à l’invite:

exit

Si vous souhaitez exporter les données d’une ligne de commande sudo au lieu d’être connecté à la base de données, intégrez la requête précédente à la commande + mongoexport + en le spécifiant pour l’argument + -q + de la manière suivante:

sudo mongoexport --db newdb -c restaurants -q "{ borough: 'Bronx', cuisine: 'Chinese' }" --out Bronx_Chinese_retaurants.json

Notez que nous utilisons des guillemets simples à l’intérieur des guillemets doubles pour les conditions de requête. Si vous utilisez des guillemets doubles ou des caractères spéciaux comme + $ + vous devrez les échapper avec une barre oblique inverse (+ \ +) dans la requête.

Si l’exportation a réussi, le résultat devrait ressembler à ceci:

Sortie de mongoexport

2016-01-20T04:16:28.381-0500    connected to: localhost
2016-01-20T04:16:28.461-0500    exported 323 records

Ce qui précède montre que 323 enregistrements ont été exportés et que vous pouvez les trouver dans le fichier + Bronx_Chinese_retaurants.json + que nous avons spécifié.

Conclusion

Cet article vous a présenté l’essentiel de l’importation et de l’exportation d’informations depuis et vers une base de données MongoDB. Vous pouvez continuer à lire sur How To Sauvegarder, restaurer et migrer une base de données MongoDB sur Ubuntu 14.04 et Comment configurer un Base de données MongoDB évolutive.

La réplication est non seulement utile pour l’évolutivité, mais également pour les rubriques actuelles. La réplication vous permet de continuer à exécuter votre service MongoDB sans interruption à partir d’un serveur MongoDB esclave pendant que vous restaurez le serveur principal après une panne. Une partie de la réplication est également le operations log (oplog), qui enregistre toutes les opérations qui modifient vos données. Vous pouvez utiliser ce journal, comme vous le feriez avec le journal binaire dans MySQL, pour restaurer vos données après la dernière sauvegarde. Rappelez-vous que les sauvegardes ont généralement lieu pendant la nuit et que, si vous décidez de restaurer une sauvegarde le soir, toutes les mises à jour seront manquantes depuis la dernière sauvegarde.