Leitfaden für die Migration von einem RDBMS zu MongoDB - Hinweise und Best Practices November 2017

Die Seite wird erstellt Janina Born
 
WEITER LESEN
Leitfaden für die Migration von einem RDBMS zu MongoDB - Hinweise und Best Practices November 2017
Ein Whitepaper von MongoDB

Leitfaden für die Migration von einem
RDBMS zu MongoDB
Hinweise und Best Practices
November 2017
Leitfaden für die Migration von einem RDBMS zu MongoDB - Hinweise und Best Practices November 2017
Inhaltsverzeichnis
Einleitung                                                1

Erfolg erfordert Organisation                             1

Schemadesign                                         2
  Von starren Tabellen zu flexiblen, dynamischen
  BSON-Dokumenten                                    2
  Modellierung von Beziehungen durch Einbettungen und
  Verweise                                           6
  Indizierung                                        7
  Design und fortlaufende Weiterentwicklung von
  Schemata                                          11

Anwendungsintegration                                    11
  MongoDB-Treiber und die API                            12
  Die Übertragung von SQL-Befehlen in die
  MongoDB-Syntax                                         12
  Das MongoDB Aggregation Framework                      12
  Integration mit Business Intelligence-Lösungen – der
  MongoDB Connector for BI                               13
  Atomarität in MongoDB                                  14
  Wahrung der starken Konsistenz                         14
  Dauerhaftigkeit der Schreibprozesse                    14
  Implementierung von Validierungsprozessen und
  Schreibbeschränkungen                                  15
  Views                                                  16

Die Migration von Daten zu MongoDB                       17

Flexible, skalierbare Lösungen für den Datenbankbetrieb18

MongoDB Atlas: Database-as-a-Service für MongoDB 18

Wir unterstützung Ihre Migration: MongoDB Services       19
  MongoDB University                                     19
  Ressourcen der Nutzer-Community und
  Beratungsdienste                                       19

Fazit                                                    19

Wir helfen Ihnen gern!                                   20

@atlas                                                   20

@stitch                                                  21
Leitfaden für die Migration von einem RDBMS zu MongoDB - Hinweise und Best Practices November 2017
Einleitung

Seit über 30 Jahren basiert die Datenverwaltung in             des Prozesses mit den einzelnen Schritten finden Sie in
Unternehmen auf relationalen Datenbanken.                      Abbildung 2.

Doch die modernen Verfahren für die Entwicklung und den        Dieser Leitfaden enthält zahlreiche Links, die den Leser an
Betrieb von Anwendungen in Kombination mit der rasant          geeignete Online-Ressourcen verweisen. Um die
steigenden Zahl neuer Datenquellen und den immer               aktuellsten und ausführlichsten Informationen zu einem
umfangreicheren Workloads der Anwender übersteigen             bestimmten Thema zu erhalten, schlagen Sie bitte in der
zunehmend die Möglichkeiten relationaler Datenbanken.          Online-Dokumentation nach.
Die dadurch entstehenden Einschränkungen im Hinblick
auf die Flexibilität und Skalierbarkeit sowie die steigenden
finanziellen Belastungen bewegen mehr und mehr                 Erfolg erfordert Organisation
Unternehmen dazu, zu alternativen Datenbanken wie
MongoDB oder NoSQL zu migrieren.
                                                               Der Erfolg einer Migration hängt nicht nur von der Wahl der
Wie Sie Abbildung 1 entnehmen können, haben                    richtigen Technologie und Architektur ab, sondern auch von
Unternehmen aus vielen verschiedenen Branchen für              der rechtzeitigen Einbeziehung aller für die Anwendung
vielfältigste Anwendungen erfolgreich eine Migration von       zuständigen Entscheidungsträger und Experten, darunter
relationalen Datenbank-Managementsystemen (RDBMS)              Führungskräfte aus den Geschäftsbereichen sowie
zu MongoDB durchgeführt.                                       Entwickler, Datenarchitekten und Datenbank- und
                                                               Systemadministratoren. In manchen Unternehmen sind
Dieser Leitfaden wendet sich an Projektteams, die              möglicherweise mehrere dieser Rollen in einer Funktion
erfahren möchten, was bei einer Umstellung von einem           zusammengefasst.
RDBMS zu MongoDB zu beachten ist. Ein Ablaufdiagramm

                                                                                                                         1
Leitfaden für die Migration von einem RDBMS zu MongoDB - Hinweise und Best Practices November 2017
Unternehmen                Früher
                                     rüheres
                                          es DB
                                             DBMMS                                 Anwendung

 eHarmony                      Oracle und Postgres          Management und Analyse von Kundendaten

 Shutterfly                    Oracle                       Web- und mobile Services

 Cisco                         Mehrere verschiedene         Analysen, Social Networking
                               RDBMS

 Craigslist                    MySQL                        Archiv

 Under Armour                  Microsoft SQL-Server         Online-Handel

 Foursquare                    PostgreSQL                   Plattformen für soziale Medien und mobile Apps

 MTV Networks                  Mehrere verschiedene         Zentralisiertes Content-Management
                               RDBMS

 Buzzfeed                      MySQL                        Echtzeitanalysen

 Verizon                       Oracle                       Überblicksansichten, Mitarbeitersysteme

 The Weather Channel           Oracle und MySQL             Plattformen für mobile Apps

 Abbildung 1: Fallbeispiele

Bei der Festlegung geschäftlicher und technischer Ziele
                                                              Schemadesign
sowie der Zeitpläne und Zuständigkeiten sollte das
Projektteam mit allen Beteiligten zusammenarbeiten und
regelmäßige Treffen abhalten, um den Fortschritt zu           Die grundlegendste Änderung bei einer Migration von
überwachen und etwaigen Problemen frühzeitig zu               einer relationalen Datenbank zu MongoDB betrifft die Art
begegnen.                                                     und Weise der Datenmodellierung.

                                                              Selbstverständlich variiert die Datenmodellierung von
MongoDB und die User-Community bieten eine Reihe von
                                                              Anwendungsfall zu Anwendungsfall, doch es gibt ein paar
Services und Ressourcen an, die Ihnen dabei helfen
                                                              allgemeine Überlegungen, die auf die meisten Projekte zur
können, die notwendigen Kenntnisse und Fertigkeiten für
                                                              Schemamigration zutreffen.
die Nutzung von MongoDB aufzubauen, z. B. kostenlose
Online-Schulungen, Support und Beratungsdienste.              Bevor Sie sich näher mit dem Schemadesign befassen,
Nähere Informationen dazu finden Sie im Abschnitt über        bietet Ihnen Abbildung 3 einen nützlichen Überblick über
MongoDB-Services am Ende dieses Leitfadens.                   die Analogien einiger wichtiger RDMBS-Fachbegriffe in
                                                              der Welt von MongoDB.

                                        Abbildung 2: Ablaufplan einer Migration

                                                                                                                         2
Die Umstellung auf MongoDB erfordert, dass                     Dagegen wird der Entwicklungsprozess verlangsamt, wenn
Datenarchitekten, Entwickler und                               Daten aus einem objektorientierten
Datenbankadministratoren beim Schemadesign einen               Anwendungsprogramm in der Tabellenstruktur eines
anderen Blickwinkel einnehmen:                                 RDBMS abgebildet werden müssen. Außerdem können
                                                               durch die Nutzung eines Tools für die objektrelationale
• weg vom herkömmlichen relationalen Datenmodell, das
                                                               Abbildung (Object Relational Mapper, ORM) neue
  die Daten in eine starre zweidimensionale
                                                               Komplikationen entstehen, da hierdurch die Flexibilität bei
  Tabellenstruktur mit Zeilen und Spalten zwängt,
                                                               der Anpassung der Schemata an neue
