mysql – 将Graph DB加入RDBMS?
作者:互联网
我不确定这个问题在这里或dba.stackexchange.com更合适,所以请告诉我,如果需要我可以移动它.
我正在从头开始一个全新的项目,我正在研究图形数据库的适当性(在这种情况下可能是neo4j).但是,预计系统会有适合图形数据库(如HR层次结构)的数据,以及在RDBMS中更好的数据(如订单,发票,产品等).
我的问题是关于加入这两个数据库的最佳方式.这是一个简化的例子,我们在图形数据库中有一个销售公司的HR层次结构,我们在RDBMS中有产品和订单:
层次结构(图形数据库)
订单/产品(rdbms)
假设我们想在“state1”下找到某个级别的销售员工可以委托的所有订单.
您可以使用2个查询 – 1来从图表中提取所有销售员工,并使用第2个来从RDBMS中提取这些员工的所有订单:
(伪代码)
MATCH (closers:employee)-[member_of]->(:group)<-[parent_of]-(parent:group)
WHERE parent.name = 'state 1'
RETURN closers;
然后将这些结果传递给另一个查询:
(伪代码)
SELECT * FROM orders WHERE salesEmployeeId IN ( <resultId1>, <resultId2>, ... <resultIdN> );
这是有效的,但它让我感到特别低效,但有点不优雅.我喜欢做的是能够直接加入rdbms.有没有办法实现这样的事情?
(伪代码)
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;
编辑:有人指出,这个问题的订单部分可以很容易地在图形数据库中实现,因此根本不需要RDBMS.这绝对是我考虑过的一个选项,但在这一点上,我仍然在试图弄清楚图形数据库在整体上的适用程度.我对更大,更一般的问题更感兴趣,“如果两个系统都存在问题,那么使用单个查询是否有一个好/快/优雅的方法?”
解决方法:
根据您问题中的信息,在我看来,您的订单数据非常适合在图表数据库中表示.
假设您通过添加以下内容扩展了Graph DB模型(为清晰起见,省略了关系类型):
(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})
然后,您可以非常简单地执行所需的查询,如下所示:
MATCH (o:Order)<--(closers:Employee)-[member_of]->(:Group)<-[parent_of]-(parent:Group)
WHERE parent.name = 'state 1'
RETURN orders;
与尝试使用2个不同的DB进行单个查询相比,这应该更快,并且肯定不那么复杂(并且容易出错).
标签:mysql,database,relational-database,graph-databases,neo4j 来源: https://codeday.me/bug/20190628/1315440.html