1.1 Funktionsweise einer NoSQL-Datenbank

NoSQL-Datenbanken verwenden eine Vielzahl von Datenmodellen, um auf Daten zuzugreifen und diese zu bearbeiten. Diese Datenbanktypen sind für datenintensive Anwendungen optimiert, die geringe Latenz und flexible Datenmodelle erfordern. All dies wird durch die Abschwächung der strengen Anforderungen an die Datenkonsistenz erreicht, die für andere Datenbanktypen typisch sind.

Betrachten Sie ein Beispiel der Schemamodellierung für eine einfache Buchdatenbank.

  • In einer relationalen Datenbank wird ein Bucheintrag oft in mehrere Teile aufgeteilt (oder „normalisiert“) und in separaten Tabellen gespeichert, deren Beziehungen durch Primär- und Fremdschlüsseleinschränkungen definiert werden. In diesem Beispiel verfügt die Tabelle „Bücher“ über die Spalten „ ISBN“ , „Buchtitel“ und „ISBN“und„Autor“die Tabelle „Autor-ISBN“undAutorennameund„Autoren-ID“die SpaltenAutoren“Tabelle„Ausgabenummer. Das relationale Modell ist darauf ausgelegt, die referenzielle Integrität zwischen Tabellen in einer Datenbank aufrechtzuerhalten. Die Daten werden zur Reduzierung der Redundanz normalisiert und im Allgemeinen für die Speicherung optimiert.

  • In einer NoSQL-Datenbank wird ein Bucheintrag normalerweise als JSON-Dokument gespeichert. Für jedes Buch oder Element werden die Werte ISBN , Buchtitel , Editionsnummer , Autorenname und Autoren-ID als Attribute in einem einzigen Dokument gespeichert. In diesem Modell sind die Daten für intuitive Entwicklung und horizontale Skalierbarkeit optimiert.

1.2 Wofür können NoSQL-Datenbanken verwendet werden?

NoSQL-Datenbanken eignen sich gut für viele moderne Anwendungen wie Mobil-, Spiele- und Webanwendungen, die flexible, skalierbare Datenbanken mit hoher Leistung und umfangreicher Funktionalität erfordern, die maximale Benutzerfreundlichkeit bieten können.

  • Flexibilität . Typischerweise bieten NoSQL-Datenbanken flexible Schemata, die eine schnellere Entwicklung und eine inkrementelle Implementierung ermöglichen. Aufgrund der Verwendung flexibler Datenmodelle eignen sich NoSQL-Datenbanken gut für semistrukturierte und unstrukturierte Daten.

  • Skalierbarkeit . NoSQL-Datenbanken sind für die Skalierung mithilfe verteilter Hardware-Cluster konzipiert, nicht durch das Hinzufügen teurer, zuverlässiger Server. Einige Cloud-Dienstanbieter führen diese Vorgänge im Hintergrund aus und bieten so einen vollständig verwalteten Dienst.

  • Hohe Leistung . NoSQL-Datenbanken sind für bestimmte Datenmodelle und Zugriffsmuster optimiert, um eine höhere Leistung als relationale Datenbanken zu erreichen.

  • Umfangreiche Funktionalität . NoSQL-Datenbanken bieten umfangreiche APIs und Datentypen, die speziell für ihre jeweiligen Datenmodelle entwickelt wurden.

1.3 Arten von NoSQL-Datenbanken

NoSQL-Datenbanken werden dort eingesetzt, wo es nicht sehr praktisch ist, Daten in Form von Tabellen zu speichern. Daher werden sie in sehr unterschiedlichen Formaten gespeichert. Normalerweise gibt es 6 Hauptdatentypen von NoSQL-Datenbanken.

DB basierend auf Schlüssel-Wert-Paaren

Datenbanken, die Schlüssel-Wert-Paare verwenden, unterstützen eine hohe Trennbarkeit und bieten eine beispiellose horizontale Skalierung, die mit anderen Datenbanktypen nicht erreichbar ist. Gute Anwendungsfälle für Schlüsselwertdatenbanken sind Spiele, Werbung und IoT-Anwendungen.

