Ist NoSQL bahnbrechend? [geschlossen]


46

Ich bin ein sehr solider Typ für relationale Datenbanken und verstehe den gesamten Weg zur 3. Normalform, schätze die Wurzeln der algebraischen Mengenlehre von SQL und kann wahrscheinlich ein gebrochenes Herz relationalisieren (oder nicht).

Ich habe noch keine relationale Datenbankstruktur für Verabredungen mit meiner Frau herausgefunden, aber ich habe über relationale Datenbankprojekte für Verabredungen mit meiner Frau nachgedacht.

Jetzt höre ich von NoSQL und recherchiere es. Auf den Punkt gebracht, gibt es irgendetwas an NoSQL, das bahnbrechend, mathematisch neuartig oder ein "Hey, Sie müssen Ihre Daten nicht einmal wirklich relational organisieren, das ist so viel einfacher" Ansatz ist?

Ist NoSQL eine Super-Shell für die Datenstruktur? Meiner Meinung nach müssen Daten letztendlich eine Struktur haben, um abgerufen zu werden, und der Abruf muss in einer Sprache definiert werden.


2
Welche Arten von NoSQL-Datenbanken haben keine Struktur? Dokumentendatenbanken können hierarchisch sein, ihre Daten werden jedoch nur minimal in Dokumenten gespeichert, die die Daten in einem bestimmten Format enthalten. Diagrammdatenbanken und Schlüsselwertspeicher sind eher selbsterklärend. Welche NoSQL-Datenbanken haben keine Abfragesprache? Bei einigen Dokumentendatenbanken handelt es sich lediglich um eine Textsuche oder um XQuery for XML (zwei Beispiele). SPARQL wird für RDF-Speicher verwendet.
Thomas Owens

2
Update für "Ich habe über relationale Datenbankprojekte ON Date Nights mit meiner Frau nachgedacht .." :) LOL. Gute Frage auch.
Rocklan

2
NoSQL-Datenbanken haben zwar eine Struktur, die sich jedoch nicht immer leicht auf relationale Algebra abbilden lässt. Unterschiedliche NoSQL-Typen verwenden unterschiedliche Strukturen. Einige sind Hashmaps mit Schlüsselwerten, hierarchische Datenbanken, Objektdatenbanken, Diagrammdatenbanken oder Dokumentenspeicher. Alles, was NoSQL wirklich ist, ist die Erkenntnis, dass SQL kein Allheilmittel ist, dass einige Problemdomänen schlecht auf SQL / relationale Algebra abgebildet werden.
Lie Ryan

7
NoSQL ist ein irreführender Name. Es impliziert eine Gruppe mit Merkmalen, während das einzige gemeinsame Merkmal keine klassische relationale SQL-Datenbank ist. Es ist ein offener Satz. Es ist, als würde man jedes Lebensmittel, das kein Brot ist, als "Familie der Nichtbrote" bezeichnen.
Pieter B

2
Ok, was ist die große Aufregung um NoSQL? Es ist ganz einfach: Wir hatten eine Generation von Leuten, die mit relationalen Datenbanken aufgewachsen sind, und das war das einzige Werkzeug, das sie hatten. Denn wenn Sie nur einen Hammer haben, wird alles zum Nagel. Dann bekommt man hässliche Dinge wie den Versuch, Objekte in eine relationale Datenbank zu stellen oder eine Suchmaschine aufzubauen. Die große Erkenntnis war, dass eine SQL-Datenbank für viele Dinge gut ist, aber nicht für alles. das "nicht alles" ist das große ding.
Pieter B

Antworten:


24

NoSQL ist eher evolutionär als revolutionär. Es kombiniert im Wesentlichen die vorhandenen Ideen des "externen Datenbankspeichers" mit "Verwendung vertrauter Datenstrukturen, nicht relationaler Tabellen".

Es gibt mehr Datenbanktypen als relationale, beispielsweise hierarchische Datenbanken . Nach heutigen Maßstäben archaisch, passte es sehr gut zu den Datenstrukturen seiner Daten (z . B. COBOL- Datensätze). Der springende Punkt ist, dass die Daten in der Datenbank eng an die Anordnung der Datensätze in den verwendeten Programmiersprachen angelehnt wurden.

