【发布时间】:2015-11-18 05:34:00
【问题描述】:
我不确定这个问题是在这里还是在 dba.stackexchange.com 上更合适,所以请告诉我,如果需要我可以移动它。
我正在从头开始一个全新的项目,并且正在研究图形数据库的适用性(在这种情况下可能是 neo4j)。但是,预计该系统具有适合图形数据库的数据(如 HR 层次结构),以及在 RDBMS 中更好的数据(如订单、发票、产品等)。
我的问题是关于加入这两个数据库的最佳方式。这是一个简化的示例,其中我们在图形数据库中有销售公司的 HR 层次结构,并且我们在 RDBMS 中有产品和订单:
层次结构(图数据库)
订单/产品 (rdbms)
假设我们想要在“state1”下的某个级别查找所有可委托给销售员工的订单。
您可以使用 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。这绝对是我考虑过的一个选项,但在这一点上,我仍在试图弄清楚图形数据库在整体上的适合程度。我对更大、更一般的问题更感兴趣,"如果两个系统中都有东西,那么是否有一种好的/快速/优雅的方法可以通过单个查询来做到这一点? "
【问题讨论】:
标签: mysql database neo4j relational-database graph-databases