2010-05-16 20 views
16

Quiero usar una base de datos de gráficos usando php. ¿Puedes indicar algunos recursos sobre dónde comenzar? ¿Hay algún ejemplo de código/tutorial por ahí? ¿O hay algún otro método para almacenar datos que se relacionan entre sí en situaciones totalmente al azar/abstractas?Bases de datos estructuradas por gráficos y Php

-

ejemplo muy abstracta de las relaciones necesarias: John refiere a María, ambos se relacionan con la escuela, John es alto, María es corto, John tiene los ojos azules, María tiene ojos verdes, consulta lo que quiero es lo que las personas se relacionan con 'gente corta que tienen los ojos verdes y van a la escuela' -> respuesta John

-

Otro ejemplo:

TrackA -> ArtistA 
      -> ArtistB 

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

      -> TrackA:Remix 
      -> Genre:House 

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

examen ple consultas:

¿Qué género es más cercano al TrackB? respuesta: House - porque está relacionado con Album C, que está relacionado con TrackA y está relacionado con Género: House

Obtener todo Género: álbumes relacionados con House de Label A: resultado: AlbumA, AlbumB - porque ambos tienen TrackA que se relaciona con Género: House

-

es posible en MySQL pero requeriría un conjunto fijo de atributos/columnas para cada elemento y una consulta no flexible compleja, en vez necesito todos los atributos para ser una elemento por sí mismo y en lugar de 'pertenecer' a algo, estar 'relacionado' con algo.

+1

¿Cuál es la diferencia entre "pertenecer a algo y" estar relacionado con algo "? –

+0

@Joel L: Al pertenecer me refiero a los atributos que tiene un elemento, y relacionado es cómo se relacionan los elementos el uno al otro que no sea uno es el atributo del otro. Al igual que las Pistas pertenecen a Artista, pero la misma Pista puede tener más de un Artista. Usando el método padre/hijo necesitarías duplicar el mismo hijo (pista) para cada padre (artista) más una canción puede estar en más de un álbum y en más de una etiqueta. ¿Cómo describiría una relación como esta sin usar gráficos? – stagas

Respuesta

8

Se está trabajando para que la base de datos de gráficos Neo4j esté disponible en PHP, consulte this wiki page para obtener más información. En cuanto a cómo modelar su dominio como un gráfico, el user mailing list tiende a ser bastante impresionante.

Actualización: ahora hay un corto getting started blog post para un cliente PHP neo4j REST.

+0

neo4j REST consulta del cliente bastante lenta si se compara con mysql – conandor

1

Me parece un poco como un problema "típico" Prolog ... que es un lenguaje de programación bastante diferente de PHP. Pero tal vez podrías trabajar con Popen.

O se define una tabla de SQL con columnas [ID, predicado, atom1, atom2], para almacenar el truthness de "María tiene los ojos verdes": predicado = "tiene", atom1 = "María", atom2 = "Verde Ojos ".

Ahora puede unir y filtrar los predicados y atributos con el SQL de su elección.

+0

Creo que necesitaría una fila para cada tipo de relación, que puede ser bastante filas si maneja una gran cantidad de datos, como una base de datos de música o películas con etiquetas y autores, artistas, género y más relaciones? – stagas

+0

Sí, pero casi todos los gráficos tienden a tener un número exponencial de bordes ("relaciones") entre nodos ("átomos"), lo que hace que la resolución del problema gráfico (especialmente si también se usa la partición horizontal) usando bases de datos tradicionales sea mucho más difícil. –

1

En cierto modo suena como usted debe acercarse de esta manera:

1) Código de un objeto gráfico que le permitirá consultar sus datos de la forma que desee.

2) escribe una capa de persistencia para su objeto

3) optimizar las llamadas que realizan la consulta está en el objeto gráfico para utilizar bases de datos llama cuando sea apropiado (por ejemplo, si usted necesita para conservar la memoria).

+0

Sí, eso puede ser una solución, estaba pensando si ya había clases para eso, pero parece que las estructuras de gráficos tienen muy poca atención en este momento y el código que se puede encontrar es muy pocos. Creo que voy a tener que inventar la rueda ... – stagas

1

Mi sugerencia es elegir una base de datos gráfica basada en Java como OrientDB o neo4j y luego usarla a través del PHP/Java bridge. En un futuro próximo, neo4j (y en algún momento también OrientDB) debería obtener compatibilidad nativa con php y puede reemplazar el puente con acceso nativo.

1

bien teniendo en cuenta esta cuestión es de un año de edad, todavía podría ser interesante tener en cuenta que se puede hacer una consulta de este tipo con cada datastore rdf que soporta sparql o idiomas comparables.

0

También se puede encontrar un cliente Rexster para php: https://github.com/PommeVerte/rexpro-php

información Como extra. Rexster puede cargar gráficos de otros dbs de gráficos como Neo4j y OrientDb, entre otros.

Cuestiones relacionadas