Ich habe jetzt seit einer Woche etwas über NoSQL-Datenbanken gelernt.
Ich verstehe wirklich die Vorteile von NoSQL-Datenbanken und die vielen Anwendungsfälle, für die sie großartig sind.
Aber oft schreiben Leute ihre Artikel, als ob NoSQL relationale Datenbanken ersetzen könnte . Und da ist der Punkt, an dem ich mich nicht zurechtfinden kann:
NoSQL-Datenbanken sind (oft) Schlüsselwertspeicher.
Natürlich ist es möglich , zu speichern , alles in einen Schlüssel-Wert - Speicher (durch die Daten in JSON codiert, XML, was auch immer), aber das Problem , das ich sehe , ist , dass Sie brauchen , um zu bekommen eine gewisse Menge an Daten , die ein bestimmtes Kriterium übereinstimmt, in vielen Anwendungsfälle. In einer NoSQL-Datenbank gibt es nur ein Kriterium, nach dem Sie effektiv suchen können - den Schlüssel. Relationale Datenbanken werden optimiert, um effektiv nach jedem Wert in der Datenzeile zu suchen.
NoSQL-Datenbanken sind also nicht wirklich eine Wahl für persistente Daten, die nach ihrem Inhalt durchsucht werden müssen. Oder habe ich etwas falsch verstanden?
Ein Beispiel:
Sie müssen Benutzerdaten für einen Webshop speichern.
In einer relationalen Datenbank speichern Sie jeden Benutzer als Zeile in der users
Tabelle mit einer ID, dem Namen, seinem Land usw.
In einer NoSQL-Datenbank würden Sie jeden Benutzer mit seiner ID als Schlüssel und all seinen Daten (in JSON usw. codiert) als Wert speichern.
Wenn Sie also alle Benutzer aus einem bestimmten Land abrufen möchten (aus irgendeinem Grund müssen die Marketingmitarbeiter etwas über sie wissen), ist dies in der relationalen Datenbank einfach, in der NoSQL-Datenbank jedoch nicht sehr effektiv, da dies erforderlich ist Holen Sie sich jeden Benutzer, analysieren Sie alle Daten und filtern Sie.
Ich sage nicht, dass es unmöglich ist , aber es wird viel kniffliger und ich denke, es ist nicht so effektiv, wenn Sie in den Daten von NoSQL-Einträgen suchen möchten.
Sie können einen Schlüssel für jedes Land erstellen, in dem die Schlüssel aller in diesem Land lebenden Benutzer gespeichert sind, und die Benutzer eines bestimmten Landes abrufen, indem Sie alle Schlüssel abrufen, die im Schlüssel für dieses Land hinterlegt sind. Aber ich denke, diese Technik macht ein komplexes Dataset noch komplexer - es ist schwieriger zu implementieren und nicht so effektiv wie das Abfragen einer SQL-Datenbank. Ich denke, das ist kein Weg, den Sie in der Produktion verwenden würden. Oder ist es?
Ich bin mir nicht sicher, ob ich etwas missverstanden oder einige Konzepte oder bewährte Methoden zur Behandlung solcher Anwendungsfälle übersehen habe. Vielleicht könnten Sie meine Aussagen korrigieren und meine Fragen beantworten.