Was ist NoSQL?

Leistungsfähige, nicht-relationale Datenbanken mit flexiblen Datenmodellen

Was sind NoSQL-Datenbanken?

NoSQL-Datenbanken sind speziell für bestimmte Datenmodelle entwickelt worden und verfügen über flexible Schemata zur Erstellung moderner Anwendungen. NoSQL-Datenbanken sind weithin bekannt für ihre einfache Entwicklung, Funktionalität und Skalierbarkeit. Sie verwenden eine Vielzahl von Datenmodellen, einschließlich Dokument, Diagramm, Schlüsselwert, In-Memory und Suche. Diese Seite enthält Ressourcen zum besseren Verständnis von NoSQL-Datenbanken und für den Einstieg.

Das vorherrschende Datenmodell, das für die Anwendungsentwicklung verwendet wurde, war das relationale Datenmodell, das von relationalen Datenbanken wie Oracle, DB2, SQL Server, MySQL und PostgreSQL verwendet wurde. Erst Mitte bis Ende der 2000er Jahre wurden andere Datenmodelle genutzt und setzten sich langsam durch. Um diese neuen Klassen von Datenbanken und Datenmodellen zu differenzieren und zu kategorisieren, wurde der Begriff „NoSQL“ geprägt. Oft wird der Begriff „NoSQL“ austauschbar mit „nicht-relational“ verwendet.


Neuerungen für zweckgerichtete nicht relationale AWS-Datenbanken

Wie funktioniert eine (nicht-relationale) NoSQL-Datenbank?

NoSQL-Datenbanken verwenden eine Vielzahl von Datenmodellen für den Zugriff auf und die Verwaltung von Daten, wie z. B. Dokument, Diagramm, Schlüsselwert, In-Memory und Suche. Diese Typen von Datenbanken sind speziell für Anwendungen optimiert, die große Datenmengen, geringe Latenz sowie flexible Datenmodelle erfordern. Dies erreicht man durch die Lockerung der Beschränkungen zur Datendurchgängigkeit von anderen Datenbanken.

Nachfolgend ein Beispiel zur Modellierung des Schemas für eine einfache Buchdatenbank:

  • In einer relationalen Datenbank wird ein Buchdatensatz oft zerlegt (oder „normalisiert“) und in separaten Tabellen gespeichert. Beziehungen werden durch Primär- und Fremdschlüsselbeschränkungen definiert. In diesem Beispiel hat die Tabelle Bücher Spalten für ISBN, Buchtitel und Ausgabenummer, die Tabelle Autoren Spalten für Autoren-ID und Autorenname und die Tabelle Autoren-ISBN schließlich Spalten für Autoren-ID und ISBN. Das relationale Modell ist so konzipiert, dass die Datenbank die referentielle Integrität zwischen den Tabellen in der Datenbank erzwingen kann. Sie ist normalisiert, um die Redundanz zu reduzieren, und generell für die Speicherung optimiert.
  • In einer NoSQL-Datenbank wird ein Buchdatensatz normalerweise als JSON-Dokument gespeichert. Für jedes Buch werden die Elemente ISBN, Buchtitel, Ausgabenummer, Autorenname und Autoren-ID als Attribute in einem einzigen Dokument gespeichert. In diesem Modell sind die Daten für eine intuitive Entwicklung und horizontale Skalierbarkeit optimiert.

Warum sollten Sie eine NoSQL-Datenbank verwenden?

NoSQL-Datenbanken eignen sich hervorragend für viele moderne Anwendungen wie Mobile, Web und Gaming, die flexible, skalierbare, hochleistungsfähige und hochfunktionale Datenbanken benötigen, um ein großartiges Benutzererlebnis zu bieten.

  • Flexibilität: NoSQL-Datenbanken bieten in der Regel flexible Schemata, die eine schnellere und iterativere Entwicklung ermöglichen. Das flexible Datenmodell macht NoSQL-Datenbanken ideal für halbstrukturierte und unstrukturierte Daten.
  • Skalierbarkeit: NoSQL-Datenbanken sind in der Regel so konzipiert, dass sie durch die Verwendung von verteilten Hardware-Clustern skaliert werden können, anstatt durch Hinzufügen teurer und robuster Server. Einige Cloud-Provider wickeln diese Vorgänge hinter den Kulissen als vollständig gemanagten Service ab.
  • Leistungsstark: NoSQL-Datenbanken sind für bestimmte Datenmodelle (wie Dokumente, Schlüsselwerte und Diagramme) und Zugriffsmuster optimiert, die eine höhere Leistung ermöglichen, als wenn Sie versuchen, ähnliche Funktionen mit relationalen Datenbanken zu erzielen.
  • Hochfunktionell: NoSQL-Datenbanken bieten hochfunktionelle APIs und Datentypen, die speziell für jedes ihrer jeweiligen Datenmodelle entwickelt wurden.