Schneller Vorlauf zur Erfindung relationaler Datenbanken , bei denen die Datenbank letztendlich die Probleme trennt und bei richtiger Normalisierung eine großartige Möglichkeit darstellt, die meisten Datentypen und Beziehungen zwischen Daten zu visualisieren. Es ist im Vergleich zu anderen Datenbanktypen sehr einfach zu verstehen. Es schlägt jedoch völlig fehl, Daten so zu speichern, dass Objekte und Klassen in einem Programm gespiegelt werden. Daher die Erfindung der objektrelationalen Abbildung . Mit anderen Worten, das Design der Datenbank ist tatsächlich ein Hindernis für das Design des Programms, das sie verwendet. Aus diesem Grund benötigen wir ORM-Bibliotheken wie Hibernate. Während sauber und konsequent, gibt es immer den nagenden Zweifel im Hinterkopf, dass etwas nicht ganz stimmt.

Dies führte zu zwei weiteren Arten von Datenbanken, Objektdatenbanken und NoSQL .

Beide versuchen, die Probleme zu lösen, die durch relationale Datenbanken verursacht werden, ohne uns den geisteskranken Schrecken hierarchischer Datenbanken auszusetzen. Daten werden immer noch in Repositorys abgelegt, die Tabellen vage ähneln, aber in Wirklichkeit eher Datenstrukturen programmieren als relationale Tabellen. Während Objektdatenbanken meist genau definierten Regeln folgen, ist meines Erachtens NoSQL eher willkürlich. Beispielsweise kann eine Tabelle als Hash-Tabelle oder als Array dargestellt werden. Es gibt keine einfache, genau definierte Möglichkeit, sie mit einem beliebigen Tool abzufragen, das mit Oracle SQL Developer oder SQL Server Management Studio vergleichbar ist .

Die Idee ist, dass man Datenstrukturen definieren kann, die einfach im Code durchsucht werden können, anstatt SQL-Abfragen zusammenzusetzen, die besser für ein SQL-Datenbankmodul geeignet sind, anstatt die gewünschte Abfrage auszudrücken. Beispielsweise sind unscharfe oder teilweise Übereinstimmungen schwieriger und führen in einer relationalen Datenbank zu einer schlechteren Leistung, während eine NoSQL-Datenbank möglicherweise eine für eine solche Suche optimierte Struktur aufweist und in einem Bruchteil der Zeit vervollständigt wird.

Es gibt Sprachen für die Abfrage von NoSQL. Es gibt jedoch keine universelle Sprache wie SQL für relationale Datenbanken.


Späte Bearbeitung:

Obwohl ich mit NoSQL-Datenbanken vertraut bin, war diese Frage der Anstoß für mich, ein Qualitätsbuch zu diesem Thema zu kaufen und es mit dem Ziel zu lesen, ein echter Experte für dieses Thema zu sein. Die restlichen Kommentare basieren auf NoSQL Distilled: Ein kurzer Leitfaden für die aufstrebende Welt der polyglotten Persistenz von Pramod Sadalage und Martin Fowler .

Die Autoren geben an, dass relationale Datenbanken nicht gut auf Cluster skaliert werden können, die die für Websites wie Amazon und Google erforderlichen Daten liefern: NoSQL wurde entwickelt, um dieser Nische gerecht zu werden und die Parallelität und Dauerhaftigkeit von ACID zu verringern, um eine große Anzahl von Anfragen zu bearbeiten Verwenden Sie weitgehend statische Daten (daher sind ACID-Transaktionen nicht so wichtig).

Darüber hinaus wird davon ausgegangen, dass NoSQL-Datenbanken ohne Schema arbeiten (Seite 10), wodurch NoSQL-Datenbanken die Struktur von Daten einfacher ändern können. Ich bin nicht sicher, ob das Vorhandensein oder Fehlen eines formalen Schemas in dieser Hinsicht von Bedeutung ist, da SQL-Datenbanken auch das Ändern von Schemas ermöglichen. Unabhängig davon machen die beiden renommierten Autoren die Behauptung, dass es sich lohnt, sie zu untersuchen.

Ich glaube, dass diese beiden Hauptpunkte nur dazu dienen, meinen Hauptpunkt durchzusetzen, dass NoSQL evolutionär und nicht revolutionär ist. Sie speichern weiterhin Daten und verbessern inkrementell den Maßstab und die Modifizierbarkeit. Sie weisen auch darauf hin, dass NoSQL nicht versucht, relationale Datenbanken als König des Datenspeichers an sich zu reißen, sondern lediglich ein alternatives Mittel zur Datenspeicherung für die Datentypen bereitzustellen, die auf eine Weise skaliert und verändert werden müssen, die (ihrer Meinung nach) relational ist Datenbanken werden nicht gut genug unterstützt.


