2010-05-16 11 views
16

Desidero utilizzare un database grafico utilizzando php. Puoi indicare alcune risorse su dove iniziare? C'è qualche esempio di codice/tutorial là fuori? O ci sono altri metodi per memorizzare dati che si relazionano tra loro in situazioni totalmente casuali/astratte?Database strutturati per grafici e Php

-

esempio molto astratta delle relazioni necessarie: John riferisce a Maria, entrambi si riferiscono a scuola, John è alto, Maria è breve, John ha Occhi azzurri, Maria ha occhi verdi, interrogare quello che voglio è che le persone sono legate a 'persone che hanno brevi Occhi verdi e andare a scuola' -> risposta John

-

Un altro esempio:

TrackA -> ArtistA 
      -> ArtistB 

      -> AlbumA -----> [ label ] 
      -> AlbumB -----> [ A ] 

      -> TrackA:Remix 
      -> Genre:House 

      -> [ Album ] -----> [ label ] 
    TrackB -> [ C ]  [ B ] 

esame ple queries:

A quale genere si avvicina TrackB? answer: House - perché è correlato all'album C, che è correlato a TrackA ed è correlato a Genere: House

Ottieni tutti i generi: album correlati House of Label A: risultato: AlbumA, AlbumB - perché entrambi hanno TrackA che è legato al genere: Casa

-

e 'possibile in MySQL ma richiederebbe un insieme fisso di attributi/colonne per ogni elemento e una query non flessibile complesso, invece ho bisogno di tutti gli attributi per essere un elemento da solo e invece di "appartenenza" a qualcosa, per essere "correlato" a qualcosa.

+1

Qual è la differenza tra "appartenere a qualcosa e" essere correlato a qualcosa "(oltre a utilizzare una parola diversa)? –

+0

@Joel L: per appartenenza intendo come attributi che un elemento ha e relativo è il modo in cui gli elementi sono correlati l'un l'altro diverso dall'attributo dell'altro. Come le Tracce appartengono all'artista ma la stessa Traccia può avere più di un Artista. Usando il metodo genitore/figlio dovresti duplicare lo stesso bambino (traccia) per ogni genitore (artista) più una traccia può essere presente in più di un album e in più di un'etichetta. Come descriveresti una relazione come questa senza utilizzare i grafici? – stagas

risposta

8

Ci sono alcuni lavori in corso per rendere disponibile il database grafico Neo4j da PHP, vedere this wiki page per ulteriori informazioni! Riguardo a come modellare il tuo dominio come un grafico, lo user mailing list tende ad essere davvero fantastico.

Aggiornamento: ora c'è un breve getting started blog post per un client PHP neo4j REST.

+0

neo4j La query del client REST è piuttosto lenta se paragonata a mysql – conandor

1

Mi sembra un po 'un tipico "problema" Prolog ... che è un linguaggio di programmazione piuttosto diverso rispetto a PHP. Ma forse potresti lavorare con i popen.

Oppure si definisce una tabella SQL con colonne [id, predicato, atomo1, atomo2], per memorizzare la verità di "Maria ha occhi verdi": predicate = "ha", atom1 = "Mary", atom2 = "Verde Eyes".

Ora è possibile unire e filtrare i predicati e gli attributi con l'SQL desiderato.

+0

Penso che ti occorrerà una riga per ogni tipo di relazione che può essere abbastanza righe se gestisci molti dati come un database di musica o film con tag e autori, artisti, genere e più relazioni? – stagas

+0

Sì, ma quasi tutti i grafici tendono ad avere un numero esponenziale di spigoli ("relazioni") tra i nodi ("atomi"), il che rende problematico il problema dei grafici (specialmente se viene utilizzato anche il partizionamento orizzontale) utilizzando i database tradizionali molto più difficile. –

1

Si tipo di suoni, come si dovrebbe approccio in questo modo:

1) codice un oggetto grafico che vi permetterà la tua ricerca i dati nel modo desiderato.

2) strato di persistenza per l'oggetto

3) ottimizzare le chiamate che fanno la query di nell'oggetto grafico da usare database chiamate quando necessario (ad esempio, se è necessario conservare la memoria).

+0

Sì, questa può essere una soluzione, stavo pensando se ci fossero già delle classi là fuori per quello, ma sembra che le strutture dei grafici abbiano poca attenzione al momento e il codice che puoi trovare è pochissimo Credo che dovrò inventare la ruota ... – stagas

1

Il mio suggerimento è di scegliere un DB grafico basato su Java come OrientDB o neo4j e quindi utilizzarlo tramite lo PHP/Java bridge. Nel prossimo futuro neo4j (e ad un certo punto anche OrientDB) dovrebbe ottenere il supporto nativo per php e puoi sostituire il bridge con l'accesso nativo.

1

e tenendo conto di questo problema è un anno di età, potrebbe essere comunque interessante notare che è possibile fare una query con ogni datastore rdf che supporta le lingue sparql o comparabili.

0

si possono anche trovare un cliente Rexster per PHP: https://github.com/PommeVerte/rexpro-php

informazioni come extra. Rexster può caricare grafici da vari altri db grafici come Neo4j e OrientDb, tra gli altri.

Problemi correlati