Arten von NoSQL-Datenbanken

nosql_keyvalue_g

Schlüsselwert: Schlüsselwertdatenbanken sind hoch partitionierbar und erlauben eine horizontale Skalierung auf Skalen, die andere Arten von Datenbanken nicht erreichen können. Anwendungsfälle wie Gaming, Werbung und IoT eignen sich besonders gut für das Schlüsselwertdatenmodell. Amazon DynamoDB wurde entwickelt, um eine konsistente einstellige Millisekunden-Latenzzeit für jede Größenordnung von Workloads bereitzustellen. Diese konsistente Leistung spielt eine entscheidende Rolle dabei, warum die Snapchat Stories-Funktion, die Snapchats größten Speicher-Schreib-Workload enthält, nach DynamoDB verschoben wurde.

nosql_document_g

Dokument: Einige Entwickler denken nicht an ihr Datenmodell in Form von zersetzten Zeilen und Spalten. In der Regel werden Daten auf Anwendungsebene als JSON-Dokument dargestellt, da es für Entwickler intuitiver ist, ihr Datenmodell als Dokument zu betrachten. Die Popularität von Dokumentdatenbanken ist gestiegen, weil Entwickler Daten in einer Datenbank persistieren können, indem sie das gleiche Dokumentmodellformat verwenden, das sie in ihrem Anwendungscode verwenden. DynamoDB und MongoDB sind beliebte Dokumentendatenbanken, die leistungsstarke und intuitive APIs für eine flexible und agile Entwicklung bieten.

nosql_graph_g

Diagramm: Der Zweck einer Diagrammdatenbank ist es, das Erstellen und Ausführen von Anwendungen, die mit hochgradig verbundenen Datensätzen arbeiten, zu vereinfachen. Typische Anwendungsfälle für eine Diagrammdatenbank sind soziale Netzwerke, Empfehlungsmaschinen, Betrugserkennung und Wissensdiagramme. Amazon Neptune ist ein vollständig verwalteter Diagrammdatenbankservice. Neptune unterstützt sowohl das Property Graph-Modell als auch das Resource Description Framework (RDF) und bietet die Wahl zwischen zwei Diagramm-APIs: TinkerPop und RDF/SPARQL. Beliebte Graph-Datenbanken sind Neo4j und Giraph.

nosql_inmemory_g

In-Memory: Gaming- und Werbe-Anwendungen besitzen Anwendungsfälle wie Bestenlisten, Sitzungsspeicher und Echtzeitanalysen, die Reaktionszeiten im Mikrosekundenbereich erfordern und zu jeder Zeit zu großen Lastspitzen führen können. Amazon ElastiCache bietet Memcached und Redis, um Workloads mit niedriger Latenz und hohem Durchsatz zu bedienen, wie zum Beispiel McDonald's, die nicht mit plattenbasierten Datenspeichern bedient werden können. Ein weiteres Beispiel für einen speziellen Datenspeicher ist Amazon DynamoDB Accelerator (DAX). Mit DAX liest DynamoDB eine um ein Vielfaches schneller.

nosql_search_g

Suche: Viele Anwendungen bieten Protokolle, um Entwicklern bei der Behebung von Problemen zu helfen. Amazon Elasticsearch Service (Amazon ES) wurde speziell für die Bereitstellung von Visualisierungen und Analysen von maschinengenerierten Daten durch Indizierung, Aggregation und Suche nach semistrukturierten Protokollen und Metriken entwickelt. Amazon ES ist außerdem eine leistungsstarke Suchmaschine für die Volltextsuche. Expedia verwendet mehr als 150 Amazon ES-Domänen, 30 TB Daten und 30 Milliarden Dokumente für eine Vielzahl von unternehmenskritischen Anwendungsfällen, die von der operativen Überwachung und Fehlerbehebung bis hin zur verteilten Verfolgung von Anwendungsstapeln und Preisoptimierung reichen.

SQL- (relational) vs. (nicht relationale) NoSQL-Datenbanken

Obwohl es viele Arten von NoSQL-Datenbanken mit unterschiedlichen Funktionen gibt, zeigt die folgende Tabelle einige der Unterschiede zwischen SQL- und NoSQL-Datenbanken auf.

  Relationale Datenbanken NoSQL-Datenbanken

Optimale Workloads

Relationale Datenbanken sind für transaktionale und stark konsistente Online Transaction Processing(OLTP)-Anwendungen konzipiert und eignen sich gut für Online Analytical Processing (OLAP). NoSQL-Schlüsselwert-, Dokument-, Diagramm- und In-Memory-Datenbanken sind für OLTP für eine Reihe von Datenzugriffsmustern konzipiert, die Anwendungen mit geringer Latenz enthalten. NoSQL-Suchdatenbanken sind für die Analyse von halbstrukturierten Daten konzipiert. 
Datenmodell