2
Einige NoSQL-Datenbanken haben eine Abfragesprache. Ich habe zuvor XQuery und SPARQL verwendet, wenn die Daten in XML oder RDF gespeichert sind. Diese Sprachen sind in der Regel strukturiert und zum Abfragen. Dies gilt jedoch auch nur für NoSQL-Datenbanken, die genau definierte Datenformate enthalten und für Text- oder Schlüssel-Wert-Paare nicht viel bewirken.
Thomas Owens

@ThomasOwens Ich habe meine Antwort genauer bearbeitet.

1
Dies ist ein interessanter Überblick über NoSQL, der jedoch die eigentliche Frage nicht beantwortet. Soweit ich sagen kann, ist das einzige, was "bahnbrechend" an NoSQL ist, dass Ihre Daten nicht einer bestimmten Struktur entsprechen müssen, bevor sie gespeichert werden.
Rocklan

2
In other words, the design of the database is actually a hindrance to the design of the program that uses it, ...Ich habe das Gefühl, dass der Karren in vielen Fällen vor das Pferd gestellt wird. Für große Unternehmen mit großen Datenmengen sind die Daten unglaublich wertvoll und werden sehr, sehr lange verfügbar sein - länger als die gängigen Programmiersprachen, Tools und Paradigmen. Es ist möglicherweise genauer zu sagen, dass OOP ein Hindernis für das Datenbankdesign darstellt, und der Versuch, das Datenbankdesign an das Programmierparadigma anzupassen, ist möglicherweise nicht die beste Idee.
Doval

2
Ich möchte nur darauf hinweisen, dass wir alle noch ziemlich häufig eine heirarchische Datenbankimplementierung verwenden - es wird als Dateisystem bezeichnet.
Wyatt Barnett

13

Ich denke, Sie möchten sich dieses Paper von Erik Meijer & Gavin Bierman mit dem Titel "Entgegen der landläufigen Meinung sind SQL und NoSQL wirklich nur zwei Seiten einer Medaille" ansehen . Zusammenfassend wird behauptet, dass mathematisch gesehen beide Ansätze auf derselben Theorie beruhen, jedoch mit einigen Unterschieden.

Einige interessante Unterschiede sind meines Erachtens die folgenden: Die Richtung der typübergreifenden Abhängigkeiten (FK in SQL) ist in SQL umgekehrt, und NoSQL und der Auflistungstyp sind nicht auf das Festlegen in NoSQL beschränkt (und daher einige set-theoretische Operationen) gelten möglicherweise nicht mehr in der NoSQL-Welt, aber einige andere sind noch gültig). Ein weiterer interessanter Punkt des Artikels ist die einzelne Abfragesprache, die zum Abfragen von SQL- und NoSQL-Datenbanken vorgeschlagen wird. Es heißt LINQ, und wenn Sie glauben, diesen Namen schon einmal gehört zu haben, haben Sie Recht: Das ist die Abfragesprache von Microsoft in C #.


1
"Ein weiterer interessanter Punkt in diesem Artikel ist die einzelne Abfragesprache, die für die Abfrage von SQL- und NoSQL-Datenbanken vorgeschlagen wird. Sie heißt LINQ." Nicht ganz richtig, 'Linq' kann nicht 1: 1 auf SQL abgebildet werden muss auftreten, damit es auf SQL-DBs funktioniert. WAS bedeutet, dass alles eingeführt werden kann, um beide abzufragen, solange eine Übersetzungsebene vorhanden ist, die sicherstellt, dass diese auf der Ziel-DB
Frans Bouma,

6
Nun, man kann argumentieren, dass SQL auch nicht direkt auf einer Datenbank ausgeführt wird. Was ausgeführt wird, ist ein Ausführungsplan, und man kann auch argumentieren, dass Linq direkt in den Ausführungsplan übersetzt werden könnte. Also doch kein großer Unterschied.
Haspemulator

10

In der Antwort von Snowman wird richtig beschrieben, wie sich SQL und NoSQL in ihren Datenstrukturen unterscheiden und wie auf diese zugegriffen wird. Ein wahrscheinlich noch wichtigerer Unterschied ist jedoch die jeweilige Problemdomäne.

