source property open neo4 cases mongodb graph neo4j rdf nosql

mongodb - property - neo4 graph database



Graph DBs vs. Document DBs vs. Triplestores (3)

Existe un estándar ad hoc para las bases de datos de gráficos: Tinkerpop , que incluye el lenguaje de consulta Gremlin (imperativo), respaldado por todo lo que no sea ArangoDB.

Para enturbiar aún más las aguas, también hay bases de datos de gráficos de documentos híbridos OrientDB y ArangoDB.

Me sorprende que la principal diferencia entre almacenar una relación hija usando un borde en una base de datos gráfica versus como un objeto incrustado en una base de datos documental es que con la primera se puede mover al niño a otra matriz de forma barata y sin riesgo de que aparezca en dos lugares con dos lugares diferentes.

Esta es una pregunta un tanto abstracta y general. Me interesan las propiedades inherentes (y específicas de la implementación) de los diferentes enfoques para persistir datos no estructurados con muchas referencias internas (tipo gráfico) y muchas propiedades (tipo JSON).

  • Como un gráfico es un superconjunto de un árbol, puede ver los DB de gráficos (por ejemplo, Neo4j) como un superconjunto de documentos DB (por ejemplo, MongoDB). Es decir, un DB de gráficos proporciona toda la funcionalidad de un documento DB además, además, también permite bucles o tiene un tipo de puntero nativo para que no tenga que eliminar manualmente las claves / identificadores foráneos. Entonces, ¿hay algún punto de inflexión que alcance cuando agregue más referencias a sus objetos / recursos en donde esté mejor con un DB de gráficos, pero anteriormente estaba mejor con un almacén de documentos? ¿Hay ventajas para documentar DBs (espacio de almacenamiento, rendimiento?) O ¿debería seguir siempre con un gráfico DB en caso de que necesite más referencias en el futuro?

  • Del mismo modo, ¿cómo se comparan las DB de gráficos y los almacenes triples (por ejemplo, las tiendas de RDF)? Los DB de gráfico (donde los nodos y los bordes tienen propiedades) parecen ser un superconjunto de los almacenes triples simples. Entonces, ¿para qué problemas (si hay alguno) realizar triplestores realmente mejor que, por ejemplo, Neo4j? (Una de las ventajas de las tiendas RDF es que hay un lenguaje de consulta estandarizado, SPARQL, aunque parece que hay muchas personas a las que no les gusta SPARQL y, por lo tanto, lo llamarían una desventaja).

Supongo que mi pregunta es: el modelo gráfico (con propiedades) parece ser capaz de expresar claramente todo tipo de datos, ¿cuál es la trampa cuando ingresas a la realidad? Supongo que la captura de los gráficos DB es el rendimiento, por lo que me gustaría ver algunos números o reglas generales sobre qué tipo de desaceleraciones se esperan al cargar, consultar y modificar datos y memoria, y requisitos de almacenamiento persistentes (en comparación con el documento y tiendas triples). Además, ¿qué pasa con la escalabilidad horizontal? Tengo la impresión de que el campo de juego es bastante nivelado.

¿Cree que es posible que los gráficos con su expresividad se conviertan en el nuevo modelo de almacenamiento predeterminado para proyectos que no tienen datos supergrandes, o estamos condenados a una década de Polyglot Persistence con RDBMS, tiendas JSON y Graph DB viviendo uno junto al otro? que deben integrarse con aún más código de pegamento?


No estoy seguro de estar de acuerdo con el sentimiento de que a mucha gente no le gusta SPARQL. SPARQL 1.0 tuvo algunas deficiencias, pero atendió muy bien para lo que fue diseñado, y la nueva iteración, SPARQL 1.1, se basa en agregar muchas construcciones de SQL que las personas esperaban ver en la especificación original, incluidas subconsultas, agregados y actualización semántica. Creo que el hecho de que sea estándar y que pueda esperar ver el mismo análisis sintáctico y la semántica en cada tienda triple, a diferencia de los dialectos de SQL, es una buena característica.

También afirmaría que todas las tiendas triples son bases de datos de gráficos; puedes poner propiedades en bordes específicos en RDF, aunque no tan bien como puedes con Neo4j. Pero las tiendas triples tienen la ventaja de un lenguaje de consulta real, una representación de datos estándar de w3c que hace que sea trivial llevar sus datos a otro almacén múltiple, y para un número de tiendas triples, la capacidad de realizar un razonamiento basado en OWL.

No sé nada sobre la escalabilidad para la mayoría de los db de gráfico, pero en general, las bases de datos RDF comerciales escalan bastante bien. Todos pueden escalar en los miles de millones de triples, que manejan muchos casos de uso. Sin embargo, la forma en que manejan la escala difiere enormemente de la de proveedor a proveedor para escalar o escalar, agrupar, etc. También verá requisitos de hardware y de memoria bastante diferentes para que coincidan con las implementaciones de cada uno. Para mí, tendí ir y tomar una instancia de EC2, generalmente un 2XL o 4XL, montar un EBS lo suficientemente grande como para contener los datos, y estoy bastante bien configurado.

Además, algunas tiendas triples se integran con Lucene o tecnologías similares para proporcionar índices invertidos sobre los datos, y muchos ahora están empezando a incluir índices geoespaciales y temporales. Estas son características muy útiles que no estoy seguro de su disponibilidad en algo como Neo4j.

Dicho esto, no van a escalar tan bien como a las bases de datos relacionales, simplemente no son tan maduras. Pero tampoco te van a fastidiar cuando tienes cantidades "reales" de datos. Por supuesto, una de las ventajas de las tiendas triples es el razonamiento, que a escala es engañoso, pero esa es la razón por la cual se crearon los diversos perfiles OWL. Pero puedes arrinconarte si no piensas en el futuro.

Creo que las bases de datos de gráficos, tiendas triples en particular, pueden ser una buena combinación para muchas aplicaciones que se están construyendo, pero no creo que eso signifique que todo deba hacerse con ellas. Como cualquier otra cosa, son herramientas con sus puntos buenos y sus puntos malos, por lo que tiene que tomar la decisión correcta en función de su aplicación. Pero probablemente siempre merecen al menos una consideración en estos días.


Solo una pequeña corrección para responder a amk: Tinkerpop también contiene un adaptador para ArangoDB, ver https://github.com/triAGENS/blueprints-arangodb-graph/wiki/Gremlin . Entonces puedes usar consultas de Gremlin con ArangoDB.

En general, las bases de datos multimodelo como ArangoDB u OrientDB le permiten utilizar todas las características agradables de las bases de datos de documentos (sin esquema, índices) junto con las estructuras de gráficos. Un vértice o un borde es simplemente un documento como en una base de datos de documentos. Puede tener tantas propiedades o incluso documentos incrustados como desee. Puede definir hash, rango, texto completo o índices geográficos en estos documentos. O puede olvidarse de la estructura del documento y ver sus documentos como vértices y bordes, usando GREMLIN o algún lenguaje transversal para investigar el gráfico subyacente.

En cuanto a la pregunta "estamos condenados a la persistencia políglota": Independientemente de la pregunta de la base de datos de documento / gráfico, creo que RDBMS durará un poco más. Entonces, la respuesta a esa pregunta es: "sí, eso es muy probable".