Beim relationalen Modell werden Daten in Tabellen normalisiert, die aus Zeilen und Spalten bestehen. Tabellen, Zeilen, Indizes, Beziehungen zwischen Tabellen und sonstige Datenbankelemente werden in einem Schema streng definiert. Die Datenbank erzwingt die referentielle Integrität bei Beziehungen zwischen Tabellen. 

NoSQL-Datenbanken bieten eine Vielzahl von Datenmodellen, die Dokument, Diagramm, Schlüsselwert, In-Memory und Suche umfassen.
ACID-Eigenschaften

Relationale Datenbanken bieten Azomizität, Konsistenz, Isolation und Haltbarkeit (Atomicity, Consistency, Isolation and Durability – ACID):

  • Atomizität erfordert, dass eine Transaktion entweder ganz oder gar nicht ausgeführt wird.
  • Konsistenz bedeutet, dass die Daten nach dem Commit einer Transaktion mit dem Datenbankschema konform sein müssen.
  • Isolation verlangt, dass parallel erfolgende Transaktionen getrennt voneinander ausgeführt werden müssen.
  • Dauerhaftigkeit bezeichnet die Fähigkeit, bei einem unerwarteten System- oder Stromausfall den letzten bekannten Zustand wiederherstellen zu können.
NoSQL-Datenbanken gehen oft Kompromisse ein, indem sie einige der ACID-Eigenschaften von relationalen Datenbanken für ein flexibleres, horizontal skalierbares Datenmodell lockern. Dies macht NoSQL-Datenbanken zu einer ausgezeichneten Wahl für Anwendungsfälle mit hohem Durchsatz und geringer Latenz, die horizontal über die Grenzen einer einzelnen Instance hinaus skaliert werden müssen.
Leistung Die Leistung ist in der Regel vom Datenträger-Subsystem abhängig. Um die Spitzenleistung zu erzielen, ist oft eine Optimierung von Abfragen, Indizes und der Tabellenstruktur erforderlich. Die Leistung wird grundsätzlich durch die Größe des zugrunde liegenden Hardware-Clusters, die Netzwerklatenz und die aufrufende Anwendung bestimmt.
Skalierbarkeit Relationale Datenbanken werden in der Regel skaliert, indem die Rechenleistung der Hardware erhöht oder durch das Hinzufügen von Repliken für Nur-Lese-Workloads erweitert wird. NoSQL-Datenbanken sind für gewöhnlich partitionierbar, da Schlüsselwertzugriffsmuster durch die Verwendung verteilter Architekturen skaliert werden können, um den Durchsatz zu erhöhen, der eine konsistente Leistung bei nahezu unbegrenzter Skalierbarkeit bietet.
APIs Anforderungen zum Speichern und Abrufen von Daten werden mithilfe von Abfragen übermittelt, die in einer strukturierten Abfragesprache (Structured Query Language, SQL) verfasst sind. Diese Abfragen werden von der relationalen Datenbank geparst und ausgeführt. Mit objektbasierten APIs können Anwendungsentwickler In-Memory-Datenstrukturen ganz einfach speichern und abrufen. Anwendungen können Schlüsselwertpaare, Spaltensätze und halbstrukturierte Dokumente mit serialisierten Anwendungsobjekten und -attributen mithilfe von Partitionsschlüsseln abfragen.

SQL vs. NoSQL-Terminologie

In der folgenden Tabelle wird die von ausgewählten NoSQL-Datenbanken verwendete Terminologie mit der von SQL-Datenbanken verglichen.

SQL MongoDB DynamoDB Cassandra  Couchbase
Tabelle Sammlung Tabelle Tabelle Daten-Bucket
Zeile Dokument Element Zeile Dokument
Spalte Feld Attribut Spalte Feld
Primärschlüssel Objekt-ID Primärschlüssel
Primärschlüssel Dokument-ID
Index Index Sekundärer Index Index Index
Anzeigen Anzeigen Globaler sekundärer Index Materialisierte Ansicht Anzeigen
Verschachtelte(s) Tabelle oder Objekt Eingebettetes Dokument Karte Karte Karte
Array Array Liste Liste Liste
Liste
Liste
Primärschlüssel

Erste Schritte mit DynamoDB

Der Einstieg in DynamoDB ist ganz einfach. Auf der Webseite DynamoDB – Erste Schritte können Sie Ihre erste Tabelle mit nur wenigen Klicks erstellen. Sie können sich auch ein AWS-Whitepaper herunterladen, um bewährte Methoden für die Migration von Workloads von einem relationalen Datenbankmanagementsystem (RDBMS) nach DynamoDB kennenzulernen.

Was ist Amazon DynamoDB?