请问有人可以为我解释关系数据库(如MySQL)与图形数据库(如Neo4j)之间的优缺点吗?
在SQL中,你有多个表格,并用不同的ID将它们链接在一起。然后您必须使用联接来连接这些表格。对于一个新手来说,为什么要设计需要使用连接的数据库,而不是在开始时将连接作为边缘显式呈现出来,就像图形数据库那样呢?对于一个新手来说,这在概念上毫无意义。也许这背后有非常技术性但非概念性的原因?
请问有人可以为我解释关系数据库(如MySQL)与图形数据库(如Neo4j)之间的优缺点吗?
在SQL中,你有多个表格,并用不同的ID将它们链接在一起。然后您必须使用联接来连接这些表格。对于一个新手来说,为什么要设计需要使用连接的数据库,而不是在开始时将连接作为边缘显式呈现出来,就像图形数据库那样呢?对于一个新手来说,这在概念上毫无意义。也许这背后有非常技术性但非概念性的原因?
实际上,这两种风格背后都有概念推理。维基百科关于关系模型和图数据库的介绍很好地解释了这一点。
主要区别在于,在图形数据库中,关系存储在单个记录级别上,而在关系型数据库中,结构定义在更高的级别上(表定义)。
这具有重要的影响:
仅在将在关系中存在大量变化时,将所有关系存储在单个记录级别上才有意义;否则,您只是一遍又一遍地重复相同的内容。这意味着,图形数据库非常适合不规则、复杂的结构。但在现实世界中,大多数数据库需要规则、相对简单的结构。这就是为什么关系型数据库占主导地位的原因。
MATCH (me)-[:FRIEND]->()-[:FRIEND]->(foaf) RETURN foaf
。Dan1111已经给出了一个被标记为正确答案的答案。值得一提的是还有几点需要注意。
首先,在几乎所有图形数据库的实现中,记录都会被“固定”,因为有未知数量的指针指向记录的当前位置。这意味着记录不能在没有在旧位置留下转发地址或者破坏未知数量的指针的情况下被移动到新位置。
理论上,可以同时洗牌所有记录并找出一种方法来查找和修复所有指针。但实际上,这是一个在大型图形数据库上可能需要数周时间的操作,在此期间数据库必须处于离线状态。这是不可行的。
相比之下,在关系型数据库中,记录可以进行相当大规模的重排,唯一需要做的就是重建任何受影响的索引。这是一个相当大的操作,但远不及图形数据库的等效操作那么大。
其次,值得一提的第二点是全球范围内的万维网可以被视为一个巨大的图形数据库。网页包含超链接,超链接引用了,除其他外,其他网页。引用是通过URL进行的,这类似于指针。
当网页被移动到不同的URL而没有在旧URL上留下转发地址时,许多超链接将变为失效。这些损坏的链接随后引发了令人生畏的“错误404:页面未找到”消息,中断了如此多冲浪者的乐趣。