• hin zu einem dynamischen dokumentbasierten Modell            Anwendungsanforderungen und bei der
  mit eingebetteten Unterdokumenten und Arrays.                Abfrageoptimierung eingeschränkt wird.

  R DB
    DBMMS                      MongoDB                         Beim Schemadesign sollte der erste Schritt des
                                                               Projektteams in der Analyse der
 Datenbank    Datenbank
                                                               Anwendungsanforderungen bestehen. Darüber hinaus
 Tabelle      Collection                                       sollte die Datenmodellierung auf eine Art und Weise
                                                               erfolgen, die die Vorteile der Flexibilität des
 Zeile        Dokument
                                                               dokumentbasierten Modells in vollem Umfang ausschöpft.
 Spalte       Feld                                             Bei einer Schemamigration mag es am einfachsten
                                                               erscheinen, das flache Schema der relationalen Datenbank
 Index        Index
                                                               im dokumentbasierten Modell nachzubilden. Dieser Ansatz
 JOIN         Eingebettetes Dokument,                          ignoriert jedoch die Vorteile, die sich aus den vielfältigen,
              Dokumentverweis oder $lookup, um                 eingebetteten Datenstrukturen des dokumentbasierten
              Daten aus verschiedenen Collections zu
              verknüpfen                                       Modells ergeben. Stehen zum Beispiel Daten aus zwei
                                                               RDBMS-Tabellen in einer Eltern-Kind-Beziehung, werden
 Abbildung 3: Terminologische Entsprechungen                   diese in MongoDB üblicherweise in einem einzigen
                                                               Dokument zusammengeführt (eingebettet).

Von starren Tabellen zu flexiblen,
dynamischen BSON-Dokumenten
Viele der Daten, die wir heute verwenden, weisen komplexe
Strukturen auf, die viel effizienter mit JSON-Dokumenten
(JavaScript Object Notation) als mit Tabellen modelliert und
dargestellt werden können.

MongoDB speichert JSON-Dokumente im binären
BSON-Format (Binary JSON). Mit der BSON-Codierung
wird die beliebte JSON-Modellierung auf weitere
Datentypen wie Integer, Long Integer, Decimal und                Abbildung 4: relationales Schema, flache 2-D-Tabellen
Gleitkommazahlen ausgedehnt.
                                                               In Abbildung 4 stellt das RDBMS die Verknüpfung
Mit Unterdokumenten und Arrays spiegeln
                                                               zwischen den Tabellen „Person“ (Eigentümer) und „Car“
JSON-Dokumente außerdem die Struktur der Objekte auf
                                                               (Fahrzeug) über das Feld „Pers_ID“ her, damit die
der Anwendungsebene wider. Dies erleichtert Entwicklern
                                                               Anwendung für jedes Fahrzeug den Eigentümer ausgeben
die Verknüpfung der in einer Anwendung verwendeten
                                                               kann. Im Gegensatz dazu werden derartige Verknüpfungen
Daten mit dem entsprechenden Dokument in der
                                                               im dokumentbasierten Modell durch eingebettete
Datenbank.
                                                               Unterdokumente und verschachtelte Arrays hergestellt, das
                                                               heißt durch die Zusammenfassung aufeinander bezogener

                                                                                                                           3
Felder in einer einzigen Datenstruktur. Zeilen und Spalten,
die üblicherweise normalisiert und über verschiedene
Tabellen verteilt waren, können nun zusammen in einem
einzigen Dokument gespeichert werden. Dadurch kann die
Anwendung vollständige Datensätze ausgeben, ohne
separate Tabellen mit einer JOIN-Operation verknüpfen zu
müssen.

Das bedeutet: Bei der Modellierung der oben
angesprochenen Fahrzeug- und Eigentümerdaten in
MongoDB kann ein Schema erstellt werden, bei dem ein
Array von fahrzeugspezifischen Unterdokumenten direkt in
das Dokument mit den Personendaten eingebettet wird.

{
first_name: “Paul”,
surname: “Miller”,
city: “London”,
location: [45.123,47.232],
cars: [
   { model: “Bentley”,
    year: 1973,
    value: 100000, ….},
   { model: “Rolls Royce”,
    year: 1965,
    value: 330000, ….},
]
}

                                                                 Abbildung 5:
                                                                            5:Durch die Zusammenführung der 5
                                                              RDBMS-Tabellen in 2 BSON-Dokumenten wird der JOIN
                                                                      in der Datenbankstruktur abgebildet.

                                                              In diesem einfachen Beispiel besteht das relationale
                                                              Modell aus nur zwei Tabellen, während die meisten echten
                                                              Anwendungen Dutzende, Hunderte oder sogar Tausende
                                                              Tabellen benötigen. Dieser Ansatz entspricht nicht der Art
                                                              und Weise, wie Architekten mit Daten umgehen oder wie
                                                              Entwickler Anwendungen schreiben. Mit dem
                                                              dokumentbasierten Modell können Daten viel intuitiver
                                                              modelliert werden.

                                                                                                                           4
Anhand des in Abbildung 5 dargestellten Beispiels einer      basieren. Zwar ist dafür etwas mehr Speicherplatz
Blogging-Plattform lassen sich die Unterschiede zwischen     erforderlich, doch wird dies durch die Effizienzgewinne
dem relationalen und dem dokumentbasierten Modell            vereinfachter Lese- bzw. Schreibprozesse mehr als
weiter verdeutlichen. In diesem Beispiel muss die            aufgewogen. Allerdings gibt es auch Umstände, unter
Anwendung bei der Erstellung eines Blogbeitrags das          denen die Normalisierung der Daten von Vorteil sein kann,
RDBMS anweisen, fünf separate Tabellen durch                 insbesondere wenn Daten aus verschiedenen Quellen zu
JOIN-Operationen zu verknüpfen. Alternativ lassen sich mit   Analysezwecken zusammengeführt werden müssen. Dies
MongoDB alle zur Erzeugung des Blogbeitrags relevanten       kann über die Stufe „$lookup“ des MongoDB Aggregation
Daten in einem einzigen Dokument speichern, das mit nur      Frameworks erfolgen.
einem weiteren Dokument verknüpft ist: einem
                                                             Das Aggregation Framework ist eine Pipeline für die
Nutzerdokument mit Angaben zu den Autoren des
                                                             Datenaggregation, die nach dem Vorbild der
Blogbeitrags und der dazugehörigen Kommentare.
                                                             Datenverarbeitungspipelines modelliert wurde. Die
                                                             Dokumente werden in eine mehrstufige Pipeline
Weitere Vorteile des dokumentbasierten Modells               eingespeist, die die in den Dokumenten enthaltenen Daten
                                                             in die gewünschte Form aggregiert. Auf jeder Stufe werden
Das dokumentbasierte Modell ermöglicht es nicht nur, die
                                                             die Dokumente weiterverarbeitet und verändert.
Daten auf der Datenbankebene in einer intuitiveren Form
abzubilden, sondern bietet darüber hinaus auch Vorteile in   Auch wenn „$lookup“ keine so vielseitige Auswahl an
puncto Leistung und Skalierbarkeit:                          JOIN-Operationen bietet wie manches RDBMS,
                                                             ermöglicht es doch LEFT OUTER EQUI-JOINs, die für
• Das vollständige Dokument kann mit einer einzigen
                                                             eine Reihe von Anwendungen nützlich sind. Mit LEFT
  Anfrage bei der Datenbank angezeigt werden, weshalb
                                                             OUTER EQUI-JOIN werden Dokumente in der „rechten“
  bei der Bearbeitung einer Abfrage die Notwendigkeit
                                                             Collection mit Dokumenten in der „linken“ Collection
  entfällt, mehrere Tabellen mithilfe von JOINs
                                                             abgeglichen und in diese eingebettet.
  miteinander zu verknüpfen. Das MongoDB-Dokument
  wird physisch als ein einziges Objekt gespeichert,         Enthält zum Beispiel die linke Collection Dokumente des
  sodass im Arbeitsspeicher oder auf der Festplatte nur      Typs „Bestellung“, die durch eine Warenkorbanwendung
  ein einziger Lesevorgang notwendig ist. Demgegenüber       generiert werden, dann kann der Operator „$lookup“ die
  erfordern RDBMS-JOINs mehrere Lesezugriffe auf             Angaben im Feld „Produkt_ID“ in diesen Dokumenten mit
  verschiedene physische Speicherorte.                       der Collection „Produkte“ abgleichen und die
