ventajas una orientada grafos estructura ejemplo desventajas definicion datos caracteristicas php database database-design nosql graph-databases

php - ejemplo - estructura de una base de datos orientada a grafos



Base de datos de grafos estructurados y php. (8)

Quiero usar una base de datos gráfica usando php. ¿Puedes señalar algunos recursos sobre dónde empezar? ¿Hay algún código de ejemplo / tutorial por ahí? ¿O hay otros métodos para almacenar datos que se relacionan entre sí en situaciones totalmente aleatorias / abstractas?

-

Ejemplo muy abstracto de las relaciones necesarias: John se relaciona con Mary, ambos se relacionan con la escuela, John es alto, Mary es corto, John tiene ojos azules, Mary tiene ojos verdes, la pregunta que quiero es qué personas están relacionadas con ''personas cortas Ojos verdes y ve a la escuela ''-> contesta John

-

Otro ejemplo:

TrackA -> ArtistA -> ArtistB -> AlbumA -----> [ label ] -> AlbumB -----> [ A ] -> TrackA:Remix -> Genre:House -> [ Album ] -----> [ label ] TrackB -> [ C ] [ B ]

Consultas de ejemplo:

¿A qué género está más cerca TrackB? respuesta: House - porque está relacionado con el Álbum C, que está relacionado con TrackA y está relacionado con Genre: House

Obtenga todos los álbumes relacionados con Género: Casa de la Etiqueta A: resultado: ÁlbumA, ÁlbumB - porque ambos tienen TrackA que está relacionado con Género: Casa

-

Es posible en MySQL, pero requeriría un conjunto fijo de atributos / columnas para cada elemento y una consulta compleja no flexible, en cambio necesito que cada atributo sea un elemento por sí mismo y en lugar de "pertenecer" a algo, que sea " relacionado con algo.


Bueno, teniendo en cuenta que esta pregunta tiene un año de antigüedad, podría ser interesante tener en cuenta que puede hacer una consulta de este tipo con cada almacén de datos rdf que admita sparql o idiomas similares.


Me suena un poco como un problema "típico" de Prolog ... que es un lenguaje de programación bastante diferente al de PHP. Pero quizás podrías trabajar con popen.

O bien, defina una tabla SQL con columnas [id, predicate, atom1, atom2], para almacenar la veracidad de "Mary has Green Eyes": predicate = "has", atom1 = "Mary", atom2 = "Green Eyes".

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


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



Se está trabajando para que la base de datos del gráfico Neo4j esté disponible desde PHP. ¡Consulte esta página wiki para obtener más información! Con respecto a cómo modelar su dominio como un gráfico, la lista de correo del usuario tiende a ser bastante impresionante.

Actualización: ahora hay una breve publicación de blog de inicio para un cliente PHP neo4j REST.


Suena como que deberías abordarlo de esta manera:

1) Codifique un objeto gráfico que le permita consultar sus datos de la forma que desee.

2) Escribe una capa de persistencia para tu objeto.

3) optimice las llamadas que realizan su consulta en el objeto gráfico para utilizar llamadas de base de datos cuando sea apropiado (por ejemplo, si necesita conservar memoria).


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

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