Eine NoSQL-Datenbank ist jede Art von Datenbank, die sich vom traditionellen Design löst von SQL. NoSQL-Datenbanken wie die dokumentenbasierte MongoDB haben in den letzten Jahren an Popularität gewonnen. Worum geht es bei dem ganzen Hype?
Die Einschränkung von SQL: Skalierbarkeit
SQL gibt es schon immer— 45 Jahre. Es hält überraschend gut, und moderne Implementierungen von SQL sind sehr schnell. Mit dem Wachstum des Webs ist jedoch auch der Bedarf an leistungsstarken Datenbanken gestiegen, die sich bedarfsgerecht skalieren lassen.
Der einfachste Weg, eine SQL-Datenbank zu skalieren, besteht darin, sie auf einem leistungsfähigeren Computer auszuführen. SQL-Datenbanken können repliziert werden, um die regionale Belastung einer einzelnen Instanz zu reduzieren, aber das Aufteilen einer Tabelle (oft als Sharding bezeichnet) ist für SQL viel schwieriger.
Dokumentbasierte NoSQL-Datenbanken beheben dieses Problem per Design. Jedes Dokument ist unabhängig von anderen Dokumenten in der Sammlung, sodass die Sammlungen viel einfacher auf mehrere Server aufgeteilt werden können. Viele Dokumentdatenbanken enthalten integrierte Tools zum Sharding der Daten auf verschiedene Server.
Das Skalierbarkeitsproblem ist jedoch erst dann wirklich ein Problem, wenn Sie viele Daten haben. Sie können problemlos eine SQL-Datenbank mit Hunderttausenden von Benutzern betreiben und haben keine Probleme, vorausgesetzt, Ihre Struktur ist solide und Ihre Abfragen sind schnell.
Werbung
Sowohl MySQL als auch MongoDB werden wahrscheinlich die Arbeit für Ihre Anwendung erledigen, daher hängt die Wahl zwischen den beiden davon ab, welche Struktur und Syntax Sie bevorzugen. Einfache Entwicklung ist wichtig, und Sie werden vielleicht feststellen, dass das Dokumentmodell und die Syntax der viel neueren MongoDB einfacher zu handhaben sind als SQL.
NoSQL vs .SQL-Struktur
Herkömmliche SQL-Datenbanken werden aufgrund ihrer Struktur oft als relationale Datenbanken bezeichnet. In einer SQL-Datenbank haben Sie mehrere Tabellen, von denen jede mehrere Zeilen (so genannte Datensätze) enthält, die wiederum mehrere verschiedene Spalten oder Attribute aufweisen. Jede einzelne Tabelle ist über einen Primärschlüssel mit der anderen verbunden, die eine Beziehung bildet.
Stellen Sie sich zum Beispiel vor, Sie haben eine Tabelle, in der jeder Datensatz einen Beitrag eines Benutzers darstellt. Der Primärschlüssel ist hier der Benutzername, der verwendet werden kann, um die Beitragstabelle mit der Benutzertabelle zu verknüpfen. Wenn Sie die E-Mail-Adresse desjenigen finden möchten, der den Beitrag verfasst hat, suchen Sie nach “Jon1996” in der Benutzertabelle und wählen Sie die Option “E-Mail” Feld.
Aber diese Datenstruktur funktioniert möglicherweise nicht für alle . SQL-Datenbanken haben ein fest definiertes Schema, das im Weg stehen kann, wenn Sie Änderungen vornehmen müssen oder einfach ein anderes Layout bevorzugen. Bei komplexen Datensätzen können die Beziehungen zwischen allem komplizierter werden als die Daten selbst.
Die wichtigste Art von NoSQL-Datenbank ist eine JSON-Dokumentdatenbank wie MongoDB. Anstatt Zeilen und Spalten zu speichern, werden alle Daten in einzelnen Dokumenten gespeichert. Diese Dokumente werden in Sammlungen gespeichert (z. B. würde ein “Benutzer”-Dokument in einer “Alle Benutzer”-Sammlung gespeichert) und müssen nicht dieselbe Struktur wie andere Dokumente haben in der Sammlung.
Beispiel: ein “Benutzer” Dokument kann etwa so aussehen:
{ “username”:”Jon1996″, “email”:”jon1996@gmail.com”, “posts”: [ {“id”:1}, {“id”:2}, {“id”:3}, ] } Werbung
Die Felder Benutzername und E-Mail sind nur Schlüssel-Wert-Paare, ähnlich wie Spalten in SQL, aber die “Beiträge” Feld enthält ein Array, das Sie in SQL-Datenbanken nicht finden. Angenommen, wir hätten eine Posts-Sammlung mit Dokumenten wie:
{ “id”::1, “title”:”First Post”, “content”:”Hello, World!”, “madeby”:”Jon1996″ }
Wenn nun jemand die Seite von Jon besucht, kann Ihre Anwendung drei Beiträge mit den IDs 1, 2 und 3 abrufen, was normalerweise eine schnelle Abfrage ist. Im Vergleich zu SQL müssen Sie möglicherweise alle Beiträge abrufen, die mit Jons Benutzer-ID übereinstimmen. Immer noch recht schnell, aber die MongoDB-Abfrage ist direkter und macht mehr Sinn.
Wofür sind NoSQL-Datenbanken gut?
NoSQL ist eine breite Kategorie und umfasst viele verschiedene Arten von Datenbanken, die mit unterschiedlichen Zielen erstellt wurden. Jede Datenbank ist ein Werkzeug, und Ihre Arbeit erfordert möglicherweise eine bestimmte Art von Werkzeug oder sogar mehrere verschiedene Werkzeuge.
SQL-Datenbanken wie MySQL, Oracle und PostgreSQL gibt es seitdem vor dem Internet. Sie sind sehr stabil, haben viel Unterstützung und können im Allgemeinen die Arbeit für die meisten Menschen erledigen. Wenn Ihre Daten für Sie wertvoll sind und Sie eine etablierte, konsistente Lösung wünschen, bleiben Sie bei SQL.
JSON-Dokumentdatenbanken, wie MongoDB und Couchbase, sind beliebt für Webanwendungen mit wechselnden Datenmodellen und zum Speichern komplexer Dokumente. Eine Website wie Amazon muss beispielsweise häufig das Datenmodell zum Speichern von Produkten auf der Website ändern, sodass eine dokumentbasierte Datenbank für sie gut geeignet ist.
Dokumentendatenbanken sollen der generische Ersatz für . sein SQL, und sind wahrscheinlich das, woran Sie denken, wenn Sie “NoSQL.” Sie sind auch intuitiver zu erlernen als SQL, da Sie keine Beziehungen zwischen Tabellen oder komplexen Abfragen verwalten müssen.
Werbung
RethinkDBist eine JSON-Dokumentendatenbank, die für Echtzeitanwendungen entwickelt wurde. In einer Datenbank wie MongoDB müssten Sie alle paar Sekunden nach Updates abfragen oder darüber hinaus eine API implementieren, um Echtzeit-Updates zu verfolgen, was schnell schwer wird. RethinkDB löst dieses Problem durch automatisches Pushen von Updates über Websocket-Streams, zu denen Clients eine Verbindung herstellen können.
Redisist eine extrem performante Schlüssel-Wert-Datenbank, die kleine Schlüssel und Strings vollständig im RAM speichert, was viel schneller zu lesen und zu schreiben ist als selbst die schnellsten SSDs. Es wird oft zusammen mit anderen Datenbanken als In-Memory-Cache für kleine Daten verwendet, die häufig geschrieben und gelesen werden. Eine Messaging-App möchte beispielsweise Redis verwenden, um die Nachrichten von Nutzern zu speichern (und sogar Updates in Echtzeit mit ihren Pub/Sub-Methoden zu übertragen). Das Speichern vieler kleiner Nachrichten auf diese Weise kann bei anderen Datenbanktypen zu Leistungsproblemen führen.
Grafikdatenbankensind zum Speichern von Verbindungen zwischen Daten gebaut. Ein häufiger Anwendungsfall sind soziale Netzwerke, in denen Benutzer miteinander verbunden sind und mit anderen Daten interagieren, wie beispielsweise von ihnen erstellten Beiträgen.
In diesem Beispiel ist George mit zwei Leuten befreundet, Jon und Jane. Wenn eine andere Art von Datenbank Georges Verbindung zu Sarah verstehen wollte, müsste sie alle Freunde von Jon und Jane abfragen. Aber Graphdatenbanken verstehen diesen Zusammenhang intuitiv; Für die Freunde-von-Freunden-Abfrage ist die beliebte Graphdatenbank Neo4J 60 % schneller als MySQL. Für Freunde von Freunden von Freunden (3 Ebenen tief) ist Neo4J 180-mal schneller.
Datenbanken mit breiten Spalten wie Cassandra und Hbase werden zum Speichern riesiger Datenmengen verwendet. Sie wurden für Datasets entwickelt, die so groß sind, dass Sie mehrere Computer benötigen, um alles zu speichern, und sie sind viel schneller als SQL- und andere NoSQL-Datenbanken, wenn sie auf mehrere Knoten verteilt sind.