Woher weiß ich, dass meine Daten relational oder objektorientiert sind?


16

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?


Erzählen Sie uns mehr über Ihre Daten ...
FrustratedWithFormsDesigner

7
@FrustratedWithFormsDesigner Ich glaube, er sucht nach allgemeinen Richtlinien.
C. Ross

Die Zeile, in der es um "Schlüsselwertspeicher geht, mit denen Sie elegante, in sich geschlossene Datenstrukturen in großen Mengen speichern und blitzschnell darauf zugreifen können", scheint die "Objekt" -Daten zu beschreiben, die in NoSQL verwendet werden sollten - im Grunde genommen klingt wie "in sich geschlossene" Datenblöcke ohne Verweise oder Beziehungen zu anderen Datenblöcken .
FrustratedWithFormsDesigner

Habe gerade diesen Link bekommen. Hoffe, es hat Hinweise zu beantworten- highscalability.com/blog/2011/6/15/…
Gulshan

Antworten:


16

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.


1
Eigentlich muss ich als jemand, der sich anfangs über die Einfachheit der Frage lustig machte, Bravo sagen, um eine verständliche und aufschlussreiche Antwort zu erhalten. Sie sollten sich mit dem Schreiben von Büchern befassen.
Philip

Können wir das so zusammenfassen, dass im relationalen Design zu viele LEFT OUTER JOINS vorhanden sind oder nicht?
Gulshan

Ich würde zögern, eine solche Vereinfachung vorzunehmen. Es ist eines der Symptome, aber nicht das einzige.
Wolfgangsz

Ein bisschen Beispiel bitte?
Gulshan

Angenommen, Sie speichern Informationen über Personen. Jede einzelne Person kann eine beliebige Kombination von Attributen aus einem Satz von 300 haben. Alle können mehrfach oder gar nicht vorkommen. Einige von ihnen setzen sich aus anderen Attributkombinationen zusammen, dh es handelt sich um Mengen. Und jetzt möchten Sie nach allen Personen suchen, bei denen ein bestimmtes Attribut entweder nicht vorhanden oder nicht von einem bestimmten Wert ist. Das ist die Art von Dingen, die Ihren normalen SQL Query Builder in den Wahnsinn treiben.
Wolfgangsz

5

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.


2

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.


0

Ich denke, die Schlüsselzeile aus dem Artikel ist:

"Likewise, sometimes the output will be a single object X, which is easy to represent. But sometimes the output will be a grid of aggregate data, or a single integer count"

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.