Importieren und Exportieren einer MongoDB-Datenbank unter Ubuntu 14.04

MongoDB ist eine der beliebtesten NoSQL-Datenbank-Engines. Es ist bekannt für seine Skalierbarkeit, Leistungsfähigkeit, Zuverlässigkeit und Benutzerfreundlichkeit. In diesem Artikel zeigen wir Ihnen, wie Sie Ihre MongoDB-Datenbanken importieren und exportieren.

Wir sollten klarstellen, dass mit Import und Export in diesem Artikel der Umgang mit Daten in einem für Menschen lesbaren Format gemeint ist, das mit anderen Softwareprodukten kompatibel ist. Im Gegensatz dazu erstellen oder verwenden die Sicherungs- und Wiederherstellungsvorgänge MongoDB-spezifische Binärdaten, wodurch nicht nur die Konsistenz und Integrität Ihrer Daten, sondern auch die spezifischen MongoDB-Attribute erhalten bleiben. Daher ist es für die Migration normalerweise vorzuziehen, Backup und Restore zu verwenden, solange Quell- und Zielsystem kompatibel sind. Das Sichern, Wiederherstellen und Migrieren geht über den Rahmen dieses Artikels hinaus. Weitere Informationen finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-back-up-restore-and-migrate-a-mongodb-database-. on-ubuntu-14-04 [Sichern, Wiederherstellen und Migrieren einer MongoDB-Datenbank unter Ubuntu 14.04].

Voraussetzungen

Stellen Sie vor dem Ausführen dieses Lernprogramms sicher, dass folgende Voraussetzungen erfüllt sind:

Sofern nicht anders angegeben, sollten alle Befehle, für die in diesem Lernprogramm Root-Berechtigungen erforderlich sind, als Nicht-Root-Benutzer mit Sudo-Berechtigungen ausgeführt werden.

Grundlagen verstehen

Bevor Sie mit diesem Artikel fortfahren, ist ein grundlegendes Verständnis in dieser Angelegenheit erforderlich. Wenn Sie Erfahrung mit gängigen relationalen Datenbanksystemen wie MySQL haben, können Sie bei der Arbeit mit MongoDB einige Ähnlichkeiten feststellen.

Das Erste, was Sie wissen sollten, ist, dass MongoDB die Formate json und bson (binary json) zum Speichern seiner Informationen verwendet. Json ist das für Menschen lesbare Format, das sich perfekt zum Exportieren und schließlich zum Importieren Ihrer Daten eignet. Sie können Ihre exportierten Daten weiterhin mit jedem Tool verwalten, das JSON unterstützt, einschließlich eines einfachen Texteditors.

Ein Beispiel für ein JSON-Dokument sieht folgendermaßen aus:

Beispiel für das json-Format

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

Es ist sehr praktisch, mit Json zu arbeiten, es werden jedoch nicht alle in bson verfügbaren Datentypen unterstützt. Dies bedeutet, dass es bei Verwendung von json zu einem so genannten "Vertrauensverlust" der Informationen kommt. Aus diesem Grund ist es für das Sichern / Wiederherstellen besser, die Binärdatei zu verwenden, mit der Sie Ihre MongoDB-Datenbank besser wiederherstellen können.

Zweitens müssen Sie sich keine Gedanken über das explizite Erstellen einer MongoDB-Datenbank machen. Wenn die für den Import angegebene Datenbank noch nicht vorhanden ist, wird sie automatisch erstellt. Noch besser ist die Struktur der Sammlungen (Datenbanktabellen). Im Gegensatz zu anderen Datenbank-Engines wird in MongoDB die Struktur beim Einfügen des ersten Dokuments (Datenbankzeile) wieder automatisch erstellt.

Drittens kann das Lesen oder Einfügen großer Datenmengen in MongoDB, z. B. für die in diesem Artikel beschriebenen Aufgaben, ressourcenintensiv sein und einen Großteil der CPU, des Arbeitsspeichers und des Festplattenspeichers beanspruchen. Dies ist von entscheidender Bedeutung, da MongoDB häufig für große Datenbanken und Big Data verwendet wird. Die einfachste Lösung für dieses Problem besteht darin, die Exporte / Backups über Nacht auszuführen.

Viertens kann die Informationskonsistenz problematisch sein, wenn Sie einen ausgelasteten MongoDB-Server haben, auf dem sich die Informationen während des Datenbankexports ändern. Es gibt keine einfache Lösung für dieses Problem, aber am Ende dieses Artikels finden Sie Empfehlungen, die Sie zum Thema Replikation lesen sollten.

Informationen in MongoDB importieren

Um zu erfahren, wie das Importieren von Informationen in MongoDB funktioniert, verwenden wir eine beliebte MongoDB-Beispieldatenbank für Restaurants. Es ist im .json-Format und kann mit "+ wget +" wie folgt heruntergeladen werden:

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

Sobald der Download abgeschlossen ist, sollten Sie eine Datei mit dem Namen "+ primer-dataset.json in" (12 MB groß) im aktuellen Verzeichnis haben. Importieren Sie die Daten aus dieser Datei in eine neue Datenbank mit dem Namen "+ newdb " und in eine Sammlung mit dem Namen " restaurants ". Zum Importieren verwenden wir den Befehl " mongoimport +" wie folgt:

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

Das Ergebnis sollte so aussehen:

Ausgabe von Mongoimport

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

Wie der obige Befehl zeigt, wurden 25359 Dokumente importiert. Da wir keine Datenbank mit dem Namen "+ newdb +" hatten, hat MongoDB diese automatisch erstellt.

Überprüfen Sie den Import, indem Sie eine Verbindung zur neu erstellten MongoDB-Datenbank mit dem Namen "+ newdb +" wie folgt herstellen:

