MongoDB-Überblick: Einstieg mit MongoDB

MongoDB-Überblick: Einstieg mit MongoDB

  • Orchestrierung
6 Minuten Lesezeit Aktualisiert Oct 24, 2017

Auf einen Blick: MongoDB ist eine skalierbare NoSQL-Datenbank, die JSON-ähnliche Dokumente für flexible Datenspeicherung verwendet. Dieser Leitfaden behandelt seine wichtigsten Merkmale, einschließlich der Kommandozeilen-Shell und Dokumentstruktur, wobei Geschwindigkeit statt Speichereffizienz in den Vordergrund steht.

  • Daten werden in Dokumentensammlungen gespeichert, was das Big-Data-Management vereinfacht.
  • Unterstützt mehrere Programmiersprachen über verschiedene Treiber, darunter Python und Java.

Hier geben wir einen Überblick über die MongoDB-Datenbank. In den folgenden Beiträgen geben wir ausführlichere Beispiele zur Nutzung von MongoDB.

Erstens ist MongoDB eine NoSQL-Big-Data-Datenbank. Sie entspricht der Definition von Big Data, weil sie skaliert (d. h. vergrößert werden kann) einfach durch das Hinzufügen von mehr Servern zu einem verteilten System. Und sie benötigt kein Schema, wie eine RDBMS-Datenbank wie Oracle.

MongoDB-Datensätze werden im JSON-Format (JavaScript Object Notation) gespeichert, das sich selbst beschreibt, das heißt, die Metadaten (d. h. das Schema) werden zusammen mit den Daten gespeichert.

Mongo verfügt über eine interaktive Befehls-Shell. JavaScript-Programmierer werden das lieben, weil die Syntax JavaScript ist. Um die Shell zu öffnen, tippst du einfach:

    mongo

Konzepte

MongoDB-Datensätze werden als Dokumente bezeichnet. Jede MongoDB-Datenbank (Sie können viele haben) enthält Sammlungen, die eine Menge von JSON-Dokumenten sind. Jede Sammlung und jedes Dokument hat eine ObjectID, die von MongoDB erstellt oder vom Programmierer bereitgestellt wird.

Zur Veranschaulichung: Angenommen, wir haben eine Datenbank namens Produkte.

Wir könnten zwei Kollektionen haben, die alle Produkte enthalten und sie nach dem Verkaufsort gruppieren:

Sammlung Dokumente und Felder
In Europa verkaufte Produkte EAN (europäischer Barcode), Gewicht in Kilo
Produkte, die in den USA verkauft werden UPC (amerikanischer Barcode), Gewicht in Pfund

Datenspeicher ist günstig und Speicher und CPU sind teurer. Deshalb werfen einige Big-Data-Datenbanken, wie Cassandra und MongoDB, die Idee einer normalisierten Datenbank in den Sinn, was eines der Schlüsselprinzipien einer RDBMS-Datenbank ist.

Zum Beispiel hätte man mit Oracle eine Produktkategorie in einem Produkteintrag. Die Produktkategorietabelle enthält Felder, die für all diese Produkte gemeinsam sind. Jeder Produkteintrag verweist auf einen Produktkategorie-Datensatz, sodass solche gemeinsamen Daten nicht mehr als einmal gespeichert werden:

Produkttabelle
Felder: Produktnummer, Produktkategorie

 

Produktkategorietabelle
Felder: Produktkategorie, Gewicht, Farbe

Aber dann muss man eine Join-Operation durchführen, wenn man die Farbe oder das Gewicht eines Produkts wissen will. Ein Join ist jedoch ein rechenintensiver Vorgang. Das braucht Zeit. MongoDB würde die Daten so speichern:

Produktdokumente
Felder: Produktnummer, Produktkategorie, Gewicht, Farbe

RDBMS-Programmierer sagen, dass das Duplikationen erzeugt und Platz verschwendet. MongoDB-Programmierer würden "ja" sagen, aber Geschwindigkeit ist wichtiger als Speicher.

Mit anderen Worten, MongoDB-Datensätze könnten so aussehen:

Produkt 1 Kategorie Jungenwindeln klein Farbe Blau
Produkt 2 Kategorie Jungenwindeln groß Farbe Blau
Produkt 3 Kategorie Mädchenwindeln klein Farbe Pink

Offensichtlich. Wenn man die Kategorie kennt, kennt man die Farbe.

Das werden wir veranschaulichen, indem wir die Produktdatenbank erstellen und dort einige Produkte hinzufügen. Fügen Sie diese Befehle in die MongoDB-Shell ein.