• Da jedes Dokument in sich geschlossen ist, wird die        entsprechenden Produktdaten in die Bestellungen
  Verteilung der Datenbank über mehrere Nodes (ein als       einbetten.
  „Sharding“ bezeichneter Vorgang) einfacher, was
                                                             Darüber hinaus bietet MongoDB 3.4 eine neue
  wiederum schier unbegrenzte Möglichkeiten zur
                                                             Aggregationsstufe mit der Bezeichnung „$graphLookup“,
  horizontalen Skalierung mit Standardhardware eröffnet.
                                                             mit der ein Satz von Dokumenten rekursiv nach
  Datenbankadministratoren müssen sich keine Sorgen
                                                             spezifischen Beziehungen zu einem Ausgangsdokument
  mehr darüber machen, ob die auf verschiedenen Nodes
                                                             durchsucht werden kann. Entwickler können die maximale
  gespeicherten Daten mit vertretbarer Leistung (oder
                                                             Tiefe für derartige rekursive Suchvorgänge festlegen und
  überhaupt) durch JOINs zusammengeführt werden
                                                             zusätzliche Filter verwenden, um nur die Nodes zu
  können.
                                                             durchsuchen, die spezifische Bedingungen erfüllen. Mit
                                                             $graphLookup können einzelne oder mehrere Collections
Verknüpfung von Collections im Rahmen von                    abgefragt und rekursiv durchsucht werden.
Abfragen
                                                             Ein ausgearbeitetes Beispiel für die Verwendung von
In den meisten Fällen ist es von Vorteil, wenn die für die   „$lookup“ sowie anderen Aggregationsstufen findet sich im
Unterstützung von Geschäftsprozessen genutzten               Blogbeitrag „JOINS und andere Verbesserungen an der
Datenbanken auf einem denormalisierten Datenmodell           Aggregationspipeline“ (auf Englisch).

                                                                                                                         5
Definition des Dokumentschemas                                     Vor
                                                                    organg
                                                                       gang         R DB
                                                                                      DBMMS-
                                                                                          S-Operation
                                                                                             Operation       MongoDB-
                                                                                                             MongoDB-Operation
                                                                                                                      Operation
Das Schemadesign sollte sich an den                            Produktdatensatz    INSERT in (n)             insert() in 1
Datenzugriffsmustern der Anwendung orientieren und             erstellen           Tabellen                  Dokument
insbesondere die folgenden Punkte berücksichtigen:                                 (Produktbeschreibung,
                                                                                   Preis, Hersteller etc.)
• das Verhältnis der Lese-/Schreibvorgänge im Rahmen
                                                               Produktdatensatz    SELECT und JOIN           find() ein einziges
  von Datenbankoperationen und die eventuelle                  anzeigen            von (n)                   Dokument
  Notwendigkeit, die Performance für einen dieser beiden                           Produkttabellen
  Vorgänge zulasten des anderen zu optimieren
                                                               Produktrezension    INSERT in Tabelle         insert() in
• die Arten von Abfragen und Updates, die von der              hinzufügen          „Rezension“,              Collection
  Datenbank durchgeführt werden sollen                                             einschließlich            „Rezension“,
                                                                                   Fremdschlüssel zu         einschließlich Verweis
• der Lebenszyklus der Daten und die Zuwachsrate der                               Produktdatensatz          zu Produktdokument
  Dokumente
                                                               Weitere             ……                        ……
In einem ersten Schritt sollte das Projektteam die mit den     Vorgänge …
Anwendungsdaten durchzuführenden Operationen
                                                               Abbildung 6: Analyse der Abfragen zur Ermittlung des optimalen
definieren, um auf dieser Grundlage einen Vergleich            Schemas
vorzunehmen:

1. Wie werden diese Operationen derzeit von der               Modellierung von Beziehungen durch
   relationalen Datenbank umgesetzt?                          Einbettungen und Verweise
2. Wie könnten sie mit MongoDB umgesetzt werden?
                                                              Die Entscheidung, ob es sinnvoller ist, ein Dokument in ein
Abbildung 6 illustriert, wie ein solcher Vergleich aussehen   anderes einzubetten oder separate Dokumente in
könnte.                                                       verschiedenen Collections zu erstellen und diese durch
                                                              einen Verweis zu verknüpfen, hängt von der jeweiligen
Diese Analyse hilft dabei, das ideale Dokumentschema zu       Anwendung ab. Einige allgemeinere Überlegungen zum
finden und die Indizes optimal auf die Anwendungsdaten        Schemadesign können jedoch bei dieser Entscheidung
sowie die geplanten Workloads, Datenbankabfragen und          helfen.
Operationen abzustimmen.

Zusätzlich kann das Projektteam die Protokolle des            Einbettung
RDBMS heranziehen, um die häufigsten Abfragen der
                                                              Für Daten, die in Beziehungen mit einer Kardinalität von
bestehenden Anwendung zu ermitteln und damit zugleich
                                                              1:1 oder 1:n zueinander stehen, bietet sich die Einbettung
die Daten, auf die am häufigsten gemeinsam zugegriffen
                                                              in einem einzigen Dokument an (insbesondere, wenn die
wird. Dies gibt Hinweise darauf, welche Daten
                                                              „n“ Objekte immer in Zusammenhang mit dem
möglicherweise zusammen in einem MongoDB-Dokument
                                                              Elterndokument auftreten bzw. angezeigt werden).
gespeichert werden können. Dieser Prozess wird in
                                                              Datenhierarchien und -zugehörigkeiten können ebenfalls
unserem Whitepaper [Die Apollo Group migriert von Oracle
                                                              durch Einbettung modelliert werden. Im oben erläuterten
zu MongoDB] (nur auf English verfügbar)
                                                              Beispiel mit den Produktdaten sollten die Produktpreise
(http://www.mongodb.com/lp/whitepaper/
                                                              (aktuelle und frühere) in das Produktdokument eingebettet
nosql-oracle-migration-mongodb) beispielhaft anhand der
                                                              werden, da sie untrennbar zu diesem bestimmten Produkt
Entwicklung einer neuen cloudbasierten Plattform für das
                                                              gehören und eine Teilmenge der Produktdaten bilden.
Schulungsmanagement erläutert.
                                                              Wenn das Produkt gelöscht wird, werden die
                                                              Preisinformationen überflüssig.

                                                                                                                         6
Auch Felder, die stets zusammen modifiziert werden                            • wenn viele verschiedene Quellen auf ein Objekt
müssen, sollten in dasselbe Dokument eingebettet werden.                        verweisen
Nähere Informationen dazu finden Sie in diesem Leitfaden                      • zur Abbildung komplexer n:m-Beziehungen
im Abschnitt „Anwendungsintegration“.
                                                                              • zur Modellierung großer, hierarchischer Datensätze
Doch nicht alle 1:1- und 1:n-Beziehungen sollten in einem
                                                                             In der „$lookup“-Stufe der Aggregationspipeline können
einzigen Dokument abgebildet werden. In den folgenden
                                                                             die in den Dokumenten der ersten Collection enthaltenen
Fällen sind Verweise zwischen Dokumenten in
                                                                             Verweise mit den „_id“-Feldern der zweiten Collection
unterschiedlichen Collections die bessere Wahl:
                                                                             abgeglichen und die referenzierten Daten automatisch in
• Wenn ein Dokument häufig gelesen wird, aber ein                            den Ergebnisdatensatz eingebettet werden.
  eingebettetes Unterdokument enthält, das nur selten
  aufgerufen wird. Ein Beispiel hierfür wäre ein
                                                                             Für unterschiedliche Zwecke optimiert
  Kundendatensatz, in den Kopien der Jahresberichte
  eingebettet sind. Die Einbettung der Berichte vergrößert                   Der Vergleich der beiden Modellierungsoptionen –
  nur den Arbeitsdatensatz der Collection und erhöht                         Einbettung von Unterdokumenten versus Erstellung von
  somit die Anforderungen an den Arbeitsspeicher.                            Verweisen zwischen Dokumenten – hebt einen
• Wenn ein Teil des Dokuments häufig aktualisiert wird                       wesentlichen Unterschied zwischen relationalen und
  und kontinuierlich an Umfang zunimmt, während der                          dokumentbasierten Datenbanken hervor:
  Rest des Dokuments im Großen und Ganzen
                                                                              • Ein RDBMS ist vor allem auf die möglichst effiziente
  unverändert bleibt.
                                                                                Nutzung des Datenspeichers ausgelegt, da es aus einer
• Wenn das kombinierte Dokument die von MongoDB                                 Zeit stammt, in der der Speicherplatz die teuerste
  vorgegebene Größenbeschränkung von 16 MB                                      Komponente einer Datenbankinfrastruktur war.
  überschreiten würde.
                                                                              • Das dokumentbasierte Modell von MongoDB ist im
                                                                                Hinblick auf den Datenzugriff durch Anwendungen
