7 harte Wahrheiten über die NoSQL-Revolution

Das NoSQL-Schlagwort ist seit mehreren Jahren metastasierend. Die Aufregung über diese schnellen Datenspeicher war berauschend und wir sind genauso schuldig wie jeder andere, den bahnbrechenden Reiz von NoSQL zu sehen. Doch die Flitterwochen gehen zu Ende und es ist Zeit, unsere Begeisterung mit einigen harten Wahrheiten mit kleinen Augen in Einklang zu bringen.

Versteh uns nicht falsch. Wir versuchen immer noch das neueste Experiment zum Aufbau eines einfachen Mechanismus zum Speichern von Daten. Wir finden immer noch großen Wert in MongoDB, CouchDB, Cassandra, Riak und anderen herausragenden NoSQL-Elementen. Wir planen immer noch, einige unserer vertrauenswürdigsten Daten in diese Codestapel zu werfen, da sie von Tag zu Tag besser und kampferprobter werden.

[Ebenfalls zu: NoSQL-Besonderheiten: Neue Datenbanken für neue Anwendungen | Erster Blick: Oracle NoSQL Database | Im Daily Newsletter erhalten Sie jeden Tag einen Überblick über die wichtigsten Geschichten. ]]

Aber wir fangen an, das Scheuern zu spüren, da die NoSQL-Systeme alles andere als perfekt passen und oft falsch reiben. Die klügsten Entwickler wussten das von Anfang an. Sie haben die SQL-Handbücher nicht gebrannt und böse Gramm an die Vertriebsmitarbeiter ihres einst engagierten SQL-Anbieters gesendet. Nein, die intelligenten NoSQL-Entwickler haben lediglich festgestellt, dass NoSQL für "Not Only SQL" steht. Wenn die Massen das Akronym falsch interpretierten, war das ihr Problem.

Diese Liste der großen und kleinen Griffe ist somit ein Versuch, diese Tatsache zu dokumentieren und die Luft zu reinigen. Es soll die Dinge jetzt klarstellen, damit wir die Kompromisse und Kompromisse besser verstehen können.

NoSQL harte Wahrheit Nr. 1: JOINs bedeuten Konsistenz

Einer der ersten Probleme, die Menschen mit SQL-Systemen haben, sind die Rechenkosten für die Ausführung eines JOIN zwischen zwei Tabellen. Die Idee ist, die Daten an einem und nur einem Ort zu speichern. Wenn Sie eine Kundenliste führen, geben Sie deren Straßenadressen in eine Tabelle ein und verwenden ihre Kunden-IDs in jeder anderen Tabelle. Wenn Sie die Daten abrufen, verbindet JOIN die IDs mit den Adressen und alles bleibt konsistent.

Das Problem ist, dass JOINs teuer sein können, und einige DBAs haben komplexe JOIN-Befehle entwickelt, die den Verstand verwirren und selbst die schnellste Hardware in Schlamm verwandeln. Es war keine Überraschung, dass die NoSQL-Entwickler ihren Mangel an JOINs in eine Funktion verwandelten: Lassen Sie uns einfach die Adresse des Kunden in derselben Tabelle wie alles andere behalten! Die NoSQL-Methode besteht darin, Schlüssel-Wert-Paare für jede Person zu speichern. Wenn es soweit ist, rufen Sie alle ab.

Leider brauchen Leute, die wollen, dass ihre Tabellen konsistent sind, immer noch JOINs. Sobald Sie anfangen, Kundenadressen mit allem anderen über sie zu speichern, erhalten Sie häufig mehrere Kopien dieser Adressen in jeder Tabelle. Und wenn Sie mehrere Kopien haben, müssen Sie alle gleichzeitig aktualisieren. Manchmal funktioniert das, aber wenn dies nicht der Fall ist, ist NoSQL nicht bereit, bei Transaktionen zu helfen.

Warten Sie, Sie sagen, warum nicht eine separate Tabelle mit den Kundeninformationen haben? Auf diese Weise muss nur ein Datensatz geändert werden. Es ist eine großartige Idee, aber jetzt können Sie den JOIN selbst in Ihrer eigenen Logik schreiben.

NoSQL harte Wahrheit Nr. 2: Knifflige Transaktionen

Nehmen wir an, Sie können ohne JOINing-Tische leben, weil Sie die Geschwindigkeit wollen. Dies ist ein akzeptabler Kompromiss, und manchmal denormalisieren SQL-Datenbankadministratoren Tabellen nur aus diesem Grund.

Das Problem ist, dass NoSQL es schwierig macht, die verschiedenen Einträge konsistent zu halten. Oft gibt es keine Transaktionen, um sicherzustellen, dass Änderungen an mehreren Tabellen zusammen vorgenommen werden. Dafür sind Sie alleine und ein Absturz könnte sicherstellen, dass Tabellen inkonsistent werden.