Beispielsweise gewährleistet Amazon DynamoDB einen stabilen Datenbankbetrieb mit einer Verzögerung von nicht mehr als einigen Millisekunden in jeder Größenordnung. Diese robuste Leistung war der Hauptgrund für die Migration von Snapchat Stories zu DynamoDB, da diese Snapchat-Funktion mit der größten Speicherschreiblast verbunden ist.

Dokumentieren

Im Anwendungscode werden Daten häufig als Objekt oder Dokument in einem JSON-ähnlichen Format dargestellt, da es sich um ein effizientes und intuitives Datenmodell für Entwickler handelt. Dokumentdatenbanken ermöglichen es Entwicklern, Daten in einer Datenbank zu speichern und abzufragen, indem sie dasselbe Dokumentmodell verwenden, das sie in ihrem Anwendungscode verwenden. Die flexible, halbstrukturierte, hierarchische Natur von Dokumenten und Dokumentdatenbanken ermöglicht es ihnen, sich an die Anwendungsanforderungen anzupassen.

Das Dokumentmodell funktioniert gut in Katalogen, Benutzerprofilen und Content-Management-Systemen, in denen jedes Dokument einzigartig ist und sich im Laufe der Zeit ändert. Amazon DocumentDB (kompatibel mit MongoDB) und MongoDB sind gängige Dokumentdatenbanken, die funktionale und intuitive APIs für die agile Entwicklung bereitstellen.

Graphdatenbanken

Graphdatenbanken erleichtern die Entwicklung und Ausführung von Anwendungen, die mit komplexen Datenmengen arbeiten. Typische Beispiele für den Einsatz von Graphdatenbanken sind soziale Netzwerke, Empfehlungsdienste, Betrugserkennungssysteme und Wissensgraphen. Amazon Neptune ist ein vollständig verwalteter Graphdatenbankdienst. Neptune unterstützt das Property Graph and Resource Description Framework (RDF) und bietet zwei Graph-APIs zur Auswahl: TinkerPop und RDF/SPARQL. Zu den gängigen Graphdatenbanken gehören Neo4j und Giraph.

DB im Speicher

Häufig nutzen Spiele- und Werbeanwendungen Bestenlisten, Sitzungsspeicher und Echtzeitanalysen. Solche Fähigkeiten erfordern eine Reaktion innerhalb weniger Mikrosekunden, während ein starker Anstieg des Datenverkehrs jederzeit möglich ist.

Amazon MemoryDB for Redis ist ein Redis-kompatibler, zuverlässiger In-Memory-Datenbankdienst, der die Leselatenz auf Millisekunden reduziert und Zuverlässigkeit über mehrere Verfügbarkeitszonen hinweg bietet. MemoryDB ist speziell auf höchste Leistung und Zuverlässigkeit ausgelegt und kann daher als Primärdatenbank für moderne Microservice-basierte Anwendungen verwendet werden.

Amazon ElastiCache ist ein vollständig verwalteter, mit Redis und Memcached kompatibler In-Memory-Caching-Dienst für Workloads mit geringer Latenz und hohem Durchsatz. Kunden wie Tinder, deren Apps in Echtzeit reagieren müssen, verwenden In-Memory- statt Festplattenspeichersysteme. Ein weiteres Beispiel für ein speziell entwickeltes Data Warehouse ist der Amazon DynamoDB Accelerator (DAX). Mit DAX kann DynamoDB Daten um ein Vielfaches schneller lesen.

Datenbanken durchsuchen

Viele Anwendungen generieren Protokolle, um Entwicklern die Fehlersuche und -behebung zu erleichtern. Amazon OpenSearch ist ein speziell entwickelter Dienst für die Visualisierung und Analyse automatisch generierter Datenströme nahezu in Echtzeit durch Indizierung, Aggregation und Suche in halbstrukturierten Protokollen und Metriken.

Darüber hinaus ist Amazon OpenSearch ein leistungsstarker Volltextsuchdienst. Expedia nutzt über 150 Amazon OpenSearch-Dienstdomänen, 30 TB Daten und 30 Milliarden Dokumente für eine Vielzahl geschäftskritischer Anwendungsfälle, von der Betriebsüberwachung und Fehlerbehebung bis hin zur Verfolgung verteilter Anwendungsstapel und Kostenoptimierung.