Verweise                                                                        optimiert und trägt der Tatsache Rechnung, dass
                                                                                Leistung, kurze Entwicklungsprozesse und eine rasche
Verweise ermöglichen die Normalisierung der Daten und                           Markteinführung heute wichtiger sind als ein
bieten im Vergleich zur Einbettung ein höheres Maß an                           minimierter Speicherplatzbedarf.
Flexibilität. Allerdings muss die Anwendung zur Auflösung
von Verweisen Nachfolgeabfragen initiieren, wodurch                          Weitere Überlegungen, Muster und Beispiele zur
zusätzliche Serveranfragen erforderlich werden.                              Datenmodellierung einschließlich ausführlicherer
                                                                             Informationen zur Einbettung und zu Verweisen finden Sie
Verweise werden üblicherweise in einem „_id“-Feld1                           in der Dokumentation.
abgebildet, das in einem oder mehr Dokumenten erscheint.
Wird ein solches Dokument im Rahmen einer Abfrage
aufgerufen, führt die Anwendung eine zweite Abfrage                          Indizierung
durch, um auch die darin referenzierten Daten auszugeben.
                                                                             Bei jeder Datenbank hängt die Performance entscheidend
In den folgenden Fällen sollten Verweise verwendet                           von den verwendeten Indizes ab. Dadurch wird die
werden:                                                                      Festlegung und Feinabstimmung der Indizes zu einem
                                                                             wesentlichen Teil des Schemadesigns.
• bei 1:1- oder 1:n-Beziehungen, wenn die Vorteile, die
  die Einbettung in puncto Leseperformance bietet, die                       Indizes in MongoDB entsprechen im Großen und Ganzen
  Auswirkungen der Datenduplizierung nicht aufwiegen                         den Indizes einer relationalen Datenbank. MongoDB
  würden.                                                                    verwendet B-Baum-Indizes und ist von Haus aus auf die

1. Hierbei handelt es sich um ein erforderliches eindeutiges Feld, das in einem MongoDB-Dokument als Primärschlüssel verwendet wird. Es wird
entweder automatisch vom Treiber erzeugt oder vom Anwender eingegeben.

                                                                                                                                               7
Unterstützung sekundärer Indizes ausgelegt. Daher wird es      werden, die in Abhängigkeit von diesen drei Werten den
allen, die sich mit SQL auskennen, sofort geläufig sein.       Datensatz der entsprechenden Person ausfindig
                                                               machen. Ein zusätzlicher Vorteil eines derartigen
Bei der Auswahl der Indizes sollten die Art und Häufigkeit
                                                               zusammengesetzten Indexes besteht darin, dass er
der durch die Anwendung initiierten Abfragen die
                                                               auch für Abfragen verwendet werden kann, die nur die
ausschlaggebenden Faktoren sein. Wie bei allen
                                                               bei der Indexerzeugung zuerst genannten Felder
Datenbanken hat die Indizierung ihren Preis: Sie führt zu
                                                               betreffen. Dadurch werden eventuell Indizes, die nur auf
zusätzlichen Arbeitslasten bei Schreibvorgängen und einer
                                                               einem Feld basieren, überflüssig. Im zuvor genannten
gesteigerten Ressourcenauslastung (Festplatte und
                                                               Beispiel würde der zusammengesetzte Index auch
Arbeitsspeicher).
                                                               Abfragen beschleunigen, bei denen Kundendaten nur
                                                               anhand des Nachnamens oder anhand des
Indexarten                                                     Nachnamens und des Vornamens (ohne
                                                               Berücksichtigung des Wohnsitzlandes) gesucht wird.
MongoDB verfügt über ein funktionsreiches
Abfragemodell, das flexible Zugriffsmöglichkeiten auf die    • Eindeutige Indizes: Wird ein Index als eindeutig
Daten bietet. Standardmäßig erstellt MongoDB einen Index       definiert, blockiert MongoDB das Einfügen neuer
für das Primärschlüsselfeld („_id“) der Dokumente.             Dokumente oder die Aktualisierung bestehender
                                                               Dokumente, falls dadurch Doppelungen bei den Werten
Alle anwenderdefinierten Indizes sind Sekundärindizes.         des indizierten Feldes entstehen würden. Wird ein
Sekundärindizes können für beliebige Felder eingerichtet       zusammengesetzter Index als eindeutig definiert, muss
werden, einschließlich für Felder in Unterdokumenten und       die Kombination der Werte eindeutig sein.
eingebetteten Arrays.
                                                             • Array-Indizes: Bei Feldern, die ein Array enthalten, wird
MongoDB bietet unter anderem die folgenden                     jeder Arraywert als eigener Indexeintrag gespeichert.
Indexoptionen:                                                 Zum Beispiel enthalten Dokumente mit
                                                               Produktbeschreibungen möglicherweise ein Array mit
• Indexverknüpfung und zusammengesetzte Indizes:               den wichtigsten Eigenschaften. Wenn es einen Index
  Durch die Nutzung der Möglichkeit zur Verknüpfung von        des Eigenschaftenfeldes gibt, wird jedes Attribut einzeln
  Indizes lassen sich in MongoDB Abfragen erstellen, bei       indiziert und Abfragen des Eigenschaftenfeldes können
  denen mehrere Indizes zur Identifizierung und Ausgabe        über diesen Index optimiert werden. Zur Erstellung
  der gewünschten Daten herangezogen werden. Diese             eines Array-Index ist keine spezielle Syntax erforderlich
  Funktion ist nützlich für Ad-hoc-Abfragen, da deren          – wenn das Feld ein Array enthält, wird es als
  Datenzugriffsmuster im Allgemeinen nicht im Voraus           Array-Index indiziert.
  bekannt sind. Wenn jedoch im Voraus bekannt ist,
                                                             • TTL
                                                                 TL-Indizes:
                                                                   -Indizes: In manchen Fällen sollen Daten
  welche Prädikate im Rahmen von Abfragen für den
                                                               automatisch entfernt werden. Mit Time-To-Live-Indizes
  Datenzugriff verwendet werden und welche Sortierung
                                                               (TTL) kann der Anwender einen Zeitraum bestimmen,
  gewünscht ist, bietet sich die Verwendung
                                                               nach dessen Ablauf die Daten automatisch aus der
  zusammengesetzter Indizes an. Diese Indizes fassen
                                                               Datenbank gelöscht werden. Eine gängige Verwendung
  mehrere Felder in einer linearen Indexstruktur
                                                               von TTL-Indizes sind Anwendungen, die ein
  zusammen und bieten gegenüber der Indexverknüpfung
                                                               kontinuierlich aktualisiertes Fenster mit einer Chronik
  Vorteile in puncto Performance. Nehmen wir zum
                                                               des Clickstreams und anderer Nutzeraktionen (zum
  Beispiel eine Anwendung zur Verwaltung von
                                                               Beispiel der letzten 100 Tage) enthalten.
  Kundendaten. Eine solche Anwendung muss unter
  anderem in der Lage sein, Kunden anhand des                • Geoindizes: MongoDB ermöglicht die Nutzung von
  Nachnamens, Vornamens und Land des Wohnsitzes zu             Geoindizes, um ortsbezogene Abfragen in einem
  finden. Durch die Nutzung eines zusammengesetzten            zweidimensionalen Raum zu optimieren, zum Beispiel
  Indexes, der auf den Feldern Nachname, Vorname und           für Projektionssysteme für die Erde. Mithilfe dieser
  Land des Wohnsitzes basiert, können Abfragen initiiert       Indizes kann MongoDB Abfragen optimieren, mit denen

                                                                                                                      8
nach Dokumenten gesucht wird, die ein Polygon oder         Alle MongoDB-Datenbank-Engines unterstützen alle
  Punkte enthalten, die am nächsten an einem                 Indexarten und die Indizes können für jeden Teil eines
  angegebenen Punkt oder einer Linie liegen oder             JSON-Dokuments erstellt werden, auch basierend auf
  innerhalb eines Kreises, Rechtecks oder Vielecks liegen    Unterdokumenten und Array-Elementen. Dadurch sind sie
  oder einen Kreis, ein Rechteck oder ein Vieleck            viel leistungsfähiger als die Indizes in RDBMS.
  schneiden.

