Warum sind relationale Datenbanken ungeeignet für unstrukturierte Daten?
Ich habe recherche NoSQL-Datenbanken, und ein gemeinsames Thema kommt ist, dass relationale Datenbanken nicht geeignet sind für die Speicherung von unstrukturierten Daten. Zum Beispiel:
Leider, die starr definiert, schema-basierte Ansatz von relationalen Datenbanken... ist eine schlechte Passform für unstrukturierte und semi-strukturierte Daten
[Quelle]
Ich habe eine harte Zeit zu verstehen, warum das so ist. Zum Beispiel, wenn ich wollte, zu speichern, ein Bild oder irgendein roher text in eine relationale Datenbank ist, könnte ich nicht nur speichern Sie es als text geben (z.B. in eine einzelne Spalte, Tabelle oder ein Schlüssel-Wert-Tabelle)?
- Unstrukturierte Daten ist keine Bild-oder text-Datei. Es ist eine Sammlung von Daten, wobei in einem Datensatz nicht Aussehen wie die anderen. Strukturierte Daten übernimmt den gemeinsamen Feldern zwischen den Datensätzen, hinzufügen von einem Bild-Feld oder text-Feld ist OK, es ist nur noch ein Feld. Problematisch wird es, um den text durchsuchen, aber ist machbar... Unstrukturiert wäre eine Serie von verbatim-text, der Antworten auf die Frage zum Beispiel, wo Sie wollen, um zu suchen, gemeinsame Muster (wie viele Menschen positiv reagiert). Diese Art von Suche ist nicht SQL-Stärke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein Lieblings-Beispiel für unstrukturierte Daten, die nicht eine gute Passform für eine relationale Datenbank ist die computer-hardware-Teile-Datenbank.
Stellen Sie sich vor Sie haben einen web-shop vertreibt computer-hardware. Wie würden Sie Ihre Produkt-Datenbank Aussehen?
Jedes Produkt hat eine
name
eineprice
und einvendor
. Aber CPUs haben eineclock rate
einecache size
und ein# of cores
Monitore haben einesize
undresolution
, RAM-Module haben einecapacity
- und Festplatten haben auch einecapacity
(das kann nicht sein im Vergleich zu, dass der RAM-Module).Wie würden Sie das speichern dieser Daten in einer relationalen Datenbank?
product
,property
undvalue
die Karten alle Eigenschaften, um die Werte (aber welche Art verwenden Sie fürvalue
wenn einige Eigenschaften numerisch sind und andere nicht?)Alle drei Optionen sind gültig, aber keine ist wirklich befriedigend.
Aber wenn Sie eine Dokument-orientierte Datenbank, ohne einem strengen schema, es wird viel einfacher, weil jeder Eintrag kann eine beliebige Menge von Attributen haben können Werte beliebigen Typs.
Scheint die Frage zu sein, basierend auf zwei oder drei Missverständnisse. Leider sind Sie allzu Häufig sind bei den Liebhabern der modisch NoSQL-Produkte.
Erstens Informationen (nicht "Daten") ist nie wirklich unstrukturiert. Struktur ist die Linse, durch die wir Daten, um die Informationen zu sehen. Struktur ist der Grund, warum die Daten nützlich.
Zweitens, das Häufig genannte Beispiele für solche Daten (Dokumente, Bilder, mixed content) sind sehr geeignete Kandidaten für die Speicherung in relationalen form.
Drittens, SQL != Relationale. Die Gründe für NoSQL-Produkte ist, dass alternativen zu SQL sind erforderlich. Das ist über jeden Zweifel erhaben. Leider NoSQL-Befürworter neigen dazu, als Basis für Ihre Ideen auf einem Missverständnis, dass die Probleme und Einschränkungen von SQL-DBMS sind Probleme, die in das relationale Modell Daten. Das ist nicht im entferntesten wahr. Ein starkes argument gemacht werden könnte, dass die sehr beste Art von NoSQL-DBMS wäre ein relationalen ein.
information (not "data") is never truly unstructured"
. Allerdings, ich komme, um zu realisieren, dass eine Menge Zeit, ist es schwierig, eine Struktur zuordnen zu Daten, wenn er generiert wird. Es kann eine Menge Zeit, die Struktur zu entwickeln. Wenn die einzige option ist eine strukturierte Datenbank, dann die einzige Möglichkeit ist entweder wegwerfen, die Daten oder bewahren Sie Sie als flache Dateien.information
im Datensatz enthalten), die Mehrwert für das Geschäft, das sammeln der Daten. Sehen Sie das anders?Ich glaube nicht, dass die Frage sein sollte, unstrukturierte vs. unstrukturierte Daten. Es geht mehr um die performance für große Datenmengen. Ich habe einige Erfahrung, wenn Sie versuchen, eine SQL-Datenbank in eine nicht-strukturierte Daten zu speichern. In meinem Fall hatte ich eine Reihe von dynamischen (JSON) - Objekte, die benötigt werden, um in eine Tabelle. Ich war mit SQL, da die Objekte waren miteinander verbunden durch Eltern-Kind-Beziehungen (D. H. ein self-join). Es funktionierte gut für eine test-Daten von etwa 5.000 Objekte.
Mit SQL
ABER, meine Produktions-Datenbank enthält über 3 GB im Wert von Daten (über 1 million Objekte, geben oder nehmen). Ich verbrachte Wochen Aufbau und die Optimierung meiner sql-joins und Abfragen. Ich war in der Lage zu erreichen eine maximale Leistung von etwa 10ms zurück ein paar Knoten aus einem ausgewählten spot in den Baum. Dann lief ich in seltsame Abfrage performance-Probleme können nur gelöst werden durch die Umstrukturierung der Indizes und/oder zu löschen und neu zu erstellen, das gespeicherte Prozeduren. Ich verbrachte so viel Zeit mit der Pflege der verdammt SQL-Datenbank, wie ich war, die Kodierung der rest meiner Bewerbung. Nicht gut. (Oh, und ich sollte erwähnen, dass ich über 3 Jahre praktische DBA Erfahrung mit SQL server, so dass ich bin keineswegs neu im Spiel).
Mit Couchbase
Schneller Vorlauf 18 Monate. Ich bin jetzt mit
Couchbase
(eine beliebte nosql-Datenbank). Ich war in der Lage zu bekommen die identische Funktionalität von CB durch die Verwendung von views und map/reduce. Ich verbrachte eine Woche immer meine CB-Bereitstellung ausgeführt wird. Wartezeit auf Abfrage-lookups ist im sub-Millisekundenbereich. Der Endbenutzer verpflichtet, einen dramatischen Anstieg der Leistung.Bottom Line
Wenn Sie eine Menge von Daten, Sie werden hart gedrückt zu finden, eine situation, in der SQL-kommen überall in der Nähe der Leistung einer nosql-Datenbank-Architektur, unabhängig davon, wie strukturierte oder unstrukturierte Daten.