ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql – 将Graph DB加入RDBMS?

2019-06-28 12:12:28  阅读:275  来源: 互联网

标签:mysql database relational-database graph-databases neo4j


我不确定这个问题在这里或dba.stackexchange.com更合适,所以请告诉我,如果需要我可以移动它.

我正在从头开始一个全新的项目,我正在研究图形数据库的适当性(在这种情况下可能是neo4j).但是,预计系统会有适合图形数据库(如HR层次结构)的数据,以及在RDBMS中更好的数据(如订单,发票,产品等).

我的问题是关于加入这两个数据库的最佳方式.这是一个简化的例子,我们在图形数据库中有一个销售公司的HR层次结构,我们在RDBMS中有产品和订单:

层次结构(图形数据库)

Hierarchy (graph database)

订单/产品(rdbms)

Orders/Products (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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有