• Gestr
  Gestreute
         eute Indizes (Sparse Indexes): Gestreute            Leistungsoptimierung mit Indizes
  Indizes enthalten nur Einträge für Dokumente, die ein
  bestimmtes Feld enthalten. Da in MongoDB das               MongoDB verfügt über einen Abfrageoptimierer, der die
  Datenmodell von Dokument zu Dokument variieren             Auswahl des Index auf der Basis empirischer
  kann, ist es nicht ungewöhnlich, dass manche Felder        Leistungsdaten vornimmt, indem er von Zeit zu Zeit
  nur in einer Teilmenge aller Dokumente vorkommen.          alternative Abfragepläne verwendet und den Plan mit der
  Gestreute Indizes bieten die Möglichkeit schlankerer,      kürzesten Antwortzeit auswählt. Mit der Methode
  effizienterer Indexstrukturen, wenn die zu indizierenden   „cursor.hint()“ kann der Abfrageoptimierer übergangen
  Felder nicht in allen Dokumenten vorhanden sind.           werden.

• Partielle Indizes: Partielle Indizes können als eine       Wie bei einer relationalen Datenbank kann der
  flexiblere Weiterentwicklung des gestreuten Index          Datenbankadministrator Abfragepläne einsehen und
  betrachtet werden. Sie eröffnen dem                        sicherstellen, dass für gängige Abfragen wohldefinierte
  Datenbankadministrator die Möglichkeit, einen              Indizes verwendet werden. Dazu gibt es die Funktion
  Ausdruck festzulegen, der geprüft wird, um darüber zu      „explain()“, die Auskunft darüber gibt ...
  entscheiden, ob ein Dokument in einen bestimmten
                                                             • wie viele Dokumente ausgegeben wurden,
  Index aufgenommen werden soll. Z. B. wird in einer
  Collection „Bestellungen“ ein Index des Status und         • welcher Index verwendet wurde bzw. ob überhaupt ein
  Lieferanten nur für offene Bestellungen benötigt. Der        Index verwendet wurde,
  Index könnte also die Bedingung „{orderState: "active"}“   • ob das Abfrageergebnis bereits gespeichert war, sodass
  enthalten und so die Belastung von Arbeitsspeicher und       die Ergebnisse ausgegeben werden konnten, ohne
  Speicherplatz sowie die Schreibleistung reduzieren und       dass Dokumente gelesen werden mussten,
  Suchabfragen der offenen Bestellungen weiter
                                                             • ob eine Sortierung im Arbeitsspeicher erfolgt ist (was
  optimieren.
                                                               darauf hinweist, dass ein Index von Vorteil wäre),
• Hash-Indizes: Hash-Indizes berechnen für den Wert in
                                                             • wie viele Indexeinträge durchsucht wurden,
  einem Feld einen Hashwert, den sie dann indizieren.
  Derartige Indizes werden vor allem für das hashbasierte    • wie viele Dokumente gelesen wurden,
  Sharding eingesetzt und ermöglichen eine einfache und      • wie viel Zeit zur Bearbeitung der Abfrage benötigt
  gleichmäßige Verteilung von Dokumenten auf die               wurde (in Millisekunden),
  Shards.
                                                             • welche alternativen Abfragepläne geprüft und
• Volltextindizes: MongoDB bietet einen speziellen             verworfen wurden.
  Index für Textsuchen, der komplexe, sprachspezifische
  linguistische Regeln für die Stammformreduktion,           Es ist zwar nicht unbedingt notwendig, die Datenbank
  Tokenisierung und Stoppwörter verwendet. Abfragen,         gleich zu Projektbeginn auf mehrere Shards zu verteilen,
  die den Volltextindex verwenden, geben die Dokumente       doch ist es immer ratsam, davon auszugehen, dass zu
  nach ihrer Relevanz geordnet aus. Zu jeder Collection      einem späteren Zeitpunkt skaliert werden muss, z. B.
  darf es höchstens einen Volltextindex geben, doch kann     infolge wachsender Datenvolumen oder Nutzerzahlen. Die
  dieser mehrere Felder enthalten.                           Definition der Indexschlüssel im Rahmen des
                                                             Schemadesigns hilft auch dabei, Schlüssel zu identifizieren,
                                                             die zur anwendungstransparenten Skalierung mithilfe der

                                                                                                                        9
Abbildung 7: Visualisiertes Abfrageprofil in MongoDB Ops Manager

Auto-Sharding-Funktion von MongoDB genutzt werden              somit die Erkennung von langsameren Abfragen mit
können.                                                        gängigen Zugriffsmustern und Eigenschaften sowie von
                                                               Latenzspitzen.
MongoDB verfügt über eine Reihe von Protokollierungs-
und Überwachungstools, die dafür sorgen, dass Collections      Der Visual Query Profiler analysiert die erfassten Daten
in geeigneter Weise indiziert und Abfragen optimiert           und liefert Empfehlungen für neue Indizes, die zur
werden. Diese Tools sollten sowohl in der                      Verbesserung der Abfrageleistung eingerichtet werden
Entwicklungsphase als auch beim geschäftlichen Einsatz         können. Der Ops bzw. Cloud Manager bietet die
der Anwendungen genutzt werden.                                Möglichkeit zur automatisierten Implementierung
                                                               vorgeschlagener Indizes in das Produktionssystem. Dies
Der MongoDB Database Profiler wird überwiegend für
                                                               geschieht mittels eines schrittweisen Erstellungsprozesses,
Belastungstests und bei der Fehlersuche genutzt. Er
                                                               durch den jegliche Beeinträchtigung der Anwendung
protokolliert wahlweise alle Datenbankoperationen oder
                                                               vermieden wird.
nur die Ereignisse, deren Bearbeitung einen festgesetzten
Schwellenwert überschreitet (die Voreinstellung ist 100        MongoDB Compass bietet visuelle Darstellungen der
ms). Profildaten werden in einer größenbegrenzten              Abfrageprozesse. Sie enthalten die wichtigsten
Collection („Capped Collection“) gespeichert und können        Informationen darüber, wie Abfragen ausgeführt und
dort mühelos nach relevanten Ereignissen durchsucht            bearbeitet werden. Zum Beispiel geht aus ihnen hervor, wie
werden – oft ist eine Abfrage dieser Collection einfacher      viele Dokumente als Antwort auf eine Abfrage
als das Parsen der entsprechenden Logdateien.                  ausgegeben wurden, wie lange die Ausführung der
                                                               Abfrage gedauert hat und ob bzw. welche Indizes dabei
Der neue Visual Query Profiler ist Bestandteil der
                                                               genutzt wurden. Jede Stufe der Abfragepipeline wird als
MongoDB-Plattformen Ops Manager und Cloud Manager.
                                                               Knoten eines Baums dargestellt. Auf diese Weise
Er bietet Ihren für den Datenbankbetrieb und die
                                                               entstehen aussagekräftige Übersichten über
Datenbankadministration zuständigen Experten schnelle
                                                               Abfrageprozesse, in die mehrere Nodes einbezogen
und bequeme Funktionen für die Analyse bestimmter
                                                               wurden.
Datenbankabfragen oder Abfragetypen. Der Visual Query
Profiler (Abbildung 7) zeigt an, wie Abfrage- und
Schreiblatenzen im Laufe der Zeit variieren, und erleichtert

                                                                                                                        10
Design und fortlaufende                                     einige Tage, doch häufig nimmt dieser Schritt Wochen oder
Weiterentwicklung von Schemata                              Monate in Anspruch.

Das dynamische Schema von MongoDB bietet gegenüber          Mit MongoDB können Entwickler das Schema in einem
relationalen Datenbanken erhebliche Vorteile.               schrittweisen und agilen Prozess aufbauen. Sie können
                                                            sofort damit beginnen, Code zu schreiben, und neu
Zur Erstellung von Collections ist es nicht erforderlich,   generierte Objekte sofort in die Datenbank einspeisen.
zunächst ihre Struktur, d. h. Dokumentfelder und            Auch wenn sie weitere Funktionen hinzufügen, speichert
Datentypen, festzulegen. Darüber hinaus müssen die          MongoDB die aktualisierten Objekte, ohne dass teure
Dokumente in einer Collection nicht alle dieselben Felder   „ALTER TABLE“-Operationen durchgeführt oder Schemata
enthalten. Und schließlich lässt sich die Struktur der      komplett neu entworfen werden müssen.
Dokumente einfach durch Hinzufügen neuer Felder bzw.
durch das Löschen bestehender Felder ändern.                Diese Vorteile bestehen auch bei der Pflege der
                                                            Anwendung nach der Produktivsetzung. Wenn dagegen