NoSQL ist kein Nachfolger von SQL. Vielmehr opfern die verschiedenen Zweige von NoSQL einige Qualitäten von SQL, um bei anderen besser zu sein . Das CAP-Theorem besagt, dass es keinem verteilten Datenbanksystem möglich ist, alle folgenden Eigenschaften zu erfüllen:

  • Konsistenz
  • Verfügbarkeit
  • Partitionstoleranz

Daher folgen einige NoSQL-Varianten stattdessen dem BASE-Prinzip , wodurch die immer vollständige Konsistenzbeschränkung von ACID gelockert wird , die die Grundlage für klassische SQL-Datenbanken darstellt. Durch den Verlust einiger Konsistenzgarantien erhalten sie die Möglichkeit, Hochverfügbarkeit und Partitionstoleranz in weit verbreiteten Systemen zu kombinieren, z. B. für Websites mit hohem Datenaufkommen und Benutzeranfragen, aber geringer Nachfrage nach perfekter Konsistenz. Daher bilden solche NoSQL-Datenbanken das Herz von Google , Facebook und Amazon . Um Ihre Frage zu beantworten: Ja, NoSQL ist bahnbrechend , da es so ziemlich alle massiven Webdienste ermöglicht.

Dies ist nur ein Beispiel, da NoSQL ein vielfältiges Feld ist und seine Varianten nahezu alle möglichen Kombinationen von Parametern innerhalb des CAP-Dreiecks abdecken .


Ich bin mit ElasticSearch nicht vertraut. Eine schnelle Google-Suche scheint zu zeigen, dass sie die Konsistenz beeinträchtigt (C) und daher AP ist, nicht CAP, was theoretisch unmöglich ist. Bearbeiten: Dies war eine Antwort auf einen inzwischen nicht mehr vorhandenen Kommentar, der darauf hinweist, dass ElasticSearch alle CAP-Eigenschaften erfüllt.
Florian von Stosch

3
Oh wie süß, sie gingen mit BASE gegen ACID vor. Gibt es einen Mittelweg mit dem Namen REDOX oder SALT?
Patrick M

3

Die gängigen Anwendungsfälle von NoSQL sind bahnbrechend in ihren Produktivitätssteigerungen im Vergleich zu gängigen SQL-basierten Datenbanken. Hierfür gibt es mehrere Faktoren.

Man ist Haushälterin. Die meisten NoSQLs sind Open Source und können mit wenigen Befehlen auf einer Workstation oder einer VM installiert werden. Nach meiner Erfahrung sind selbst Postgres und MySQL nicht so; Die Konfiguration ist in der Regel erforderlich, um auch auf einer Workstation zu Entwicklungszwecken zu starten.

Eine andere ist die bequeme Entwicklung, wie andere Antworten ausführlich beschrieben haben. Die JSON-Indizierungsfunktionen von Mongo oder die Schlüssel- / Wertsemantik von Redis und Riak sind möglicherweise alles, was bestimmte Webanwendungen für die Erledigung des Auftrags benötigen, und die APIs sind einfach. Einige NoSQLs stellen ihre eigenen RESTful-APIs zur Verfügung, wohingegen Sie sie bei SQL normalerweise selbst schreiben müssen.

Diese Faktoren machen NoSQL-Datenbanken attraktiv für kleine Projekte. Die Abholzeit ist in der Regel gering. Sicher, wenn Sie in die Produktion gehen, müssen Sie Sicherheit und Skalierbarkeit konfigurieren, aber die Fähigkeit, schnell mit dem Codieren und der Zusammenarbeit zu beginnen, ist leistungsstark und bahnbrechend.

In Bezug auf die oben genannten Punkte kann ein Team für kleine Anwendungen (z. B. unternehmensinterne oder App-to-App-Dienste) möglicherweise eine produktive NoSQL-Datenbank erstellen, ohne die DBA-Teams einzubeziehen und ohne die Leistung oder Integrität zu beeinträchtigen Probleme als Ergebnis. Professionelle DBAs mögen das vielleicht nicht, aber Entwickler, die DBAs als Hindernisquelle (richtig oder falsch) betrachten, sehen in NoSQL manchmal eine Möglichkeit, die Notwendigkeit zu umgehen, mit ihnen umzugehen. Ich gebe zu, dass ich einmal eine kleine Anwendung von Postgres auf SQLite geändert habe, um den kontradiktorischen DBA auszuschalten. Ich habe mich für die Implementierung auf Mongo und nicht auf Oracle entschieden, um DBA-Genehmigungsprozesse und Zugriffsbeschränkungen zu vermeiden. In beiden Fällen ohne nachteilige Folgen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.