sudo mongo newdb

Sie sind jetzt mit der neu erstellten Datenbankinstanz "+ newdb +" verbunden. Beachten Sie, dass sich Ihre Eingabeaufforderung geändert hat und angibt, dass Sie mit der Datenbank verbunden sind.

Zählen Sie die Dokumente in der Restaurantsammlung mit dem Befehl:

db.restaurants.count()

Das Ergebnis sollte "+ 25359 +" sein, genau die Anzahl der importierten Dokumente. Für eine noch bessere Prüfung können Sie das erste Dokument aus der Restaurantsammlung wie folgt auswählen:

db.restaurants.findOne()

Das Ergebnis sollte so aussehen:

Ausgabe von 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"
}

Eine solche detaillierte Prüfung könnte Probleme mit den Dokumenten aufdecken, wie z. B. deren Inhalt, Codierung usw. Das json-Format verwendet die Kodierung "+ UTF-8 +", und Ihre Exporte und Importe sollten in dieser Kodierung erfolgen. Beachten Sie dies, wenn Sie die json-Dateien manuell bearbeiten. Andernfalls übernimmt MongoDB dies automatisch für Sie.

Um die MongoDB-Eingabeaufforderung zu beenden, geben Sie an der Eingabeaufforderung "+ exit +" ein:

exit

Sie kehren als Benutzer ohne Rootberechtigung zur normalen Eingabeaufforderung zurück.

Exportieren von Informationen aus MongoDB

Wie bereits erwähnt, können Sie durch Exportieren von MongoDB-Informationen eine für Menschen lesbare Textdatei mit Ihren Daten erstellen. Standardmäßig werden Informationen im JSON-Format exportiert, Sie können sie jedoch auch in eine CSV-Datei exportieren (durch Kommas getrennte Werte).

Um Informationen aus MongoDB zu exportieren, verwenden Sie den Befehl + mongoexport +. Sie können einen sehr detaillierten Export exportieren, um eine Datenbank, eine Sammlung und ein Feld anzugeben und sogar eine Abfrage für den Export zu verwenden.

Ein einfaches Beispiel für "+ mongoexport " wäre der Export der Restaurants-Sammlung aus der Datenbank " newdb +", die wir zuvor importiert haben. Das kann so gemacht werden:

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

Im obigen Befehl verwenden wir "+ - db ", um die Datenbank anzugeben, " -c " für die Sammlung und " - out +" für die Datei, in der die Daten gespeichert werden.

Die Ausgabe eines erfolgreichen "+ mongoexport +" sollte folgendermaßen aussehen:

Ausgabe von Mongoexport

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

Die obige Ausgabe zeigt, dass 25359 Dokumente importiert wurden - dieselbe Anzahl wie die importierten.

In einigen Fällen müssen Sie möglicherweise nur einen Teil Ihrer Sammlung exportieren. In Anbetracht der Struktur und des Inhalts der JSON-Datei für Restaurants exportieren wir alle Restaurants, die die Kriterien für die Lage im Bezirk Bronx und die chinesische Küche erfüllen. Wenn Sie diese Informationen direkt abrufen möchten, während Sie mit MongoDB verbunden sind, stellen Sie erneut eine Verbindung zur Datenbank her:

sudo mongo newdb

Verwenden Sie dann diese Abfrage:

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

Die Ergebnisse werden im Terminal angezeigt. Um die MongoDB-Eingabeaufforderung zu beenden, geben Sie an der Eingabeaufforderung "+ exit +" ein:

exit

Wenn Sie die Daten aus einer sudo-Befehlszeile exportieren möchten, anstatt mit der Datenbank verbunden zu sein, nehmen Sie die vorherige Abfrage in den Befehl + mongoexport + vor, indem Sie sie für das Argument + -q + wie folgt angeben:

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

Beachten Sie, dass wir einfache Anführungszeichen innerhalb der doppelten Anführungszeichen für die Abfragebedingungen verwenden. Wenn Sie doppelte Anführungszeichen oder Sonderzeichen wie "+ $ " verwenden, müssen Sie diese mit einem Backslash (" \ +") in der Abfrage maskieren.

Wenn der Export erfolgreich war, sollte das Ergebnis folgendermaßen aussehen:

Ausgabe von Mongoexport

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

Die obige Abbildung zeigt, dass 323 Datensätze exportiert wurden und Sie diese in der von uns angegebenen Datei + Bronx_Chinese_retaurants.json + finden.

Fazit

Dieser Artikel enthält eine Einführung in die Grundlagen des Importierens und Exportierens von Informationen in und aus einer MongoDB-Datenbank. Weitere Informationen finden Sie unter How To Sichern, Wiederherstellen und Migrieren einer MongoDB-Datenbank unter Ubuntu 14.04 und How To Set a Skalierbare MongoDB-Datenbank.

Die Replikation ist nicht nur für die Skalierbarkeit nützlich, sondern auch für die aktuellen Themen wichtig. Mit der Replikation können Sie Ihren MongoDB-Dienst ohne Unterbrechung von einem Slave-MongoDB-Server ausführen, während Sie den Master-Server nach einem Fehler wiederherstellen. Teil der Replikation ist auch das operations log (oplog), das alle Vorgänge aufzeichnet, die Ihre Daten ändern. Sie können dieses Protokoll wie das Binärprotokoll in MySQL verwenden, um Ihre Daten nach der letzten Sicherung wiederherzustellen. Denken Sie daran, dass Sicherungen normalerweise nachts durchgeführt werden. Wenn Sie sich entschließen, eine Sicherung am Abend wiederherzustellen, werden Ihnen alle Aktualisierungen seit der letzten Sicherung fehlen.