Diese Vorteile lassen sich besonders gut am Beispiel der    eine relationale Datenbank verwendet wird, kann durch das
verschiedenen Datensätze in einer Kundendatenbank           Upgrade einer Anwendung die Notwendigkeit entstehen,
veranschaulichen:                                           Felder hinzuzufügen oder anzupassen. Solche Änderungen
                                                            erfordern ein konzertiertes Vorgehen von
• Manche Kundenunternehmen haben mehrere
                                                            Datenbankadministratoren, Entwicklern und der für den
  Geschäftsstellen und -bereiche, andere nicht.
                                                            Datenbankbetrieb zuständigen Teams, die sich für ein
• Die Anzahl der Kontaktpersonen und                        synchrones Upgrade der Anwendung und der Datenbank
  Kommunikationskanäle kann von Kunde zu Kunde              darüber abstimmen müssen, wann die notwendigen
  variieren.                                                „ALTER TABLE“-Operationen durchgeführt werden sollen.
• Für diese verschiedenen Personen und Kanäle können
                                                            Da MongoDB eine dynamische Weiterentwicklung der
  unterschiedliche Informationen abgelegt sein, z. B.
                                                            Schemata unterstützt, muss für solche Operationen
  unterhalten einige Social-Media-Feeds, deren
                                                            lediglich die Anwendung aktualisiert werden; in der Regel
  Verfolgung nützlich sein kann, und andere nicht.
                                                            sind keine Maßnahmen in MongoDB erforderlich. Die
• Jeder Kunde bezieht vom Anbieter unterschiedliche         Weiterentwicklung von Anwendungen ist einfach und
  Services, für die wiederum jeweils eigene Verträge        Projektteams können die Flexibilität verbessern und die
  bestehen.                                                 Zeit bis zur Marktreife verkürzen.

Im starren, zweidimensionalen Schema einer relationalen     Wenn ein Datenbankadministrator oder Entwickler
Datenbank ist die Modellierung dieser enormen Bandbreite    entscheidet, dass bestimmte Beschränkungen der
von Konstellationen kompliziert und umständlich. Dagegen    Dokumentstruktur vorgenommen werden müssen, können
ist die Möglichkeit zur nahtlosen Erstellung von            jederzeit Regeln für die Dokumentvalidierung hinzugefügt
Datenbanken aus verschiedenartigen Dokumenten einer         werden. Nähere Informationen dazu finden Sie weiter
der grundlegenden Vorteile der BSON-Dokumente in            unten in diesem Leitfaden.
MongoDB.

Die flexiblen und dynamischen Schemata von MongoDB
ermöglichen die einfache Entwicklung und laufende
                                                            Anwendungsintegration
Weiterentwicklung der Schemata. Im Unterschied dazu
müssen Entwickler und Datenbankadministratoren bei der      Nachdem das Schemadesign festgelegt wurde, kann die
Verwendung einer relationalen Datenbank im Rahmen           Anwendung mit der Datenbank verknüpft werden. Hierzu
eines neuen Entwicklungsprojekts zunächst das               bietet MongoDB vielseitige Treiber und Tools.
Datenbankschema festlegen, bevor sie überhaupt die erste
                                                            Datenbankadministratoren können MongoDB außerdem so
Zeile Code schreiben können. Im besten Fall dauert dies
                                                            konfigurieren, dass die Anforderungen der Anwendung

                                                                                                                        11
hinsichtlich Datenkonsistenz und -dauerhaftigkeit erfüllt       Beispielen, die bei der Umstellung auf die Struktur und
werden. Diese Aspekte werden im Folgenden erläutert.            Semantik der MongoDB-Abfragesprache helfen.
                                                                Außerdem bietet MongoDB einen umfangreichen Katalog
                                                                fortgeschrittener Abfrageoperatoren.
MongoDB-Treiber und die API
MongoDB ist unter anderem auf maximale
                                                                Das MongoDB Aggregation Framework
Anwenderfreundlichkeit und Entwicklerproduktivität
ausgelegt.                                                      Die Aggregation von Daten innerhalb einer Datenbank ist
                                                                eine wichtige Funktion und eine der Stärken von RDBMS.
Ein entscheidender Unterschied zwischen einem
SQL-basierten RDBMS und MongoDB besteht darin, dass             Viele NoSQL-Datenbanken haben keine
die MongoDB-Schnittstelle in Form von Methoden (oder            Aggregationsfunktionen. Das führte in der Vergangenheit
Funktionen) im API einer bestimmten Programmiersprache          dazu, dass Entwickler bei der Migration zu einer
implementiert ist und nicht in einem API, das auf einer         NoSQL-Datenbank Behelfslösungen finden mussten, wie
eigenen textbasierten Sprache basiert, wie dies in SQL der      beispielsweise:
Fall ist. Zusammen mit der Affinität zwischen dem
                                                                1. Die Erstellung eigener Aggregationsfunktionen und
BSON-Dokumentmodell von MongoDB und den in
                                                                   deren Einbettung in den Anwendungscode: Dies führt
modernen Programmiersprachen verwendeten
                                                                   zu mehr Komplexität und Performancedefiziten.
Datenstrukturen erleichtert dies die
Anwendungsintegration beträchtlich.                             2. Die Übermittlung eines Datenbankexports an Hadoop,
                                                                   um dort MapReduce-Operationen durchzuführen: Auch
MongoDB bietet Treiber für die gängigsten                          hierdurch nimmt die Komplexität deutlich zu. Zudem
Programmiersprachen, darunter elf von MongoDB                      werden Daten über mehrere Speicherorte dupliziert und
entwickelte und unterstützte Treiber (z. B. für Java, Python,      Echtzeitanalysen sind nicht möglich.
.NET, PHP) und über 30 von der Community unterstützte
                                                                3. Falls möglich, die Durchführung nativer
Treiber.
                                                                   MapReduce-Operationen innerhalb der
Die MongoDB-Treiber für spezifische                                NoSQL-Datenbank selbst:
Programmiersprachen reduzieren die Einarbeitungszeit für
                                                                MongoDB stellt zu diesem Zweck das in die Datenbank
neue Entwickler auf ein Minimum und vereinfachen die
                                                                integrierte Aggregation Framework bereit, das ähnliche
Anwendungsentwicklung. Zum Beispiel können
                                                                Funktionen wie „GROUP BY“, „JOIN“ und vergleichbare
Java-Entwickler Code für MongoDB direkt in Java
schreiben. Gleiches gilt für Ruby-Entwickler,                   SQL-Befehle bietet.
PHP-Entwickler usw. Die Treiber werden von                      Mit dem Aggregation Framework durchlaufen Dokumente
Entwicklungsteams erstellt, die Experten in ihrer jeweiligen    aus einer Collection eine Aggregationspipeline und werden
Programmiersprache sind und die bevorzugten                     dort in Stufen verarbeitet. Die verschiedenen Ausdrücke
Arbeitsmethoden von Programmierern in dieser Sprache            führen Rechenoperationen mit den in den
kennen.                                                         Eingabedokumenten enthaltenen Daten durch und
                                                                generieren entsprechende Ausgabedokumente. Die in der
                                                                Stufe „$group“ verwendeten Akkumulatorausdrücke
Die Übertragung von SQL-Befehlen in die
                                                                ermitteln Statusinformationen (z. B. Gesamtsummen,
MongoDB-Syntax
                                                                Maximal-, Minimal- und Durchschnittswerte sowie
Für Entwickler, die mit SQL vertraut sind, ist es nützlich,     Standardabweichung und ähnliche Daten) und bewahren
nachvollziehen zu können, wie zentrale SQL-Befehle wie          diese auf, während die Dokumente die Pipeline
„CREATE“, „ALTER“, „INSERT“, „SELECT“, „UPDATE“ und             durchlaufen.
„DELETE“ in der MongoDB-API abgebildet werden.
                                                                Außerdem kann das Aggregation Framework mithilfe von
