【问题标题】:Joining a Graph DB to an RDBMS?将 Graph DB 加入 RDBMS?
【发布时间】: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


    【解决方案1】:

    根据您问题中的信息,在我看来,您的订单数据非常适合在 Graph DB 中表示。

    假设您通过添加以下内容扩展了 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 个不同的数据库执行单个查询要简单得多(并且容易出错)。

    【讨论】:

    • 谢谢@cybersam。这绝对是我考虑过的一个选择。在这一点上,我仍在试图弄清楚图形数据库在整体上的适合程度。这可能不是最好的例子,因为正如您所指出的,订单可以在图形数据库中正常工作。我对更大、更普遍的问题更感兴趣,“如果两个系统中都有,那么有没有一种好的/快速/优雅的方法可以通过单个查询来做到这一点?”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多