ventajas que español desventajas caracteristicas mysql database neo4j relational-database graph-databases

mysql - que - mongodb español



¿Unir una base de datos de gráficos a un RDBMS? (1)

Según la información en su pregunta, me parece que los datos de su orden son perfectamente adecuados para la representación en una base de datos gráfica.

Supongamos que extendió su modelo Graph DB agregando lo siguiente (los tipos de relaciones quedan fuera para mayor claridad):

(e:Employee {id: 123, name: "Foo"})-->(o:Order {id: 234, frozenPrice: 10.99}) (o)-->(c:Customer {id: 345}) (o)-->(i:Item {desc:"Bar", currentPrice:12.99})

Entonces, puede realizar su consulta deseada de la siguiente manera:

MATCH (o:Order)<--(closers:Employee)-[member_of]->(:Group)<-[parent_of]-(parent:Group) WHERE parent.name = ''state 1'' RETURN orders;

Esto debería ser más rápido, y sin duda es mucho menos complejo (y propenso a errores) que intentar hacer una sola consulta usando 2 DB diferentes.

No estaba seguro de si esta pregunta era más adecuada aquí o en dba.stackexchange.com, así que avíseme y lo puedo mover si es necesario.

Estoy comenzando un nuevo proyecto desde cero y estoy investigando la idoneidad de una base de datos de gráficos (en este caso probablemente neo4j). Sin embargo, se anticipa que el sistema tendrá datos apropiados para una base de datos de gráficos (como una jerarquía de recursos humanos), así como datos que serían mejores en un SGBDR (como pedidos, facturas, productos, etc.).

Mi pregunta es sobre la mejor forma de unirme a estas 2 bases de datos. Aquí hay un ejemplo simplificado en el que tenemos una jerarquía de recursos humanos de una empresa de ventas en la base de datos de gráficos, y tenemos productos y pedidos en un RDBMS:

Jerarquía (base de datos de gráficos)

Pedidos / Productos (rdbms)

Digamos que queríamos encontrar todas las órdenes comisionables para un empleado de ventas en algún nivel BAJO "state1".

Puede usar 2 consultas: 1 para sacar a todos los empleados de ventas del gráfico, y un 2º para extraer todos los pedidos de esos empleados del RDBMS:

(pseudo-código)

MATCH (closers:employee)-[member_of]->(:group)<-[parent_of]-(parent:group) WHERE parent.name = ''state 1'' RETURN closers;

luego canaliza esos resultados en otra consulta:

(pseudo-código)

SELECT * FROM orders WHERE salesEmployeeId IN ( <resultId1>, <resultId2>, ... <resultIdN> );

Esto funciona, pero me parece particularmente ineficiente a escala, y algo poco elegante. Lo que ME GUSTARÍA hacer es unirme DIRECTAMENTE a los rdbms. ¿Hay alguna manera de lograr algo como esto?

(pseudo código)

MATCH (closers:employee)-[member_of]->(:group)<-[parent_of]-(parent:group) WHERE parent.name = ''state 1'' JOIN rdbms.orders ON orders.salesEmployeeId = closers.id RETURN orders;

EDITAR: se ha señalado que la sección de pedidos de esta pregunta podría implementarse fácilmente en una base de datos de gráficos para que el RDBMS no sea necesario en absoluto. Definitivamente esa es una opción que he considerado, pero en este punto, todavía estoy tratando de descubrir qué tan bien encaja una base de datos de gráficos en general. Estoy más interesado en la pregunta más amplia y más general de: " Si las cosas están en ambos sistemas, ¿existe una forma buena / rápida / elegante de hacer esto con una sola consulta?"