Sql 关系数据库与图形数据库的比较
有人能给我解释一下像MySQL这样的关系数据库与Neo4j这样的图形数据库相比的优缺点吗Sql 关系数据库与图形数据库的比较,sql,relational-database,graph-databases,Sql,Relational Database,Graph Databases,有人能给我解释一下像MySQL这样的关系数据库与Neo4j这样的图形数据库相比的优缺点吗 在SQL中,您有多个具有各种ID的表来链接它们。然后您必须加入以连接表。从新手的角度来看,为什么要将数据库设计为需要连接,而不是像图形数据库那样从一开始就将连接显式地作为边。从概念上讲,这对新手来说毫无意义。这大概是一个非常技术性但非概念性的原因吧?这两种风格背后实际上都有概念性的推理。维基百科对这一点做了很好的概述 主要区别在于,在图形数据库中,关系存储在单个记录级别,而在关系数据库中,结构定义在更高级别
在SQL中,您有多个具有各种ID的表来链接它们。然后您必须加入以连接表。从新手的角度来看,为什么要将数据库设计为需要连接,而不是像图形数据库那样从一开始就将连接显式地作为边。从概念上讲,这对新手来说毫无意义。这大概是一个非常技术性但非概念性的原因吧?这两种风格背后实际上都有概念性的推理。维基百科对这一点做了很好的概述 主要区别在于,在图形数据库中,关系存储在单个记录级别,而在关系数据库中,结构定义在更高级别(表定义) 这有着重要的影响:
- 在处理大量数据时,关系数据库的速度要快得多 记录。在图形数据库中,必须检查每个记录 在查询过程中单独进行,以确定 数据,而这在关系数据库中是提前知道的
- 关系数据库使用更少的存储空间,因为它们没有 存储所有这些关系
仅当关系中存在大量变化时,在单个记录级别存储所有关系才有意义;否则,你只是一次又一次地重复同样的事情。这意味着图形数据库非常适合不规则、复杂的结构。但在现实世界中,大多数数据库需要规则的、相对简单的结构。这就是关系数据库占主导地位的原因。Dan1111已经给出了一个标记为正确的答案。顺便提一下,还有几点值得注意 首先,在图形数据库的几乎每个实现中,记录都是“固定”的,因为在记录的当前位置有数量未知的指针指向该记录。这意味着,如果不在旧位置留下转发地址或断开未知数量的指针,就无法将记录无序移动到新位置 理论上,人们可以一次洗牌所有记录,并找出一种方法来定位和修复所有指针。实际上,在大型图形数据库上执行此操作可能需要数周时间,在此期间,数据库必须停止运行。这是不可行的 相比之下,在关系数据库中,记录可以在相当大的范围内重新排列,唯一需要做的事情是重建任何受影响的索引。这是一个相当大的操作,但远没有图形数据库的等效操作大 第二点值得注意的是,万维网可以被看作是一个巨大的图形数据库。网页包含超链接,超链接引用其他网页。引用是通过URL进行的,URL的功能类似于指针
当一个网页被移动到另一个URL而没有在旧URL上留下转发地址时,未知数量的超链接将被破坏。这些断开的链接会产生可怕的“错误404:找不到页面”消息,打断了众多冲浪者的乐趣 图形和关系数据库之间的关键区别在于,关系数据库使用集合,而图形数据库使用路径 对于RDBMS用户来说,这会以意想不到的、毫无帮助的方式表现出来。例如,当试图通过递归加入关系数据库来模拟路径操作(例如,朋友的朋友)时,查询延迟会随着内存使用量的增加而不可预测地大幅增加,更不用说它会折磨SQL来表示这些类型的操作了。在基于集合的数据库中,数据越多意味着速度越慢,即使您可以通过明智的索引来延迟痛苦
正如Dan1111所暗示的,大多数图形数据库不会遭受这种连接痛苦,因为它们在基本级别上表示关系。也就是说,关系物理上存在于磁盘上,它们被命名、定向,并且可以用属性修饰它们自己(这称为属性图模型,请参见:)。这意味着,如果您选择这样做,您可以查看磁盘上的关系,并查看它们是如何“连接”实体的。因此,关系是图形数据库中的一级实体,在语义上远远强于在运行时在关系存储中具体化的隐含关系 那你为什么要在乎呢?原因有二:
MATCH(me)-[:friend]->()-[:friend]->(foaf)RETURN foaf
李>
使用关系数据库,我们可以通过使用外键和自连接来建模和查询图形。仅仅因为RDBMS包含“关系”一词并不意味着它们擅长处理关系。关系数据库管理系统中的“关系”一词来源于关系代数,而不是关系。在RDBMS中,关系本身并不作为对象存在。它或者需要显式地表示为外键,或者隐式地表示为链接表中的值(当使用通用/通用建模方法时)。数据集之间的链接存储在数据本身中 我们在re中增加的搜索深度越多