Ich habe Dinge über NoSQL gehört und dass es möglicherweise der Ersatz für SQL DB-Speichermethoden wird, da die DB-Interaktion häufig ein Engpass für die Geschwindigkeit im Web ist.
Ich habe also nur ein paar Fragen:
Was genau ist das?
Wie funktioniert es?
Warum ist es besser als eine SQL-Datenbank zu verwenden? Und wie viel besser ist es?
Ist die Technologie noch zu neu, um mit der Implementierung zu beginnen, oder lohnt es sich, einen Blick darauf zu werfen?
Antworten:
Was genau ist das?
Einerseits ein bestimmtes System , aber es ist auch ein allgemeines Wort für eine Vielzahl neuer Datenspeicher-Backends geworden , die nicht dem relationalen DB-Modell folgen.
Wie funktioniert es?
Jedes der mit dem generischen Namen gekennzeichneten Systeme funktioniert anders. Die Grundidee besteht jedoch darin, eine bessere Skalierbarkeit und Leistung zu bieten, indem DB-Modelle verwendet werden, die nicht alle Funktionen eines generischen RDBMS unterstützen, aber dennoch genügend Funktionen bieten, um nützlich zu sein. In gewisser Weise ist es wie bei MySQL, das früher keine Unterstützung für Transaktionen hatte, aber genau deshalb andere DB-Systeme übertreffen konnte. Wenn Sie Ihre App so schreiben konnten, dass keine Transaktionen erforderlich waren, war sie großartig.
Warum ist es besser als eine SQL-Datenbank zu verwenden? Und wie viel besser ist es?
Es wäre besser, wenn Ihre Site so massiv skaliert werden muss, dass das beste RDBMS, das auf der besten Hardware läuft, die Sie sich leisten und so weit wie möglich optimieren können, einfach nicht mit der Last mithalten kann. Wie viel besser es ist, hängt vom jeweiligen Anwendungsfall ab (viele Aktualisierungsaktivitäten in Kombination mit vielen Verknüpfungen sind für "traditionelle" RDBMS sehr schwierig) - könnte in extremen Fällen durchaus ein Faktor von 1000 sein.
Ist die Technologie noch zu neu, um mit der Implementierung zu beginnen, oder lohnt es sich, einen Blick darauf zu werfen?
Hängt hauptsächlich davon ab, was Sie erreichen möchten. Es ist sicherlich ausgereift genug, um es zu benutzen. Aber nur wenige Anwendungen müssen das wirklich massiv skalieren. Für die meisten ist ein traditionelles RDBMS ausreichend. Da die Internetnutzung jedoch immer allgegenwärtiger wird, ist es sehr wahrscheinlich, dass Anwendungen, die dies tun, häufiger (wenn auch wahrscheinlich nicht dominant) werden.
quelle
transaction
?Es gibt kein NoSQL!
NoSQL ist ein Schlagwort.
Wenn Menschen über Datenbanken sprachen, meinten sie jahrzehntelang relationale Datenbanken. Und wenn Leute über relationale Datenbanken sprachen, meinten sie diejenigen, die Sie mit Edgar F. Codds strukturierter Abfragesprache steuern. Daten auf andere Weise speichern? Wahnsinn! Alles andere sind nur Flatfiles.
Aber in den letzten Jahren haben die Leute angefangen, dieses Dogma in Frage zu stellen. Die Leute fragten sich, ob Tabellen mit Zeilen und Spalten wirklich die einzige Möglichkeit sind, Daten darzustellen. Die Leute begannen zu denken und zu codieren und entwickelten viele neue Konzepte, wie Daten organisiert werden könnten. Und sie begannen, neue Datenbanksysteme zu erstellen, die für diese neuen Arten der Arbeit mit Daten entwickelt wurden.
Die Philosophien all dieser Datenbanken waren unterschiedlich. Allen diesen Datenbanken war jedoch gemeinsam, dass die strukturierte Abfragesprache nicht mehr für ihre Verwendung geeignet war. Daher hat jede Datenbank SQL durch ihre eigenen Abfragesprachen ersetzt. Und so wurde der Begriff NoSQL als Bezeichnung für alle Datenbanktechnologien geboren, die sich dem klassischen relationalen Datenbankmodell widersetzen.
Was haben NoSQL-Datenbanken gemeinsam?
Eigentlich nicht viel.
Sie hören oft Sätze wie:
Ist das wahr? Nun, einige dieser Aussagen mögen für einige Datenbanken zutreffen, die allgemein als NoSQL bezeichnet werden, aber jede einzelne ist auch für mindestens eine andere falsch. Das einzige, was NoSQL-Datenbanken gemeinsam haben, ist, dass es sich um Datenbanken handelt, die kein SQL verwenden. Das ist es. Das einzige, was sie definiert, ist, was sie voneinander unterscheidet.
Was zeichnet NoSQL-Datenbanken aus?
Daher haben wir klargestellt, dass alle Datenbanken, die üblicherweise als NoSQL bezeichnet werden, zu unterschiedlich sind, um sie zusammen auszuwerten. Jeder von ihnen muss separat bewertet werden, um zu entscheiden, ob sie zur Lösung eines bestimmten Problems geeignet sind. Aber wo fangen wir an? Zum Glück können NoSQL-Datenbanken in bestimmte Kategorien eingeteilt werden, die für verschiedene Anwendungsfälle geeignet sind:
Dokumentorientiert
Beispiele: MongoDB, CouchDB
Stärken: Heterogene Daten, arbeiten objektorientierte, agile Entwicklung
Ihr Vorteil ist, dass sie keine konsistente Datenstruktur benötigen. Sie sind nützlich, wenn sich Ihre Anforderungen und damit Ihr Datenbanklayout ständig ändern oder wenn Sie mit Datensätzen arbeiten, die zusammengehören, aber dennoch sehr unterschiedlich aussehen. Wenn Sie viele Tabellen mit zwei Spalten haben, die als "Schlüssel" und "Wert" bezeichnet werden, sollten Sie sich diese ansehen.
Diagrammdatenbanken
Beispiele: Neo4j, GiraffeDB.
Stärken: Data Mining
Während die meisten NoSQL-Datenbanken das Konzept der Verwaltung von Datenbeziehungen aufgeben, umfassen diese Datenbanken es noch mehr als die sogenannten relationalen Datenbanken.
Ihr Fokus liegt auf der Definition von Daten durch ihre Beziehung zu anderen Daten. Wenn Sie viele Tabellen mit Primärschlüsseln haben, die die Primärschlüssel von zwei anderen Tabellen sind (und möglicherweise einige Daten, die die Beziehung zwischen ihnen beschreiben), sind diese möglicherweise etwas für Sie.
Schlüsselwertspeicher
Beispiele: Redis, Cassandra, MemcacheDB
Stärken: Schnelle Suche nach Werten mit bekannten Schlüsseln
Sie sind sehr simpel, aber das macht sie schnell und einfach zu bedienen. Wenn Sie keine gespeicherten Prozeduren, Einschränkungen, Trigger und all diese erweiterten Datenbankfunktionen benötigen und nur eine schnelle Speicherung und einen schnellen Abruf Ihrer Daten wünschen, sind diese für Sie.
Leider gehen sie davon aus, dass Sie genau wissen, wonach Sie suchen. Sie benötigen das Profil von User157641? Kein Problem, dauert nur Mikrosekunden. Aber was ist, wenn Sie möchten, dass die Namen aller Benutzer zwischen 16 und 24 Jahren "Waffeln" als Lieblingsessen haben und sich in den letzten 24 Stunden angemeldet haben? Pech gehabt. Wenn Sie keinen eindeutigen und eindeutigen Schlüssel für ein bestimmtes Ergebnis haben, können Sie ihn nicht so einfach aus Ihrem KV-Geschäft entfernen.
Ist SQL veraltet?
Einige NoSQL-Befürworter behaupten, dass ihre bevorzugte NoSQL-Datenbank die neue Art ist, Dinge zu tun, und SQL gehört der Vergangenheit an.
Haben sie recht
Nein, natürlich nicht. Obwohl es Probleme gibt, für die SQL nicht geeignet ist, hat es dennoch seine Stärken. Viele Datenmodelle lassen sich einfach am besten als Sammlung von Tabellen darstellen, die aufeinander verweisen. Vor allem, weil die meisten Datenbankprogrammierer jahrzehntelang darin geschult wurden, Daten relational zu denken, und der Versuch, diese Denkweise auf eine neue Technologie zu übertragen, die nicht dafür gemacht wurde, endet selten gut.
NoSQL-Datenbanken sind kein Ersatz für SQL - sie sind eine Alternative.
Die meisten Software-Ökosysteme in den verschiedenen NoSQL-Datenbanken sind noch nicht so ausgereift. Obwohl es Fortschritte gibt, gibt es noch keine zusätzlichen Tools, die so ausgereift und leistungsfähig sind wie die für gängige SQL-Datenbanken verfügbaren.
Außerdem gibt es viel mehr Know-how für SQL. Generationen von Informatikern haben Jahrzehnte ihrer Karriere mit der Erforschung relationaler Datenbanken verbracht. Dies zeigt: Die Literatur über SQL-Datenbanken und die Modellierung relationaler Daten, sowohl in der Praxis als auch in der Theorie, könnte mehrere Bibliotheken voller Bücher füllen. Das Erstellen einer relationalen Datenbank für Ihre Daten ist ein so gut recherchiertes Thema, dass es schwierig ist, einen Eckfall zu finden, in dem es keine allgemein anerkannte Best Practice gibt.
Die meisten NoSQL-Datenbanken stecken dagegen noch in den Kinderschuhen. Wir finden immer noch heraus, wie wir sie am besten nutzen können.
quelle
Da jemand sagte, dass mein vorheriger Beitrag nicht zum Thema gehörte, werde ich versuchen zu kompensieren :-) NoSQL ist nicht als Ersatz für mehr Mainstream-SQL-Datenbanken gedacht und war es auch nie, aber ein paar Worte sind zu bekommen Dinge in der richtigen Perspektive.
Im Zentrum der NoSQL-Philosophie steht die Überlegung, dass SQL-Engines möglicherweise aus kommerziellen Gründen und aus Gründen der Portabilität dazu neigen, die enorme Leistung des UNIX-Betriebssystems und seiner Derivate zu ignorieren.
Mit einer dateisystembasierten Datenbank können Sie sofort die ständig wachsenden Funktionen und die Leistung des zugrunde liegenden Betriebssystems nutzen, die gemäß dem Gesetz von Moore seit vielen Jahren stetig zunehmen. Bei diesem Ansatz werden viele Betriebssystembefehle automatisch auch zu "Datenbankoperatoren" (denken Sie an "ls", "sort", "find" und die anderen unzähligen UNIX-Shell-Dienstprogramme).
Vor diesem Hintergrund und mit ein wenig Kreativität können Sie in der Tat eine dateisystembasierte Datenbank entwickeln, die in der Lage ist, die Einschränkungen vieler gängiger SQL-Engines zu überwinden, zumindest für bestimmte Verwendungsmuster. Dies ist der springende Punkt hinter der NoSQL-Philosophie so wie ich es sehe.
Ich betreibe Hunderte von Websites und alle verwenden mehr oder weniger NoSQL. Tatsächlich hosten sie keine großen Datenmengen, aber selbst wenn einige von ihnen dies tun würden, könnte ich mir wahrscheinlich eine kreative Verwendung von NoSQL und des Dateisystems vorstellen, um Engpässe zu überwinden. Etwas, das mit herkömmlichen SQL- "Jails" wahrscheinlich schwieriger wäre. Ich fordere Sie auf, nach "Unix", "Manis" und "Shaffer" zu googeln, um zu verstehen, was ich meine.
quelle
Wenn ich mich richtig erinnere, bezieht es sich auf Datenbanktypen, die nicht unbedingt der relationalen Form folgen. Es fallen Dokumentendatenbanken ein, Datenbanken ohne bestimmte Struktur, die SQL nicht als bestimmte Abfragesprache verwenden.
Es ist im Allgemeinen besser für Webanwendungen geeignet, die von der Leistung der Datenbank abhängen und keine erweiterten Funktionen von Relation Database Engines benötigen. Beispielsweise kann ein Schlüssel-> Wertspeicher, der eine einfache Abfrage über die ID-Schnittstelle bereitstellt, 10-100-mal schneller sein als die entsprechende SQL Server-Implementierung, wobei die Wartungskosten für Entwickler geringer sind.
Ein Beispiel ist dieses Dokument für einen OLTP- Tupelspeicher, in dem Transaktionen für die Verarbeitung mit einem Thread geopfert wurden (kein Parallelitätsproblem, da keine Parallelität zulässig ist) und alle Daten im Speicher gehalten wurden. 10-100x bessere Leistung im Vergleich zu einem ähnlichen RDBMS- gesteuerten System. Grundsätzlich wird die Ansicht "Einheitsgröße" von SQL- und Datenbanksystemen nicht mehr angezeigt.
quelle
In der Praxis ist NoSQL ein Datenbanksystem, das den schnellen Zugriff auf große binäre Objekte (Dokumente, JPGs usw.) mithilfe einer schlüsselbasierten Zugriffsstrategie unterstützt. Dies ist eine Abweichung vom herkömmlichen SQL-Zugriff, der nur für alphanumerische Werte ausreicht. Nicht nur die interne Speicher- und Zugriffsstrategie, sondern auch die Syntax und Einschränkungen des Anzeigeformats schränken das herkömmliche SQL ein. Auch BLOB-Implementierungen traditioneller relationaler Datenbanken leiden unter diesen Einschränkungen.
Hinter den Kulissen wird indirekt zugegeben, dass das SQL-Modell keine OLTP-Form oder neue Datenformate unterstützt. "Support" bedeutet nicht nur Speichern, sondern vollständige Zugriffsfunktionen - programmgesteuert und abfrageweise unter Verwendung des Standardmodells.
Relationale Enthusiasten haben die Definition von NoSQL schnell von Not-SQL auf Not-Only-SQL geändert, um SQL im Bild zu behalten! Dies ist nicht gut, insbesondere wenn wir sehen, dass die meisten Java-Programme heutzutage auf die ORM-Zuordnung des zugrunde liegenden relationalen Modells zurückgreifen. Ein neues Konzept muss eine eindeutige Definition haben. Sonst wird es wie SOA enden.
Die Basis der NoSQL-Systeme liegt im zufälligen Schlüssel-Wert-Paar. Das ist aber nicht neu. Herkömmliche Datenbanksysteme wie IMS und IDMS unterstützten gehashte Ramdom-Schlüssel (ohne Verwendung eines Index) und tun dies immer noch. Tatsächlich hat IDMS bereits ein Schlüsselwort NONSQL, mit dem sie den SQL-Zugriff auf ihre ältere Netzwerkdatenbank unterstützen, die sie als NONSQL bezeichneten.
quelle
Es ist wie bei Jacuzzi: sowohl eine Marke als auch ein Gattungsname. Es handelt sich nicht nur um eine bestimmte Technologie, sondern um eine bestimmte Art von Technologie, in diesem Fall um große (oft spärliche) "Datenbanken" wie Googles BigTable oder CouchDB.
quelle
NoSQL Das eigentliche Programm scheint eine relationale Datenbank zu sein, die in awk mithilfe von Flatfiles im Backend implementiert wurde. Obwohl sie behaupten, "NoSQL hat im Wesentlichen keine willkürlichen Grenzen und kann dort funktionieren, wo andere Produkte dies nicht können. Zum Beispiel gibt es keine Grenzen für die Datenfeldgröße, die Anzahl der Spalten oder die Dateigröße", glaube ich nicht die große Datenbank der Zukunft.
Wie Joel sagt, sind massiv skalierbare Datenbanken wie BigTable oder HBase viel interessanter. GQL ist die Abfragesprache für BigTable und App Engine. Es ist größtenteils SQL-optimiert, um Funktionen zu vermeiden, die Google als Engpässe betrachtet (wie Joins). Ich habe jedoch noch nie gehört, dass dies als "NoSQL" bezeichnet wird.
quelle
NoSQL ist ein Datenbanksystem, das keine auf Zeichenfolgen basierenden SQL-Abfragen zum Abrufen von Daten verwendet.
Stattdessen erstellen Sie Abfragen mithilfe einer API, die sie bereitstellen. Beispielsweise ist Amazon DynamoDB ein gutes Beispiel für eine NoSQL-Datenbank.
NoSQL-Datenbanken eignen sich besser für große Anwendungen, bei denen Skalierbarkeit wichtig ist.
quelle
Ja, NoSQL unterscheidet sich von RDBMS und OLAP. Es verwendet lockerere Konsistenzmodelle als herkömmliche relationale Datenbanken.
Konsistenzmodelle werden in verteilten Systemen wie verteilten gemeinsam genutzten Speichersystemen oder verteilten Datenspeichern verwendet.
NoSQL-Datenbanksysteme sind häufig stark für das Abrufen und Anhängen von Vorgängen optimiert und bieten häufig nur geringe Funktionen, die über das Speichern von Datensätzen hinausgehen (z. B. Schlüsselwertspeicher). Die im Vergleich zu vollständigen SQL-Systemen verringerte Laufzeitflexibilität wird durch deutliche Verbesserungen der Skalierbarkeit und Leistung für bestimmte Datenmodelle kompensiert.
Es kann mit strukturierten und unstrukturierten Daten arbeiten. Es werden Sammlungen anstelle von Tabellen verwendet
Beobachten Sie SQL vs NoSQL: Battle of the Backends ; es erklärt alles.
quelle