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.
Antworten:
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.
quelle
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.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 #.
quelle
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:
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 .
quelle
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.
quelle