Lesen Sie einfach diese Zeilen-
Wenn Ihre Daten objektbezogen sind, verwenden Sie Objektspeicher ("NoSQL"). Sie sind viel schneller als relationale Datenbanken.
Wenn Ihre Daten relationaler Natur sind, lohnt sich der Aufwand für eine relationale Datenbank.
von-
http://seldo.com/weblog/2011/06/15/orm_is_an_antipattern
Woher weiß ich, ob meine Daten relationaler Natur oder objektorientiert sind?
Antworten:
Auf die Gefahr hin, in Stücke geschossen zu werden, versuche ich es mit einer einfachen englischen Definition.
"Relationale Natur" bedeutet für mich: Alle Elemente eines bestimmten Typs haben fast die gleichen Attribute, was das Entwerfen einer einfachen Tabelle ziemlich einfach macht, aber alle Elemente in dieser Tabelle und dann SQL, um CRUD und Retrieval durchzuführen. Wenn Ihre Daten außerdem so modelliert werden können, dass alle Elemente einen begrenzten Satz von Typen aufweisen, können Sie eine relationale Datenstruktur definieren, die diesem Satz von Typen entspricht.
"Objektnatur" bedeutet: Elemente eines ähnlichen Typs können eine Vielzahl von Attributen aufweisen, und diese Attribute können eine Vielzahl von Merkmalen und Typen aufweisen. Sehr oft konnte dies (mit ausreichendem Aufwand) in ein relationales Modell übersetzt werden, aber viele Tabellen waren sehr dünn besetzt und es kam zu sehr ineffizienten LEFT OUTER-Joins, was die Leistung einer relationalen Datenbank im Vergleich träge machte zu einer NOSQL-Datenbank.
Ich muss sagen, dass es aus meiner Sicht keine strenge Grenze zwischen diesen beiden gibt. Sie könnten wahrscheinlich eine beliebige Anzahl von Beispielen finden, die irgendwo zwischen den beiden Extremen liegen.
OK, jetzt habe ich mich Scharfschützen aus allen Richtungen geöffnet. Kommentare sind willkommen. Mal sehen, ob wir diese Definition gemeinsam verbessern können.
quelle
Die Daten sind beides.
(Genau genommen kann es kein Objekt in der Natur sein, weil es kein Verhalten gibt, aber wir werden nicht picken).
Die Entscheidungen über die Speicherung von Daten in einer RDBMS- oder NoSQL-Datenbank hängen eher davon ab, wie Sie die Daten verwenden möchten , als von der tatsächlichen Art der Daten.
Wenn Sie alle Arten von Navigationspfaden zu den Daten unterstützen möchten, möchten Sie die Daten möglicherweise in einem RDBMS speichern, da Sie verschiedene Möglichkeiten haben, auf die Daten zuzugreifen und sie darzustellen. Sie benötigen die Datenbank, um eine ganze Menge schweres Heben für Sie zu erledigen. Beispielsweise kann auf die Bestelldaten über Kunden, Verkäufer, Artikelnummer (Artikel), Datum, Region usw. zugegriffen werden.
Wenn Sie jedoch nur über minimale Navigationspfade verfügen, können Sie möglicherweise nur das gesamte Objekt speichern. Beispielsweise ist "Basket", auf das nur vom Web-Frontend zugegriffen wird und das nicht lange gespeichert oder viel analysiert wird, möglicherweise besser für einen NoSQL-Store geeignet. Das Opfer, das Sie mit (Dokument- oder Schlüsselwert-) NoSQL-Datenspeichern bringen, besteht darin, dass Sie auf Beziehungen zwischen Sammlungen verzichten - wenn Sie diese Beziehungen nicht benötigen (für Navigationspfade, Ad-hoc-Abfragen oder Berichte) und diese in Ihrem System erledigen App, dann wirst du in Ordnung sein.
Natürlich können Sie Daten aus verschiedenen Gründen in beiden speichern, aber das hat seine eigenen Nachteile.
quelle
Daten sind nicht "Objekt in der Natur" oder "relational in der Natur". Jede Art von Daten kann sowohl in relationaler als auch in Objektmodell- / Diagrammstruktur dargestellt werden. Was angemessen ist, hängt davon ab, wie die Daten von den Anwendungen verwendet werden. Oft hast du sogar beides. Beispielsweise könnten auf einer Website verwendete Daten in einer relationalen Datenbank gespeichert, aber bei Bedarf in eine Diagrammstruktur geladen werden, die dann in einem speicherinternen Schlüsselwertspeicher zwischengespeichert wird.
Die Aussage, dass das Objekt / NoSql für einige Arten von Daten schneller als relational ist, ist einfach falsch. Was zählt ist wieder wie deine Bewerbung verwenden , um die Daten, nicht die Form der Daten selbst. Ein Objektspeicher lädt ein als Einheit gespeichertes Objektdiagramm schneller, ist jedoch beim Ad-hoc-Abfragen über viele Objekte oder beim Aktualisieren von Eigenschaften für viele Objekte viel langsamer.
quelle
Ich denke, die Schlüsselzeile aus dem Artikel ist:
Mir scheint, der Autor macht einen guten Punkt darin, dass, wenn Ihr Code zum Beispiel die Anzahl der Kunden in Spanien für ein bisschen Logik ermittelt, Sie keine Kundenliste mit allen Kunden in Spanien auffüllen und dann zählen sollten der Kunde widerspricht. (in welche Richtung ein ORM Sie drängen könnte)
An der Kundendatenstruktur selbst kann man natürlich nicht erkennen, ob sie so verwendet werden. Ich denke, wir sollten "Daten" so interpretieren, dass sie "alle von Ihrer Anwendung verwendeten Informationen" bedeuten. Wenn dies Dinge wie Aggregate oder "Alle X in Bezug auf Y" beinhaltet, sind Ihre "Daten" nicht für den atomaren NoSql-Ansatz geeignet
quelle