Was sind die Vorteile der Verwendung von NoSQL-Datenbanken? Ich habe in letzter Zeit viel darüber gelesen, bin mir aber immer noch nicht sicher, warum ich eine implementieren möchte und unter welchen Umständen ich eine verwenden möchte.
Relationale Datenbanken erzwingen ACID . Sie haben also schemabasierte transaktionsorientierte Datenspeicher. Es ist bewährt und für 99% der realen Anwendungen geeignet. Mit relationalen Datenbanken können Sie praktisch alles machen.
Bei massiven Datenspeichern mit hoher Verfügbarkeit gibt es jedoch Einschränkungen hinsichtlich Geschwindigkeit und Skalierung. Beispielsweise haben Google und Amazon Terabyte an Daten in großen Rechenzentren gespeichert. Das Abfragen und Einfügen ist in diesen Szenarien aufgrund der Blockierungs- / Schema- / Transaktionscharakteristik der RDBMs nicht performant. Aus diesem Grund haben sie ihre eigenen Datenbanken (eigentlich Schlüsselwertspeicher) implementiert, um einen massiven Leistungsgewinn und Skalierbarkeit zu erzielen.
NoSQL-Datenbanken gibt es schon lange - nur der Begriff ist neu. Einige Beispiele sind Diagramm-, Objekt-, Spalten-, XML- und Dokumentdatenbanken.
Für Ihre 2. Frage: Ist es in Ordnung, beide auf derselben Site zu verwenden?
Warum nicht? Beides dient unterschiedlichen Zwecken, oder?
NoSQL-Lösungen sollen normalerweise ein Problem lösen, für das relationale Datenbanken entweder nicht gut geeignet, zu teuer (wie Oracle) sind, oder Sie müssen etwas implementieren, das die relationale Natur Ihrer Datenbank ohnehin beeinträchtigt.
Die Vorteile sind normalerweise spezifisch für Ihre Verwendung. Wenn Sie jedoch keine Probleme beim Modellieren Ihrer Daten in einem RDBMS haben, sehe ich keinen Grund, warum Sie sich für NoSQL entscheiden sollten.
Ich selbst verwende MongoDB und Riak für bestimmte Probleme, bei denen ein RDBMS keine praktikable Lösung ist, für alle anderen Dinge, bei denen ich MySQL (oder SQLite zum Testen) verwende.
Wenn Sie eine NoSQL-Datenbank benötigen, die Sie normalerweise kennen, sind folgende Gründe möglich:
Wenn Sie keine NoSQL-Lösung benötigen, denken Sie daran, dass diese Lösungen nicht als Ersatz für ein RDBMS gedacht waren, sondern als Alternativen, bei denen das erstere fehlschlägt, und was noch wichtiger ist, dass sie als solche relativ neu sind, sie haben immer noch viele Fehler und fehlende Funktionen.
Oh, und in Bezug auf die zweite Frage ist es vollkommen in Ordnung, eine Technologie in Verbindung mit einer anderen zu verwenden. Um also meiner Erfahrung nach vollständig zu sein, arbeiten MongoDB und MySQL gut zusammen, solange sie sich nicht auf demselben Computer befinden
quelle
Martin Fowler hat ein exzellentes Video, das eine gute Erklärung für NoSQL-Datenbanken gibt. Der Link führt direkt zu seinen Gründen, sie zu verwenden, aber das gesamte Video enthält gute Informationen.
Sie haben große Datenmengen - insbesondere, wenn Sie nicht alle Daten auf einem physischen Server speichern können, da NoSQL für eine gute Skalierung konzipiert wurde.
Objektrelationale ImpedanzfehlanpassungNicht übereinstimmende objektrelationale - Ihre Domänenobjekte passen nicht gut in ein relaitionelles Datenbankschema. Mit NoSQL können Sie Ihre Daten als Dokumente (oder Diagramme) beibehalten, die möglicherweise viel genauer auf Ihr Datenmodell abgebildet werden.
quelle
NoSQL ist ein Datenbanksystem, in dem Daten in Dokument (MongoDB), Schlüssel-Wert-Paar (MemCache, Redis) und Diagrammstrukturform (Neo4J) organisiert sind.
Vielleicht sind hier mögliche Fragen und Antworten für "Wann für NoSQL gehen":
Benötigen Sie ein flexibles Schema oder arbeiten Sie mit baumartigen Daten?
Im Allgemeinen beginnen wir in der agilen Entwicklung mit dem Entwurf eines Systems, ohne alle Anforderungen im Voraus zu kennen, wo später im gesamten Entwicklungsdatenbanksystem häufig Designänderungen berücksichtigt werden müssen, um MVP (Minimal Viable Product) zu präsentieren. Oder Sie haben es mit einem Datenschema zu tun, das dynamischer Natur ist. Beispiel: Systemprotokolle, sehr genaues Beispiel sind AWS Cloudwatch-Protokolle.
Datensatz ist riesig / groß?
Ja, NoSQL-Datenbanken sind der bessere Kandidat für Anwendungen, bei denen die Datenbank Millionen oder sogar Milliarden von Datensätzen verwalten muss, ohne die Leistung zu beeinträchtigen.
Kompromiss zwischen Skalierung und Konsistenz Im Gegensatz zu RDMS kann die NoSQL-Datenbank hier und da kleine Daten verlieren (Hinweis: Die Wahrscheinlichkeit beträgt .x%), ist jedoch hinsichtlich der Leistung einfach zu skalieren. Beispiel: Dies ist möglicherweise gut zum Speichern von Personen, die in einer Instant Messaging-App online sind, Token in der Datenbank und zum Protokollieren von Website-Verkehrsstatistiken.
Durchführen von Geolocation-Operationen: MongoDB bietet umfassende Unterstützung für GeoQuerying- und Geolocation-Operationen. Ich habe diese Funktion von MongoDB wirklich geliebt.
Kurz gesagt, MongoDB eignet sich hervorragend für Anwendungen, in denen Sie dynamisch strukturierte Daten in großem Maßstab speichern können.
quelle
Einige wichtige Informationen fehlen, um die Frage zu beantworten: Welche Anwendungsfälle muss die Datenbank abdecken können? Müssen komplexe Analysen aus vorhandenen Daten ( OLAP ) durchgeführt werden oder muss die Anwendung in der Lage sein, viele Transaktionen ( OLTP ) zu verarbeiten? Wie ist die Datenstruktur? Das ist noch lange nicht das Ende der Fragestunde.
Meiner Ansicht nach ist es falsch, Technologieentscheidungen auf der Grundlage kühner Schlagworte zu treffen, ohne genau zu wissen, was dahinter steckt. NoSQL wird oft für seine Skalierbarkeit gelobt. Sie müssen aber auch wissen, dass die horizontale Skalierung (über mehrere Knoten) auch ihren Preis hat und nicht kostenlos ist. Dann müssen Sie sich mit Problemen wie eventueller Konsistenz befassen und definieren, wie Datenkonflikte gelöst werden sollen, wenn sie auf Datenbankebene nicht gelöst werden können. Dies gilt jedoch für alle verteilten Datenbanksysteme.
Die Freude der Entwickler mit dem Wort "schema less" bei NoSQL ist am Anfang auch sehr groß. Dieses Schlagwort wird nach der technischen Analyse schnell enttäuscht, da es beim Schreiben korrekterweise kein Schema erfordert, sondern beim Lesen ins Spiel kommt. Deshalb sollte es korrekt "Schema beim Lesen" sein. Es kann verlockend sein, Daten nach eigenem Ermessen schreiben zu können. Aber wie gehe ich mit der Situation um, wenn Daten vorhanden sind, die neue Version der Anwendung jedoch ein anderes Schema erwartet?
Das Dokumentmodell (wie zum Beispiel in MongoDB) ist nicht geeignet für Datenmodelle bei denen viele Beziehungen zwischen den Daten bestehen. Joins müssen auf Anwendungsebene durchgeführt werden. Dies ist ein zusätzlicher Aufwand und warum sollte ich Dinge programmieren, die die Datenbank tun sollte.
Wenn Sie argumentieren, dass Google und Amazon ihre eigenen Datenbanken entwickelt haben, weil herkömmliches RDBMS die Datenflut nicht mehr bewältigen kann, können Sie nur sagen: Sie sind nicht Google und Amazon. Diese Unternehmen sind die Speerspitze, etwa 0,01% der Szenarien, in denen herkömmliche Datenbanken nicht mehr geeignet sind, aber für den Rest der Welt.
Was nicht unerheblich ist: SQL gibt es seit über 40 Jahren und Millionen von Entwicklungsstunden wurden in große Systeme wie Oracle oder Microsoft SQL investiert. Dies muss durch einige neue Datenbanken erreicht werden. Manchmal ist es auch einfacher, einen SQL-Administrator zu finden als jemanden für MongoDB. Das bringt uns zur Frage der Wartung und des Managements. Ein Thema, das nicht gerade sexy ist, aber Teil der Technologieentscheidung ist.
quelle
Ich bin auf diese Frage gestoßen, als ich nach überzeugenden Gründen gesucht habe, um vom RDBMS-Design abzuweichen.
Es gibt einen großartigen Beitrag von Julian Brown, der die Einschränkungen verteilter Systeme beleuchtet. Das Konzept heißt Brewer's CAP Theorem und fasst zusammen:
Und so habe ich es für mich zusammengefasst:
quelle
Ich habe Lösungen mit NoSQL-Datenbanken entworfen und implementiert. Hier ist meine Checkpoint-Liste, um die Entscheidung für SQL oder dokumentenorientiertes NoSQL zu treffen .
NICHT
SQL ist nicht veraltet und bleibt in einigen Fällen ein besseres Werkzeug. Es ist schwer zu rechtfertigen, wenn ein dokumentenorientiertes NoSQL verwendet wird, wenn
DOS
Wenn Sie diese Bedingungen nicht haben oder sie mildern können, gibt es zwei Gründe, aus denen Sie von NoSQL profitieren können:
Mehr Info
In meinen Blog-Beiträgen erkläre ich die Gründe ausführlicher:
Hinweis: Das oben Gesagte gilt nur für dokumentenorientiertes NoSQL. Es gibt andere Arten von NoSQL, die andere Überlegungen erfordern.
quelle
Behandeln einer großen Anzahl von Lese- / Schreibvorgängen
Suchen Sie nach NoSQL-Datenbanken, wenn Sie schnell skalieren müssen. Und wann müssen Sie im Allgemeinen schnell skalieren?
Wenn Ihre Website eine große Anzahl von Lese- / Schreibvorgängen enthält und eine große Datenmenge verarbeitet wird, passen NoSQL-Datenbanken am besten in diese Szenarien. Da sie die Möglichkeit haben, Knoten im laufenden Betrieb hinzuzufügen, können sie mit minimaler Latenz mehr gleichzeitigen Datenverkehr und große Datenmengen verarbeiten.
Flexibilität bei der Datenmodellierung
Der zweite Hinweis ist in den ersten Phasen der Entwicklung, in denen Sie sich über das Datenmodell und das Datenbankdesign nicht sicher sind. Es wird erwartet, dass sich die Dinge schnell ändern. NoSQL-Datenbanken bieten uns mehr Flexibilität.
Eventuelle Konsistenz über starke Konsistenz
Es ist vorzuziehen, NoSQL-Datenbanken auszuwählen, wenn es für uns in Ordnung ist, auf eine starke Konsistenz zu verzichten, und wenn wir keine Transaktionen benötigen.
Ein gutes Beispiel dafür ist eine Social-Networking-Website wie Twitter. Wenn ein Tweet einer Berühmtheit explodiert und jeder ihn aus der ganzen Welt mag und erneut twittert. Ist es wichtig, ob die Anzahl der Likes für kurze Zeit etwas steigt oder fällt?
Dem Prominenten wäre es definitiv egal, wenn anstelle der tatsächlichen 5 Millionen 500 Likes das System für kurze Zeit die Anzahl der Likes als 5 Millionen 250 anzeigt.
Wenn eine große Anwendung auf Hunderten von Servern auf der ganzen Welt bereitgestellt wird, benötigen die geografisch verteilten Knoten einige Zeit, um einen globalen Konsens zu erzielen.
Bis sie zu einem Konsens kommen, ist der Wert des Unternehmens inkonsistent. Der Wert der Entität wird schließlich nach kurzer Zeit konsistent. Dies ist die letztendliche Konsistenz.
Die Inkonsistenz bedeutet jedoch nicht, dass Daten verloren gehen. Es bedeutet nur, dass es eine kurze Zeit dauert, bis die Daten über die Internetkabel unter dem Ozean rund um den Globus übertragen werden, um einen globalen Konsens zu erzielen und konsistent zu werden.
Wir erleben dieses Verhalten die ganze Zeit. Besonders auf YouTube. Oft sieht man ein Video mit 10 Ansichten und 15 Likes. Wie ist das überhaupt möglich?
Es ist nicht. Die tatsächlichen Ansichten sind bereits mehr als die Likes. Es ist nur die Anzahl der Aufrufe inkonsistent und es dauert eine kurze Zeit, bis sie aktualisiert werden.
Ausführen von Data Analytics
NoSQL-Datenbanken eignen sich auch am besten für Anwendungsfälle der Datenanalyse, bei denen wir mit einem Zustrom massiver Datenmengen zu kämpfen haben.
quelle