Domanda

Qual è la differenza tra database del grafico-based ( http://neo4j.org/ ) e orientato agli oggetti basi di dati ( http://www.db4o.com/ )?

È stato utile?

Soluzione

Mi piacerebbe rispondere a questa in modo diverso: database degli oggetti e grafico operano su due diversi livelli di astrazione

.

principali elementi di dati di un database ad oggetti sono oggetti, il modo in cui li conosciamo da un linguaggio di programmazione orientato agli oggetti.

principali elementi di dati di un database grafico sono nodi e spigoli.

Un database oggetto non ha la nozione di (bidirezionale) spigolo tra due cose con integrità referenziale automatica ecc Un database grafico non ha la nozione di un puntatore che può essere NULL. (Naturalmente si può immaginare ibridi.)

In termini di schema, lo schema di un database ad oggetti è qualunque sia l'insieme di classi è nella domanda. lo schema di un database grafico (sia implicita, per convenzione di che cosa significano le etichette stringa, o esplicita, mediante dichiarazione come modelli, come lo facciamo in InfoGrid per esempio) è indipendente dall'applicazione. Ciò rende molto più semplice, ad esempio, per scrivere applicazioni multiple contro gli stessi dati utilizzando un database grafico invece di un database degli oggetti, perché lo schema è indipendente dalle applicazioni. D'altra parte, utilizzando un database grafico non si può semplicemente prendere un oggetto arbitrario e persistono.

Diversi strumenti per diversi lavori penserei.

Altri suggerimenti

Sì, l'API sembra la differenza principale, ma non è davvero un uno superficiale. Concettualmente un insieme di oggetti formerà un grafico e si potrebbe pensare ad un'API che tratta questo grafico in modo uniforme. Al contrario, si potrebbe, in teoria, la mia una struttura generico grafico per i modelli e li mappa agli oggetti esposti tramite alcune API. Ma il disegno delle API di un prodotto reale generalmente avere conseguenze su come i dati vengono effettivamente memorizzati, come può essere interrogato, quindi sarebbe tutt'altro che banale, per esempio, creare un involucro e far sembrare qualcos'altro. Inoltre, un database orientato agli oggetti deve offrire alcune garanzie di integrità e una struttura che digitando un database grafico non normalmente. In realtà, grave del database OO sono ben lungi dall'essere "forma libera":)

Date un'occhiata a [HyperGraphDB] [1] - è sia un database completo orientato agli oggetti (come db4o) e di un database grafico molto avanzata, sia in termini di capacità di rappresentazione e di interrogazione. Esso è in grado di memorizzare ipergrafi generalizzate (dove bordi possono puntare a più nodi e anche per altri bordi oltre), ha un sistema di tipo completamente estensibile incorporato come un grafico etc.

A differenza di altri database del grafico, in HyperGraphDB ogni oggetto diventa un nodo o un vantaggio nel grafico, con nessuno-to-intrusione minima API e si ha la scelta di rappresentare gli oggetti sotto forma di grafico o di trattarli in un modo che è ortogonale alla struttura del grafo (come valori "payload" dei nodi o bordi). Si può fare attraversamenti sofisticati, l'indicizzazione del sito e l'esecuzione di query.

Una spiegazione per questo HyperGraphDB è infatti un ODMS, vedere il post sul blog è HyperGraphDB un database OO? sul sito di Kobrix.

Come si descibes da un'altra angolazione, un graphdb mancherà di tenere i dati separati dalle classi di applicazioni e oggetti. Un graphdb ha anche più funzionalità incorporate a che fare con i grafici, ovviamente -. Come percorso più breve o attraversamenti profondi

Un'altra importante differenza è che in un graphdb come Neo4j si può attraversare il grafico basato su relazioni tipi e indicazioni (bordo) senza caricare i nodi complete (incluse le proprietà dei nodi / attributi). C'è anche la scelta di utilizzare Neo4j come back-end di un db oggetto, ancora in grado di utilizzare tutte le cose grafia, vedere: jo4neo Questo progetto ha un approccio diverso che potrebbe anche contare come un db oggetto sulla parte superiore del Neo4j: Neo4j .RB. Una nuova opzione è quella di utilizzare primavera dati grafico , che dà graphdb sostegno attraverso le annotazioni.

La stessa domanda è stata posta nei commenti a questo blogpost .

Da una rapida occhiata di entrambi i loro siti web:

La differenza principale è il modo in cui le API sono strutturati, piuttosto che il tipo di database di forma libera si può costruire con loro.

db4o utilizza una mappatura oggetto - si crea un Java / C # di classe, ed utilizza la riflessione a persistere nel database

.

Neo4j ha un'API di manipolazione esplicito.

Neo4j sembrava, a mio modesto parere, molto più bello di interagire con.

Si potrebbe anche considerare un negozio di valori-chiave -. Si potrebbe fare esattamente lo stesso database a forma libera con uno di quelli

La differenza a basso livello non è così enorme. Entrambi gestire le relazioni come collegamenti diretti senza giunzioni costosa. Inoltre entrambi hanno un modo per attraversare i rapporti con il linguaggio di interrogazione, ma il database grafico ha operatori di andare in modo ricorsivo a livello Nth.

Ma la differenza più grande è di dominio: in un database grafico tutto si basa sul 2 tipi:. Vertici e spigoli, anche se di solito è possibile definire i propri tipi come una sorta di sottotipi di Vertex o Bordo

Nel ODBMS hai nessun vertice e EDGE concetti, a meno che non si scrive il proprio.

Con database del grafico, si dispone di una lieve parvenza di una possibilità che si basa sulla teoria dei grafi matematica. Con database orientati agli oggetti, si ha la certezza che si basa su nulla (e certamente nessuna teoria matematica a tutti).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top