Frage

Was ist der Unterschied zwischen Graph-basierten Datenbanken ( http://neo4j.org/ ) und objektorientierte Datenbanken ( http://www.db4o.com/ )?

War es hilfreich?

Lösung

Ich würde diese Frage beantworten anders: Objekt- und Graphdatenbanken auf zwei unterschiedlichen Abstraktionsebenen arbeiten

.

Ein Hauptdatenobjektdatenbankelemente sind Objekte, die Art, wie wir sie von einer objektorientierten Programmiersprache kennen.

Eine Hauptdaten der Graphdatenbank Elemente sind Knoten und Kanten.

Eine Objektdatenbank hat nicht die Idee einer (bidirektionalen) Kante zwischen zwei Dingen mit automatischer referentielle Integrität usw. Eine Graph-Datenbank nicht den Begriff eines Zeigers, die NULL sein kann. (Natürlich kann man sich vorstellen, Hybriden).

In Bezug auf Schema eines Schema Objektdatenbank ist, was die Menge der Klassen in der Anwendung ist. Ein Graph-Datenbank-Schema (ob implizit, durch Konvention, was String Etikett bedeuten, oder explizit, durch Erklärung als Modelle, wie wir es tun in Infogrid zum Beispiel) ist von der Anwendung unabhängig. Dies macht es viel einfacher, beispielsweise mehrere Anwendungen für die gleichen Daten zu schreiben, eine Graph-Datenbank statt einer Objektdatenbank verwenden, da das Schema anwendungsunabhängig ist. Auf der anderen Seite, eine Grafik-Datenbank Sie kann nicht einfach ein beliebiges Objekt nehmen und es bestehen bleiben.

Verschiedene Werkzeuge für unterschiedliche Jobs würde ich denken.

Andere Tipps

Ja, scheint die API wie der große Unterschied, aber es ist nicht wirklich eine oberflächliche. Konzeptionell eine Reihe von Objekten wird eine Kurve bilden, und man könnte denken Sie an eine API, die diese Grafik in einer einheitlichen Art und Weise behandelt. Umgekehrt könnte man theoretisch Mine eine generische Graph-Struktur für Muster und ordnet sie auf Objekte über einige API ausgesetzt. Aber auch das Design der API eines tatsächlichen Produkt wird in der Regel Folge hat, wie die Daten tatsächlich gespeichert ist, wie kann es abgefragt werden, so würde es alles anderes als trivial sein, sagt ihnen, einen Wrapper erstellen und es wie etwas anderes aussehen. Auch eine objektorientierte Datenbank muß einig Integrität garantiert und eine Typisierung Struktur anzubieten, die eine Graph-Datenbank normalerweise nicht tun wird. In der Tat ist ernsthafte OO Datenbank weit von "freier Form":)

Hier finden Sie aktuelle [HyperGraphDB] [1] - es ist sowohl eine vollständige objektorientierte Datenbank (wie db4o) und eine sehr fortgeschrittene Graph-Datenbank sowohl in Bezug auf gegenständlich und Abfragefunktionen. Es ist in der Lage generaliHyper Speicher (wo Kanten an mehr als einen Knotenpunkt und können auch auf andere Kanten als auch), ist es ein voll ausfahrbaren Typ-System als Graph etc eingebettet hat.

Im Gegensatz zu anderen Graph-Datenbanken, in HyperGraphDB wird jedes Objekt einen Knoten oder eine Kante in der Grafik mit keinem zu minimaler API Intrusion und Sie haben die Möglichkeit, Ihre Objekte als Diagramm darstellen oder sie in eine Art und Weise der Behandlung, die ist orthogonal zu der graph-Struktur (als „Payload“ Werte des Knoten oder Kanten). Sie können tun, anspruchsvolle Querungen, individuelle Indexierung und Abfrage.

Eine Erklärung, warum HyperGraphDB in der Tat ein ODMS finden Sie in den Blog-Post ist HyperGraphDB eine OO-Datenbank? bei Kobrix Webseite.

Wie aus einem anderen Blickwinkel descibes wird ein GraphDB Ihrer Daten aus der Anwendung von Klassen und Objekten getrennt halten. Ein GraphDB auch mehr integrierte Funktionalität hat mit Grafiken zu behandeln, natürlich -. Wie kürzesten Weg oder tief Traversierungen

Ein weiterer wichtiger Unterschied ist, dass in einem GraphDB wie Neo4j Sie die grafische Darstellung, basierend auf Beziehung (Kante) Arten und Richtungen ohne Laden der vollständigen Knoten (einschließlich der Knoten-Eigenschaften / Attribute) durchqueren können. Es gibt auch die Wahl der Verwendung von Neo4j als Backend eines Objekts db, noch in der Lage sein alle graphie Sachen zu verwenden, finden Sie unter: Neo4j .rb . Eine neue Option ist Spring Data Graph zu verwenden, die GraphDB Unterstützung durch Anmerkungen.

gibt

Die gleiche Frage wurde in den Kommentaren gefragt href="http://nosql.mypopescu.com/post/371163653/comparing-oodb-and-nosql" rel="noreferrer"> diese Blogpost .

Von einem schnellen Durchsuchen von ihren beiden Seiten:

Der wesentliche Unterschied ist die Art, wie die APIs strukturiert sind, eher als die Art von Freiform-Datenbank, die Sie mit ihnen aufbauen können.

db4o verwendet eine Objektzuordnung - Sie eine Java / C # Klasse erstellen, und es verwendet Reflektion sie in der Datenbank persistieren

.

Neo4j hat eine explizite Manipulation API.

Neo4j schien, in meiner bescheidenen Meinung nach, viel schöner zu interagieren mit.

Sie können auch einen Schlüssel-Wert-Speicher betrachten -. Sie genau das gleiche mit einem von denen, Freiform-Datenbank machen könnten

Der Unterschied bei Low-Level ist nicht so riesig. Beide verwalten Beziehungen als direkte Verbindungen ohne teure verbindet. Außerdem haben beide eine Art und Weise Beziehungen mit der Abfragesprache zu durchlaufen, aber die Graph-Datenbank hat Operatoren rekursiv auf Nth Ebene zu gehen.

Aber der größte Unterschied ist in der Domäne: In einer Graph-Datenbanken alle auf dem 2 Typen basiert. Eckpunkten und Kanten, auch wenn Sie in der Regel Ihre eigenen Typen als eine Art Subtypen von Vertex oder Edge definieren

In der ODBMS haben Sie keine Vertex und Edge-Konzepte, wenn Sie Ihre eigenen schreiben.

Mit Graph-Datenbanken, haben Sie einen leichten Anschein einer Chance, dass es auf mathematische Graphentheorie basiert. Mit objektorientierten Datenbanken, haben Sie die Gewissheit, dass es auf gar nichts basiert (und ganz sicher keine mathematische Theorie überhaupt).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top