Ich bin ein SQL-Typ, aber ich weiß, dass es nicht nur SQL- Datenbanken gibt - hauptsächlich Dokumentendatenbanken. Wie bei den meisten Technologien gibt es Vor- und Nachteile für jede Technologie.
Ich habe einige Artikel gelesen, aber sie waren zu theoretisch. Was ich möchte, sind zwei reale Fälle:
- als ein Wechsel von einer relationalen zu einer Dokumentendatenbank eine Verbesserung ergab
- als ein Wechsel von einer Dokumenten- zu einer relationalen Datenbank eine Verbesserung brachte
Verbesserung ist alles, was bessere Programme ausmacht - weniger Entwicklungszeit, Skalierbarkeit, Leistung und alles, was mit Programmierung zu tun hat. Es gibt eine Einschränkung für 2.: Geschichten wie "Zurückgreifen auf relationale Datenbanken, weil jeder SQL kennt" sind nicht gut
nosql
relational-database
Johan Buret
quelle
quelle
Antworten:
Der Hauptgrund für die Wahl einer NoSQL-Datenbank in den letzten Jahren war die Verfügbarkeit . Für Unternehmen wie Amazon, Google und Facebook ist eine Ausfallzeit von etwa einer Stunde nicht akzeptabel. Um eine hohe Verfügbarkeit zu erreichen, müssen Sie den Single-Point-of-Failure reduzieren. Das bedeutet, dass Sie ein verteiltes System mit mehreren Computern verwenden müssen, falls ein Computer abstürzt. Der Dienst ist weiterhin verfügbar.
Herkömmliche Relatione-Datenbanken sind in einem verteilten Multi-Master-Setup nicht sehr gut. Aus diesem Grund war NoSQL in letzter Zeit so beliebt. Wenn Sie also eine hohe Verfügbarkeit benötigen, können Sie eine NoSQL-Datenbank wie Riak, Cassandra, HBase, S3 oder BigTable auswählen.
Es gibt einen guten Blog-Beitrag über Amazon Dynamo , der eine gute Einführung in verteilte NoSQL-Datenbanken bietet.
Jetzt ist der NoSQL-Begriff sehr weit gefasst, sodass es viele NoSQL-Datenbanken gibt, die nicht verteilt sind. Aber sie lösen andere Probleme. ZB Neo4j - eine Grafikdatenbank eignet sich für eine Art von Abfragen, für die herkömmliche RDBMS nicht optimiert sind. Oder wie in Ihrem Fall in einer Dokumentendatenbank, in der Sie das Schema nicht ändern müssen, um einige Felder für einige Dokumente hinzuzufügen. Mit anderen Worten, eine Dokumentendatenbank ist gut, wenn die meisten Posts (Dokumente) unterschiedliche Felder aufweisen, sodass eine relationale Tabelle mit vordefinierten Spalten nicht verwendet werden kann.
Die meisten NoSQL-Datenbanken sind jedoch nicht so flexibel wie herkömmliche RDBMS-Datenbanken. Daher ist es eine gute Wahl, eine herkömmliche RDBMS-Datenbank zu verwenden, bis sie Ihre Probleme nicht mehr lösen kann.
quelle
Ich habe einen einfachen Ansatz, um die Datenbank zu bestimmen, die am besten zu den Daten passt.
Ich frage mich nur: Angenommen, ich hätte keine Datenbank, würde ich lieber die meisten und wichtigsten Daten als Dokument speichern oder sie in einer Tabelle speichern.
Wenn die Antwort "Tabellenkalkulation" lautet, ist dies ein klares Zeichen dafür, dass ein relationales Modell und ein traditionelles RDBMS den Aufgaben meistens am besten entsprechen. Wenn die Daten wirklich einfach sind, wie nur Schlüsselwertpaare oder einfache Tabellen, und die referenzielle Integrität kein Thema ist, ist eine NoSQL-Datenbank wahrscheinlich am besten für diese Aufgabe geeignet und kann die Leistung erheblich steigern!
Wenn Sie überhaupt keine gemeinsame Struktur finden, ist eine NoSQL-Datenbank am besten für diese Aufgabe geeignet.
Wenn die Daten eher dokumentenähnlich sind, z. B. hierarchisch strukturierte Textdaten ohne eindeutige Relationen, dann denke ich sofort an eine XML-Datenbank, mit der Sie auf einfache Weise hierarchisch strukturierte Dokumente speichern können. Manchmal ist es jedoch am besten, eine Dokumentenverwaltungssoftware zu verwenden.
Um also beide Fragen konkret und einfach zu beantworten: Es kommt auf die Daten an.
Wenn Sie hierarchisch strukturierte Textdaten beibehalten müssen, kann eine XML-Datenbank eine große Verbesserung in Bezug auf Wartbarkeit und wahrscheinlich auch Skalierbarkeit darstellen.
Nun, zum Beispiel, wenn die Daten meist tabellarisch mit eindeutigen Beziehungen vorliegen und Sie die Integrität gewährleisten müssen.
quelle
Wir mussten das relationale Modell aufgeben, weil die Daten, die wir erhielten, kein einfaches, offensichtliches, festes, statisches Schema hatten.
Die Benutzer - und die User Stories - hatten kein festes statisches Schema.
Wir haben versucht, ein festes, statisches RDBMS-Schema einzuführen, aber es war ein Fehler.
Jede Datenlieferung von Drittanbietern (von Kunden und Lieferanten) war ähnlich, aber nicht identisch. Wir haben versucht, es einem festen relationalen Schema zuzuordnen, aber die Variabilität war zu groß. Entweder mussten wir mit jeder Datei Felder hinzufügen (mehrere pro Woche) oder wir mussten uns vom festen, statischen relationalen Schema entfernen.
Wenn wir jeden Datensatz als "Dokument" mit einer gemeinsamen Teilmenge betrachten von Elementen und einer eindeutigen (und auch schlecht definierten) Sammlung zusätzlicher Datenelemente betrachteten, waren wir sehr viel glücklicher.
Die schlecht definierte Sammlung von Datenelementen ist das, was die Benutzer tatsächlich für ihre Anwendungsfälle benötigten.
Das feste statische Schema des relationalen Modells passte nicht zu unseren Anwendungsfällen.
quelle