图数据库与关系型数据库中的图形表示有什么区别?

8
我可以用两个表格vertexedge在关系数据库中简单地表示图形。Neo4j术语中的"属性"和"标签"等更丰富的结构可以表示为更多的表格。我是否误解了,或者像Neo4j这样的图形数据库允许我表示任何不容易在关系数据库中表示的东西?
我可以使用SQL查询此图形,必要时使用递归子查询以及在事务中使用多个单独的查询。我是否误解了,或者像Cypher这样的图形查询语言提供比SQL更大的表达能力?
据我所知,图形的关系模型存储和查询效率很高。图形数据库是否以某种方式结构化其存储或优化其查询,从而提供无法从关系数据库获得的性能特征?
我的关系数据库提供ACID保证,并允许我对我的图形数据编写相当表达式的约束(如果我将单个vertex表拆分成适当的规范化模式,则甚至可以编写更多约束)。我是否误解了,或者像图形数据库一样,它提供了一些保证或验证一些在我的关系数据库中不可用的正确性属性?
我很难看出像Neo4j这样的图形数据库除了关系模型的子集之外还有什么。 (抱歉在此使用Neo4j代表所有图形数据库;这是我看过的唯一一个。)
简而言之:图形数据库是否⊆关系数据库?
1个回答

14

一个集合是否是另一个集合的子集?

绝对不是;两者都最终基于关系或图形的数学概念建模。由于两个模型都是超级通用的,基本上没有信息内容无法使用其中任何一个来表示。这意味着虽然它们在许多句法糖(syntactic sugar)方面可能有所不同,并且在它们鼓励你建模/思考数据的方式上也可能有所不同(就像编程语言不同一样),但它们都具有相同的“表达能力”。

您在问题中描述的是一种建模图的方式(vertexedge表)。该图的实现是关系数据库可以表示的子集。同样地,我可以使用图形数据库来模拟表格和行,但我会选择特定的实现 - 这并不能证明关系数据是图形数据的子集。

因此,第一个见解是它们具有大致相等的表达能力。你可以在任何一个里面建模任何东西。因此,你真正应该问的问题是为什么会选择一个而不是另一个?

为什么会选择一个而不是另一个?

所有数据库都存在于便于访问数据的目的。简单地说,你存储它以便你能够获取数据。但是你需要如何访问数据?有许多不同的访问模式。总体来说,数据库的设计空间是巨大的。每当一个数据库做出某个决策时,那往往会自动使它在某些方面更好,在其他方面更差。例如,当你在关系数据库中创建索引时,你刚刚提高了读取速度——但你降低了写入性能,因为必须维护索引。

因此,当我们接近“图形或关系?”这个问题时,你应该首先弄清楚你的数据长什么样,你的数据访问模式长什么样。如果你知道这些东西,那么你可以评估一堆数据库,看看它们作出的选择,并选择适合你所需的一个。然后,如果DBMS做出了让某些访问模式变得困难、buggy或缓慢的选择,你可以避开这个DBMS。

这部分涉及数据访问模式

当被存储的数据是图形时,图形数据库比关系数据库更好;当数据访问模式涉及大量图形遍历时,图形数据库表现更优。(请查看我写的另一个答案,了解为什么是这样的更深入讨论)。该链接还提供了您特定问题的答案:“图形数据库在结构化存储或优化其查询方面是否提供了性能特征,这些特征无法从关系数据库中获得?

你说:我可以使用SQL查询此图形,必要时使用递归子查询,并在事务中使用多个分开的查询。 -- 因此从技术上讲,这是正确的,但让我们举个例子看看为什么关系型可能不够好。假设我有一个图形(在RDBMS中,它是节点表和边缘

match (myChosenNode {id: 'foo'})-[r:relationshipType*6..8]->(y) return y;

我非常想看到你将这个写成 SQL 查询。虽然这是有可能的,但它非常困难复杂。并且由于连接大量的非平凡数据,它也会像狗一样执行缓慢。

ACID

现在关于 ACID 保证,Neo4J 提供具有 ACID 保证的事务。然而对于不同的图形数据库,尤其是基于 Hadoop/HBase 实现的数据库,答案可能不同。所以请查看每个数据库的细节。

确实有许多 RDBMS 的功能通常在图形数据库中找不到,例如触发器和某些类型的约束条件。作为长期使用 RDMBS 的迷,我对这些缺失并不满意,我认为它们是有价值的。

总结

对我和许多其他工程师而言,这主要取决于以下两点:

  1. 您的数据是什么?
  2. 您的访问模式是什么?

如果您的数据是图形,或者您的访问模式涉及大量的图形遍历,则应该使用图形数据库。如果您的数据更像表格,或者您的访问模式更多地围绕大量扫描,则应使用 RDBMS。最终,它们是两种具有不同特点的工具。如果您在其强项领域中使用它们,您将会很满意。如果您仅“因为可以”使用 RDBMS 来建模图形,您会遇到问题。如果您使用图形数据库来对每个图形中的每个节点进行大量扫描,则会遇到问题。就像大多数技术一样,它只是关于使用正确的工具完成工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接