Erstelle zuerst die Produktdatenbank.

    use products
switched to db products

Dann diese beiden Sammlungen:

Dann fügen Sie einige Daten hinzu:

    > db.createCollection("boyDiapers")
{ "ok" : 1 }
> db.createCollection("girlDiapers")
{ "ok" : 1 }
>

Dann fügen Sie einige Daten hinzu:

    db.boyDiapers.insert([
{
size: 1,
color: 'blue',
brand: 'toddler tyke',
}
])
db.girlDiapers.insert([
{
size: 1,
color: 'pink',
brand: 'little angel',
}
])

Beachten Sie zwei Dinge. Erstens verwenden wir das Format db. (collection). einfügen, um das Dokument hinzuzufügen. Zweitens verwenden wir die Klammern [], die ein Array anzeigen, damit wir mehr als ein Dokument gleichzeitig hinzufügen können.

Erstellen Sie nun weitere Daten, damit wir nach Daten fragen können:

    db.boyDiapers.insert([
{
size: 2,
color: 'white',
brand: 'boy large white'
}
])
db.girlDiapers.insert([
{
size: 2,
color: 'while',
brand: 'girl large'
}
])

Datenauswahl

Wenn du Find ohne Argumente verwendest, listet es alle Dokumente auf. Verwende Pretty, um die Ergebnisse im leicht lesbaren, eingerückten JSON-Format anzuzeigen:

    > db.girlDiapers.find().pretty()
{
"_id" : ObjectId("59d1e9d5ccf50b62c5a7af55"),
"size" : 1,
"color" : "pink",
"brand" : "little angel"
}
{
"_id" : ObjectId("59d1f022ccf50b62c5a7af57"),
"size" : 1,
"color" : "while",
"brand" : "girl large"
}
{
"_id" : ObjectId("59d1f565ccf50b62c5a7af59"),
"size" : 2,
"color" : "while",
"brand" : "girl large"
}

Finde alle Mädchenwindeln der Größe 2 – füge Argumente zur Find-Aussage hinzu:

    db.girlDiapers.find({"size":2})
{ "_id" : ObjectId("59d1f565ccf50b62c5a7af59"), "size" : 2, "color" : "while", "brand" : "girl large" }

Man konnte nun nicht gleichzeitig in den Windelsammlungen von Jungen und Mädchen suchen. MongoDB macht das nicht. Stattdessen muss man in der Anwendung programmieren, dass man mit einem Treiber programmiert (siehe unten).

Normalisierte Dokumente

Wir haben gerade gesagt, dass es in MongoDB keine Normalisierung gibt, weil Speicher günstig und Rechenleistung teuer ist. Aber man kann Normalisierungsdokumente erstellen.

Zum Beispiel können wir für jedes große Dokument für Mädchen Größe 2 einen Verkaufsnachweis erstellen, wobei das Windelfeld auf das Windelobjekt zeigt. Das könnte in diesem Fall mehr Sinn machen, da Sie nicht möchten, dass die Windelkollektion bei jedem Verkauf um ein Vielfaches größer wird.

    db.girlDiapers.insert([
{ "diaper" : ObjectId("59d1f565ccf50b62c5a7af59"),
"price" : 45.2,
"quanity" : 10,
"sku" : "case"
}
])

Kommandozeilen-Shell

MongoDB-Treiber

Natürlich würdest du die Kommandozeilen-Shell wahrscheinlich nicht für eine Anwendung verwenden. Stattdessen würdest du ein Programm schreiben, das mit MongoDB interagiert, indem du einen der vielen verfügbaren Treiber nutzt. Es gibt Treiber für C++, C#, Java, Node.JS, Scala, Python und mehr.

Zum Beispiel, um Python zu verwenden:

    sudo pip install pymongo

Dann eine Anfrage nach Windeln in Größe 2 in der Jungen- und Mädchenkollektion:

Ausgaben:

    from pymongo import MongoClient
client = MongoClient()
db = client.products
x=db.collection_names()
for i in range(len(x)):
c=x[i]
d = db.get_collection(c)
for e in d.find({"size": 2}):
print(e)

Ausgaben:

    {'size': 2.0, 'brand': 'boy large white', 'color': 'white', '_id': ObjectId('59d1f564ccf50b62c5a7af58')}
{'size': 2.0, 'brand': 'girl large', 'color': 'while', '_id': ObjectId('59d1f565ccf50b62c5a7af59')}

Im nächsten Beitrag werden wir auf einige fortgeschrittenere MongoDB-Themen eingehen.

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Orchestrierung

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.