Unsere Dokumentation enthält eine Vergleichstabelle mit
                                                                Projektionen, Filtern, Redacts, Lookups (JOINs) und

                                                                                                                         12
rekursiven graphLookups Dokumente bearbeiten und               SQL-basierte BI-Tools wie Tableau benötigen eine
kombinieren.                                                   Datenquelle mit einem festen, tabellarischen Schema. Für
                                                               Nutzer von MongoDB mit seinem dynamischen Schema
Die Tabelle zur Übersetzung von SQL-Befehle in
                                                               und den vielfältigen, mehrdimensionalen Dokumenten stellt
Aggregationen-Operatoren enthält eine Reihe von
                                                               dies eine Herausforderung dar. Damit BI-Tools MongoDB
Beispielen, die illustrieren, wie sich SQL-Abfragen in das
                                                               als Datenquelle für ihre Abfragen nutzen können, dient der
MongoDB Aggregation Framework übertragen lassen. Für
                                                               BI-Konnektor als Vermittler:
komplexere Analysen unterstützt MongoDB außerdem
MapReduce-Operationen in Collections – unabhängig              • Er liefert dem BI-Tool ein Schema der
davon, ob diese auf mehrere Shards verteilt sind oder nicht.     MongoDB-Collections, die visualisiert werden sollen.
                                                                 Nutzer können das ausgegebene Schema überprüfen,
                                                                 um sicherzustellen, dass Datentypen, Unterdokumente
Integration mit Business                                         und Arrays korrekt dargestellt werden.
Intelligence-Lösungen – der MongoDB
                                                               • Er übersetzt vom BI-Tool ausgegebene
Connector for BI                                                 SQL-Anweisungen in die entsprechenden
Infolge des wachsenden Bedarfs an Tools für                      MongoDB-Abfragen, die dann zur Bearbeitung an
Self-Service-Datenanalysen, die schnellere                       MongoDB weitergeleitet werden.
Datenauffindung und zur Erstellung von Prognosen auf der       • Er wandelt die empfangenen Ergebnisse in das vom
Grundlage von Echtzeitdaten zum operativen Geschäft              BI-Tool benötigte Tabellenformat um, sodass die Daten
sowie aufgrund der Notwendigkeit, multistrukturelle              entsprechend den Nutzeranforderungen angezeigt
Datensätze und Streaming-Daten in Analyseprozesse                werden können.
einzubeziehen, sind BI- und Analyseplattformen eines der
am schnellsten wachsenden Segmente des                         Außerdem haben zahlreiche Anbieter von BI-Lösungen
Softwaremarktes.                                               Konnektoren entwickelt, mit denen neben den
                                                               herkömmlichen relationalen Datenbanken auch MongoDB
In MongoDB gespeicherte Daten aus modernen                     mit ihrer jeweiligen Suite integriert werden kann, ohne dass
Anwendungen können einfach mit branchenüblichen,               dafür SQL genutzt werden muss. Durch die Integration von
SQL-basierten BI- und Analyseplattformen untersucht            MongoDB mit BI-Tools erhalten die Nutzer Funktionen für
werden. Mit dem BI-Konnektor können Analysten,                 die Erstellung von Berichten, Ad-hoc-Analysen und
Datenexperten und geschäftliche Nutzer jetzt die               Dashboards sowie zur Visualisierung und Analyse von
gängigsten, in Millionen von Unternehmen verwendeten           Daten aus verschiedenen Datenquellen. Hierfür sind Tools
BI-Tools nutzen, um halbstrukturierte und unstrukturierte      von einer ganzen Reihe von Anbietern verfügbar, darunter
Daten in MongoDB gemeinsam mit Daten aus ihren                 Actuate, Alteryx, Informatica, JasperSoft, Logi Analytics,
herkömmlichen SQL-Datenbanken zu visualisieren.                MicroStrategy, Pentaho, QlikTech, SAP Lumira und Talend.

                                                                                                                         13
Abbildung 8: Gewinnen Sie neue, tiefere Einblicke mit den leistungsfähigen Visualisierungsfunktionen von MongoDB

Atomarität in MongoDB                                         Wahrung der starken Konsistenz
Relationale Datenbanken bieten typischerweise                 Standardmäßig leitet MongoDB alle Lesezugriffe an die
ausgereifte Funktionen zur Sicherstellung der                 Primary Nodes, um für eine starke Konsistenz zu sorgen.
Datenintegrität, wie ACID-Transaktionen und die               Ebenfalls standardmäßig erfolgt die Synchronisierung der
Durchsetzung von Beschränkungen. Anwender möchten zu          Secondary Nodes innerhalb eines Replica Sets in
Recht vermeiden, dass ein Wechsel zu einem anderen            MongoDB zeitverzögert – ganz ähnlich wie bei der
Datenbanktyp zulasten der Datenintegrität geht. Mit           Master-Slave-Replikation in relationalen Datenbanken.
MongoDB profitieren sie von vielen diesbezüglichen
                                                              Administratoren können durch die Festlegung von
Funktionen relationaler Datenbanken, auch wenn die
                                                              Lesepräferenzen für die Secondary Nodes steuern, wie die
technische Umsetzung möglicherweise anders ausfällt.
                                                              Leseoperationen der Clients zu den Servern eines Replica
Schreibvorgänge in MongoDB haben auf Dokumentebene            Sets geroutet werden.
ACID-Eigenschaften – und ermöglichen dadurch sogar die
atomare Aktualisierung eingebetteter Arrays und
Unterdokumente. Durch die Einbettung
                                                              Dauerhaftigkeit der Schreibprozesse
zusammengehöriger Felder in ein- und dasselbe Dokument        In MongoDB stehen verschiedene Write Concerns zur
genießen die Anwender dasselbe Maß an Sicherheit              Verfügung, mit denen sich festlegen lässt, welche Art von
hinsichtlich der Integrität wie bei einem herkömmlichen       Rückmeldung auf einen Schreibvorgang erfolgt bzw. mit
RDBMS, das jedoch seinerseits rechenintensive                 welcher Sicherheit ein initiierter Schreibvorgang
ACID-Operationen synchronisieren und über separate            durchgeführt wird. Die Optionen reichen von
Tabellen hinweg die referenzielle Integrität bewahren muss.   Schreibanfragen ohne jegliche Empfangs- oder
                                                              Erfolgsbestätigung bis hin zu mehrstufigen
Durch die Atomarität auf Dokumentebene ist in MongoDB
                                                              Schreibprozessen, die erst dann abgeschlossen werden,
sichergestellt, dass Dokumente bei einer Aktualisierung
                                                              wenn eine Erfolgsbestätigung mehrerer Nodes
vollständig isoliert sind. Tritt ein Fehler auf, wird der
                                                              eingegangen ist.
Vorgang rückgängig gemacht. So erhalten Clients stets
eine konsistente Sicht des Dokuments.                         Bei der Auswahl des schwächsten Write Concerns sendet
                                                              die Anwendung die zu schreibenden Daten an MongoDB
Allerdings kann es Anwendungsfälle geben, in denen
                                                              und bearbeitet dann weitere Anfragen, ohne auf eine
ACID-Transaktionen für mehrere Dokumente gleichzeitig
                                                              Antwort der Datenbank zu warten. Dadurch wird die
nötig sind. Für solche Fälle gibt es verschiedene Ansätze.
                                                              Performance optimiert. Diese Option ist nützlich für
Einer basiert auf dem Befehl „findAndModify“, mit dem ein
                                                              Anwendungen im Bereich Protokollierung, wo Nutzer
Dokument atomar aktualisiert und im gleichen Vorgang
                                                              typischerweise Trends in den Daten analysieren und nicht
zurückgegeben werden kann. „findAndModify“ ist ein
                                                              einzelne Ereignisse.
leistungsfähiger Grundbaustein, auf dem Nutzer
komplexere Transaktionsprotokolle aufbauen können. Zum        Bei stärkeren Write Concerns sind keine weiteren
Beispiel erstellen Nutzer häufig atomare Soft-State-Locks,    Schreibvorgänge möglich, bis MongoDB den Vorgang
Job-Queues, Zähler und Zustandsmaschinen, die dabei           durchgeführt und den Erfolg bestätigt hat (oder eine
helfen können, komplexere Prozesse zu koordinieren. Eine      entsprechende Fehlermeldung vorliegt). Dies ist die
Alternative besteht in der Implementierung von                Standardeinstellung von MongoDB. Es existieren
Zwei-Phasen-Commit. In unserer Dokumentation wird             zahlreiche Möglichkeiten zur Feineinstellung der
beschrieben, wie dies in MongoDB umgesetzt werden             Dauerhaftigkeit der Schreibprozesse. Diese basieren
kann und was bei der Verwendung unbedingt beachtet            darauf, dass der Erfolg der Replikation der zu schreibenden
werden sollte.                                                Daten an eine der folgenden Bedingungen geknüpft wird:

                                                                                                                          14