1.4 Vergleich von SQL-Datenbanken (relational) und NoSQL-Datenbanken (nicht relational).

NoSQL hat viele Vorteile, daher sollten Sie zumindest theoretisch wissen, dass das benötigte Tool bereits existiert, bevor Sie es selbst schreiben. Im Folgenden werde ich einen Vergleich von NoSQL- und SQL-Datenbanken geben:

Passende Arbeitsbelastungen

Relationale Datenbanken sind für transaktionale und hochkonsistente Echtzeit-Transaktionsverarbeitungsanwendungen (OLTP) konzipiert und eignen sich gut für die analytische Echtzeitverarbeitung (OLAP).

NoSQL-Datenbanken sind so konzipiert, dass sie mit einer Reihe von Datenzugriffsmustern funktionieren, einschließlich Anwendungen mit geringer Latenz. NoSQL-Suchdatenbanken sind für die Analyse halbstrukturierter Daten konzipiert.

Datenmodell

Das relationale Modell normalisiert Daten und wandelt sie in Tabellen um, die aus Zeilen und Spalten bestehen. Ein Schema definiert Tabellen, Zeilen, Spalten, Indizes, Beziehungen zwischen Tabellen und andere Datenbankelemente streng. Eine solche Datenbank gewährleistet die Integrität der Referenzdaten in Beziehungen zwischen Tabellen.

NoSQL-Datenbanken bieten eine Vielzahl von Datenmodellen wie Schlüssel-Wert-Paare, Dokumente und Diagramme, die für hohe Leistung und Skalierbarkeit optimiert sind.

ACID-Eigenschaften

Relationale Datenbanken bieten eine Reihe von ACID-Eigenschaften: Atomizität, Konsistenz, Isolation, Zuverlässigkeit.

  • Atomarität erfordert, dass eine Transaktion vollständig oder gar nicht ausgeführt wird.
  • Konsistenz bedeutet, dass die Daten nach Abschluss einer Transaktion dem Datenbankschema entsprechen müssen.
  • Isolation erfordert, dass parallele Transaktionen getrennt voneinander ausgeführt werden.
  • Unter Zuverlässigkeit versteht man die Fähigkeit, nach einem unerwarteten Systemausfall oder Stromausfall den zuletzt gespeicherten Zustand wiederherzustellen.

NoSQL-Datenbanken bieten oft einen Kompromiss, indem sie die strengen Anforderungen von ACID-Eigenschaften zugunsten eines flexibleren Datenmodells lockern, das eine horizontale Skalierung ermöglicht. Dies macht NoSQL zu einer großartigen Wahl für Anwendungsfälle mit hoher Bandbreite und geringer Latenz, die eine horizontale Skalierung über eine einzelne Instanz hinaus erfordern.

Leistung

Die Leistung hängt hauptsächlich vom Festplattensubsystem ab. Für maximale Leistung ist häufig eine Optimierung von Abfragen, Indizes und Tabellenstrukturen erforderlich.

Die Leistung hängt normalerweise von der Größe des zugrunde liegenden Hardware-Clusters, der Netzwerklatenz und der aufrufenden Anwendung ab.

Skalierung

Relationale Datenbanken lassen sich in der Regel skalieren, indem die Rechenleistung der Hardware erhöht oder separate Kopien für Lese-Workloads hinzugefügt werden.

NoSQL-Datenbanken unterstützen typischerweise eine hohe Trennbarkeit durch skalierbare Zugriffsmuster, die auf einer verteilten Architektur basieren. Dies verbessert den Durchsatz und liefert eine konsistente Leistung bei nahezu unbegrenzter Skalierung.

API

Anfragen zum Schreiben und Abrufen von Daten werden in SQL geschrieben. Diese Abfragen werden von einer relationalen Datenbank analysiert und ausgeführt.

Objektorientierte APIs ermöglichen Anwendungsentwicklern das einfache Schreiben und Abrufen von Datenstrukturen. Mithilfe von Partitionsschlüsseln können Anwendungen nach Schlüssel-Wert-Paaren, Spaltensätzen oder halbstrukturierten Dokumenten suchen, die serielle Objekte und Anwendungsattribute enthalten.