Die frühesten NoSQL-Implementierungen haben sich bei diesen Transaktionen die Nase voll. Sie würden Datenlisten anbieten, die konsistent waren, außer wenn dies nicht der Fall war. Mit anderen Worten, sie suchten nach den Daten mit dem niedrigsten Wert, bei denen Fehler keinen wesentlichen Unterschied machten.

Jetzt bieten einige NoSQL-Implementierungen etwas, das sich einer Transaktion nähert. Das NoSQL-Produkt von Oracle bietet beispielsweise Transaktionskontrolle für Daten, die auf einen Knoten geschrieben wurden, und ermöglicht Ihnen die Auswahl einer flexiblen Konsistenz über mehrere Knoten hinweg. Wenn Sie eine perfekte Konsistenz wünschen, müssen Sie warten, bis jeder Schreibvorgang alle Knoten erreicht. Mehrere andere NoSQL-Datenspeicher experimentieren damit, mehr Struktur und Schutz wie diesen hinzuzufügen.

NoSQL harte Wahrheit Nr. 3: Datenbanken können intelligent sein

Viele NoSQL-Programmierer prahlen gerne damit, wie ihr leichter Code und ihr einfacher Mechanismus extrem schnell funktionieren. Sie haben normalerweise Recht, wenn die Aufgaben so einfach sind wie die Innenseiten von NoSQL, aber das ändert sich, wenn die Probleme schwieriger werden.

Betrachten Sie die alte Herausforderung eines JOIN. Sobald NoSQL-Programmierer beginnen, ihre eigenen JOIN-Befehle in ihrer eigenen Logik zu generieren, versuchen sie, dies effizient zu tun. SQL-Entwickler haben jahrzehntelang ausgefeilte Engines entwickelt, um JOIN-Befehle so effizient wie möglich zu handhaben. Ein SQL-Entwickler sagte mir, er habe versucht, seinen Code mit der sich drehenden Festplatte zu synchronisieren, damit er nur dann Daten anfordert, wenn sich der Kopf genau über der richtigen Stelle befindet. Dies mag extrem erscheinen, aber SQL-Entwickler arbeiten seit Jahrzehnten an ähnlichen Hacks.

Es besteht kein Zweifel, dass Programmierer Tage damit verbringen, sich die Haare auszureißen, um ihre SQL-Abfragen zu strukturieren, um all diese latente Intelligenz zu nutzen. Es mag nicht einfach zu tippen sein, aber wenn der Programmierer es herausfindet, können die Datenbanken wirklich singen.

Eine ausgefeilte Abfragesprache wie SQL hat immer das Potenzial, eine nicht ausgefeilte Abfragesprache wie die in NoSQL zu übertreffen. Bei einfachen Ergebnissen spielt es möglicherweise keine Rolle, aber wenn die Aktion komplex wird, wird die SQL auf dem Computer direkt neben den Daten ausgeführt. Es hat wenig Aufwand, die Daten abzurufen und die Arbeit zu erledigen. Ein NoSQL-Server muss die Daten normalerweise dorthin senden, wo sie hingehört.

NoSQL harte Wahrheit Nr. 4: Zu viele Zugriffsmodelle

Theoretisch soll SQL eine Standardsprache sein. Wenn Sie SQL für eine Datenbank verwenden, sollten Sie in der Lage sein, dieselbe Abfrage in einer anderen kompatiblen Version auszuführen. Diese Behauptung kann mit ein paar einfachen Abfragen funktionieren, aber jeder DBA weiß, dass es Jahre dauern kann, die Besonderheiten von SQL für verschiedene Versionen derselben Datenbank zu lernen. Schlüsselwörter werden neu definiert, und Abfragen, die in einer Version ausgeführt wurden, funktionieren nicht mit einer anderen.

NoSQL ist noch arkaner. Es ist wie im Turm von Babel. Von Anfang an haben NoSQL-Entwickler versucht, sich die bestmögliche Sprache vorzustellen, aber sie haben sehr unterschiedliche Vorstellungen. Diese Brutstätte des Experimentierens ist gut - bis Sie versuchen, zwischen Werkzeugen zu springen. Eine Abfrage für CouchDB wird als ein Paar von JavaScript-Funktionen zum Zuordnen und Reduzieren ausgedrückt. Frühere Versionen von Cassandra verwendeten eine unformatierte Low-Level-API namens Thrift. Neuere Versionen bieten CQL, eine SQL-ähnliche Abfragesprache, die vom Server analysiert und verstanden werden muss. Jeder ist auf seine Weise anders.