• Der Schreibvorgang war auf einem einzigen Secondary        Dokumentation enthält ausführlichere Informationen über
  Node erfolgreich.                                          Write Concerns.

• Der Schreibvorgang war auf der Mehrzahl der                MongoDB befolgt das WAL-Prinzip (write-ahead logging)
  Secondary Nodes erfolgreich.                               und protokolliert Vorgänge vor dem eigentlichen
• Der Schreibvorgang war auf einer festgelegten Anzahl       Schreibvorgang in einem Journal auf der Festplatte.
  von Secondary Nodes erfolgreich.                           Dadurch lassen sich die Dauerhaftigkeit von
                                                             Schreibvorgängen und ein hohes Maß an Robustheit bei
• Der Schreibvorgang war auf allen Secondary Nodes
                                                             Ausfällen sicherstellen.
  erfolgreich – auch wenn diese in verschiedenen
  Rechenzentren eingerichtet sind (in diesem Fall sollten    Bevor eine Änderung in der Datenbank vorgenommen wird
  Nutzer die Auswirkungen auf die Netzwerklatenz             – unabhängig davon, ob es sich um einen Schreibvorgang
  sorgfältig abwägen).                                       oder eine Indexmodifizierung handelt –, hält MongoDB den
                                                             Änderungsvorgang im Journal fest. Falls ein Server ausfällt
                                                             oder ein Fehler in MongoDB auftritt, bevor die Änderung
                                                             vom Journal in die Datenbank übertragen wurde, kann der
                                                             protokollierte Vorgang erneut durchgeführt werden. Auf
                                                             diese Weise wird nach der Wiederherstellung des Servers
                                                             für einen konsistenten Status der Datenbank gesorgt.

                                                             Implementierung von
                                                             Validierungsprozessen und
                                                             Schreibbeschränkungen

                                                             Fremdschlüssel
                                                             Wie bereits dargelegt werden viele JOINS durch das
                                                             dokumentbasierte Modell von MongoDB JOINs
                                                             überflüssig, weil die zu verknüpfenden Daten in einem
                                                             einzigen, atomar aktualisierbares BSON-Dokument
                                                             eingebettet werden. Dadurch werden gleichzeitig viele
                                                             Fremdschlüssel und die Regeln zur Sicherstellung ihrer
                                                             Integrität überflüssig.

                                                             Wenn Sie jedoch Fremdschlüssel nutzen und Funktionen
                                                             zu deren Verwaltung benötigen, können Sie Frameworks
   Abbildung 9: Konfiguration der Dauerhaftigkeit von
                  Schreibvorgängen                           von Drittanbietern wie Mongoose oder PyMODM
                                                             verwenden.
Mit einem Write Concern kann auch sichergestellt werden,
dass die Änderung auf der Festplatte gespeichert wurde,      Dokument-Validierung
bevor sie bestätigt wird.
                                                             Dynamische Schemata bieten in puncto Flexibilität große
Der Write Concern wird über den Treiber konfiguriert und     Vorteile, doch zugleich ist es wichtig, dass Kontrollen zur
ist äußerst granular: Die Einstellungen können               Wahrung der Datenqualität implementiert werden können,
vorgangsspezifisch, für eine bestimmte Collection oder für   insbesondere wenn die Datenbank als Basis für mehrere
die gesamte Datenbank vorgenommen werden. Unsere             Anwendungen dient oder in eine umfassendere
                                                             Datenmanagementplattform integriert ist, die Daten in vor-

                                                                                                                      15
und nachgelagerte Systeme speist. Anstatt die               db.runCommand({
                                                                collMod: "contacts",
Durchsetzung dieser Kontrollen wieder in den                    validator: {
Anwendungscode zu verlagern, bietet MongoDB                         $and: [
                                                                        {year_of_birth: {$lte: 1994}},
Funktionen zur Dokumentvalidierung in der Datenbank.
                                                                        {$or: [
Damit können Nutzer dafür sorgen, dass die                                   {phone: { $type: "string" }},
Dokumentstruktur, die Datentypen und -bereiche sowie                         {email: { $type: "string" }}
                                                                ]}]
das Vorhandensein von Pflichtangaben überprüft werden.      }})
Auf diese Weise können DBAs Richtlinien für den Umgang
mit Daten implementieren, während Entwickler weiterhin      Um Validitätsprüfungen für eine Collection einrichten zu
von den Vorteilen eines flexiblen Dokumentmodells           können, müssen sich Entwickler oder DBAs, die mit
profitieren.                                                MongoDB vertraut sind, nicht erst lange einarbeiten, da die
                                                            Dokumentvalidierung die Standardabfragesprache von
MongoDB bietet flexible Optionen, mit denen sich
                                                            MongoDB verwendet.
individuell festlegen lässt, welche Teile eines Dokuments
bei dessen Aufnahme in eine bestimmte Collection            Validierungsregeln können über Compass verwaltet,
überprüft werden und welc
                     welche
                          he nic
                             nicht
                                ht – im Gegensatz zu        erzeugt und modifiziert werden. Dazu steht eine einfach zu
einem RDBMS, in dem alles definiert und überprüft           bedienende Oberfläche zur Verfügung. Außerdem werden
werden muss. Für jeden Schlüssel empfiehlt es sich, die     in Compass alle Dokumente angezeigt, die gegen die
folgenden Punkte zu überprüfen:                             Validierungsregeln verstoßen. DBAs können dann die von
                                                            Compass unterstützten CRUD-Operationen benutzen, um
• dass er existiert,                                        die betreffenden Dokumente einzeln zu bearbeiten und so
• dass der ihm zugeordnete Wert vom richtigen Typ ist,      Probleme mit der Datenqualität zu beheben.

• dass der Wert ein bestimmtes Format hat (so kann etwa
  durch die Verwendung regulärer Ausdrücke überprüft        Die Nutzung von Indizes zur Durchsetzung von
  werden, ob der Inhalt eines Strings einem bestimmten      Regeln
  Muster entspricht und z. B. das Format einer korrekten
  E-Mail-Adresse aufweist),                                 Wie im Abschnitt über das Schemadesign beschrieben,
                                                            unterstützt MongoDB nativ eindeutige Indizes. Dadurch
• dass der Wert innerhalb eines festgelegten Bereichs
                                                            kann MongoDB Eingabevorgänge identifizieren, bei denen
  liegt.
                                                            ein Wert doppelt in das eindeutig indizierte Feld einer
Beispielsweise könnte es nötig sein, die Dokumente in der   Collection eingefügt werden soll, und eine entsprechende
Collection „Kontakte“ anhand folgender Kriterien zu         Fehlermeldung ausgeben. Auf unserer Website steht ein
überprüfen:                                                 Tutorial zur Verfügung, in dem beschrieben wird, wie
                                                            eindeutige Indizes erstellt und auf welche Weise mehrfach
• Das Geburtsjahr darf nicht später als 1994 sein.          vorhandene Einträge in dem zu indizierenden Feld aus
• Das Dokument enthält mindestens eine Telefonnummer        bestehenden Collections entfernt werden können.
  oder E-Mail-Adresse.

• Falls vorhanden, sind Telefonnummern und                  Views
  E-Mail-Adressen Strings.
                                                            Datenbankadministratoren können nicht-materialisierte
Dies lässt sich mithilfe der folgenden Regel für die        Views definieren, die nur einen Teil der in einer Collection
Dokumentvalidierung umsetzen:                               enthaltenen Daten umfassen, beispielsweise Views, in
                                                            denen bestimmte Felder herausgefiltert werden. Sie
                                                            können eine View für eine Collection definieren, die auf der
                                                            Aggregation von Daten anderer Collections oder Views
                                                            basiert. Die Zugriffsrechte auf einen View werden separat

                                                                                                                      16
Sie können auch lesen