Jedes Werkzeug hat nicht nur seine eigenen Besonderheiten, es hat auch eine ganz andere Philosophie und Ausdrucksweise. Es gibt keine einfachen Möglichkeiten, zwischen Datenspeichern zu wechseln, und Sie müssen häufig Tonnen von Klebercode schreiben, um sich die Möglichkeit zu geben, in Zukunft zu wechseln. Dies ist möglicherweise nicht allzu schwierig, wenn Sie Schlüssel- und Wertepaare in das System einfügen, kann sich jedoch mit zunehmender Komplexität zunehmend verschärfen.

NoSQL harte Wahrheit Nr. 5: Schema-Flexibilität ist ein Problem, das darauf wartet, dass es passiert

Eine der großartigen Ideen des NoSQL-Modells besteht darin, kein Schema zu benötigen. Mit anderen Worten, Programmierer müssen nicht im Voraus entscheiden, welche Spalten für jede einzelne Zeile in einer Tabelle verfügbar sind. Einem Eintrag können 20 Zeichenfolgen zugeordnet sein, ein anderer kann 12 Ganzzahlen enthalten und ein anderer kann vollständig leer sein. Die Programmierer können die Entscheidung treffen, wann immer sie etwas speichern müssen. Sie müssen nicht um Erlaubnis des DBA bitten, und sie müssen nicht alle Unterlagen ausfüllen, um eine neue Spalte hinzuzufügen.

All diese Freiheit klingt berauschend und kann in den richtigen Händen die Entwicklung beschleunigen. Aber ist es wirklich eine gute Idee für eine Datenbank, die drei Entwicklerteams durchläuft? Ist es überhaupt für eine Datenbank geeignet, die länger als sechs Monate dauern kann?

Mit anderen Worten, die Entwickler möchten vielleicht die Freiheit, ein altes Paar in eine Datenbank zu werfen, aber möchten Sie der fünfte Entwickler sein, der mitkommt, nachdem vier ihre eigenen Schlüssel ausgewählt haben? Es ist leicht vorstellbar, dass verschiedene Darstellungen von "Geburtstag" vorliegen, wobei jeder Entwickler seine eigene Darstellung als Schlüssel auswählt, wenn er einem Eintrag den Geburtstag eines Benutzers hinzufügt. Ein Entwicklerteam kann sich fast alles vorstellen: "Tag", "Tag", "Geburtstag".

Die NoSQL-Struktur bietet keine Unterstützung, um dieses Problem einzuschränken, da dies eine Neugestaltung des Schemas bedeuten würde. Es will die sanften Entwickler nicht so hart treffen. Ein Schema würde im Weg stehen.

Tatsache ist, dass das Hinzufügen einer Spalte zu einer Tabelle keine große Sache ist und die Disziplin möglicherweise tatsächlich gut für den Entwickler ist. Ebenso wie es hilft, Entwickler zu zwingen, Variablentypen zu bestimmen, hilft es auch, Entwickler zu zwingen, den Datentyp zu bestimmen, der an eine Spalte angehängt ist. Ja, der DBA kann den Entwickler zwingen, ein Formular in dreifacher Ausfertigung auszufüllen, bevor diese Spalte angehängt wird. Dies ist jedoch nicht so schlimm wie der Umgang mit einem halben Dutzend verschiedener Schlüssel, die von einem Programmierer im laufenden Betrieb erstellt wurden.

NoSQL harte Wahrheit Nr. 6: Keine Extras

Angenommen, Sie möchten nicht alle Daten in allen Zeilen und die Summe einer einzelnen Spalte. SQL-Benutzer können eine Abfrage mit der SUMME-Operation ausführen und eine - nur eine - Nummer an Sie zurücksenden.

NoSQL-Benutzer erhalten alle Daten zurückgesendet und können diese dann selbst hinzufügen. Das Hinzufügen ist nicht das Problem, da das Addieren der Zahlen auf einem beliebigen Computer ungefähr genauso lange dauert. Der Versand der Daten ist jedoch langsam, und die für den Versand all dieser Daten erforderliche Bandbreite kann teuer sein.

In NoSQL-Datenbanken gibt es nur wenige Extras. Wenn Sie etwas anderes tun möchten, als Daten zu speichern und abzurufen, werden Sie dies wahrscheinlich selbst tun. In vielen Fällen werden Sie dies auf einem anderen Computer mit einer vollständigen Kopie der Daten tun. Das eigentliche Problem ist, dass es oft nützlich sein kann, die gesamte Berechnung auf dem Computer durchzuführen, auf dem sich die Daten befinden, da der Versand der Daten einige Zeit in Anspruch nimmt. Aber hart für dich.

NoSQL-Lösungen entstehen. Die Map and Reduce-Abfragestruktur von MongoDB bietet Ihnen eine beliebige JavaScript-Struktur zum Aufkochen der Daten. Hadoop ist ein leistungsstarker Mechanismus zum Verteilen von Berechnungen auf den Maschinenstapel, der auch die Daten enthält. Es handelt sich um eine sich schnell entwickelnde Struktur, die sich schnell verbessernde Tools für die Erstellung anspruchsvoller Analysen bietet. Es ist sehr cool, aber immer noch neu. Und technisch gesehen ist Hadoop ein ganz anderes Schlagwort als NoSQL, obwohl die Unterscheidung zwischen ihnen verblasst.

NoSQL harte Wahrheit Nr. 7: Weniger Werkzeuge

Sicher, Sie können Ihren NoSQL-Stack auf Ihrem Server zum Laufen bringen. Natürlich können Sie Ihren eigenen benutzerdefinierten Code schreiben, um Ihre Daten vom Stapel zu übertragen. Aber was ist, wenn Sie mehr tun möchten? Was ist, wenn Sie eines dieser ausgefallenen Berichtspakete kaufen möchten? Oder ein Grafikpaket? Oder um einige Open Source-Tools zum Erstellen von Diagrammen herunterzuladen?

Leider sind die meisten Tools für SQL-Datenbanken geschrieben. Wenn Sie Berichte erstellen, Diagramme erstellen oder mit allen Daten in Ihrem NoSQL-Stack etwas tun möchten, müssen Sie mit dem Codieren beginnen. Die Standardtools sind bereit, Daten von Oracle, Microsoft SQL, MySQL und Postgres abzurufen. Ihre Daten sind in NoSQL? Sie arbeiten daran.

Und sie werden ein bisschen daran arbeiten. Selbst wenn sie durch alle Rahmen springen, um mit einer der NoSQL-Datenbanken zu arbeiten, müssen sie von vorne beginnen, um das nächste System zu handhaben. Es gibt mehr als 20 verschiedene NoSQL-Optionen, die alle ihre eigene Philosophie und ihre eigene Art haben, mit den Daten zu arbeiten. Für die Tool-Hersteller war es schwierig genug, die Eigenheiten und Inkonsistenzen in SQL zu unterstützen, aber es ist noch komplizierter, die Tools mit jedem NoSQL-Ansatz zum Laufen zu bringen.

Dies ist ein Problem, das langsam verschwinden wird. Die Entwickler können die Aufregung in NoSQL spüren und werden ihre Tools für die Arbeit mit diesen Systemen modifizieren, aber es wird einige Zeit dauern. Vielleicht starten sie dann auf MongoDB, was Ihnen nicht hilft, weil Sie Cassandra ausführen. Standards helfen in solchen Situationen, und NoSQL spielt bei Standards keine große Rolle.

NoSQL-Mängel auf den Punkt gebracht

All diese NoSQL-Mängel können auf eine einfache Aussage reduziert werden: NoSQL wirft die Funktionalität aus Gründen der Geschwindigkeit weg. Wenn Sie die Funktionalität nicht benötigen, wird es Ihnen gut gehen, aber wenn Sie sie in Zukunft benötigen, wird es Ihnen leid tun.

Revolutionen sind in der Technologiekultur weit verbreitet. Eine neue Gruppe kommt und wundert sich, warum die letzte Generation etwas so Komplexes gebaut hat, und sie machen sich daran, die alten Institutionen abzureißen. Nach einer Weile beginnen sie zu begreifen, warum alle alten Institutionen so komplex waren, und sie beginnen erneut, die Funktionen zu implementieren.

Wir sehen dies in der NoSQL-Welt, da einige Projekte anfangen, Dinge hinzuzufügen, die wie Transaktionen, Schemata und Standards aussehen. Dies ist die Natur des Fortschritts. Wir reißen Dinge ab, nur um sie wieder aufzubauen. NoSQL ist mit der ersten Phase der Revolution fertig und jetzt ist es Zeit für die zweite. Der König ist tot. Lang lebe der König.

Zum Thema passende Artikel

  • NoSQL-Besonderheiten: Neue Datenbanken für neue Anwendungen
  • Erster Blick: Oracle NoSQL Database
  • Flexing NoSQL: MongoDB im Rückblick
  • 10 wichtige Leistungstipps für MySQL
  • 10 wichtige MySQL-Tools für Administratoren
  • Meistern Sie MySQL in der Amazon Cloud
  • Die Zeit für NoSQL-Standards ist jetzt

Diese Geschichte, "7 harte Wahrheiten über die NoSQL-Revolution", wurde ursprünglich auf .com veröffentlicht. Verfolgen Sie die neuesten Entwicklungen im Datenmanagement auf .com. Folgen Sie .com auf Twitter, um die neuesten Entwicklungen in den Nachrichten zu Geschäftstechnologien zu erfahren.