图数据库与关系型数据库有什么区别?
网友回复
什么是图数据库GDB?
图数据库是一种“不仅仅是 SQL”(NoSQL,全程为Not Only SQL)的数据存储。它们旨在以图结构存储和检索数据。 使用的存储机制可能因数据库而异。一些 GDB 可能使用更传统的数据库结构,例如基于表,然后在顶部有一个图形 API 层。其他的将是“原生”GDB——从存储、管理和查询到数据库的整个构造维护数据的图形结构。许多当前可用的图形数据库通过将实体之间的关系视为“一等公民”来做到这一点。 不同类型的图数据库
广义上有两种类型的 GDB,资源描述框架 (RDF)/三重存储/语义图数据库和属性图数据库。 RDF GDB 使用三元组的概念,它是由三个元素组成的语句:主语-谓语-宾语。 主语将是图中的资源或节点,对象将是另一个节点或文字值,谓词表示主题和对象之间的关系。节点或关系上没有内部结构,一切都由唯一标识符以 URI 的形式标识。 这种结构背后的动机是交换和发布数据。 GDB 属性专注于存储接近逻辑模型的数据的概念。这反过来将基于数据本身所寻求的问题,并专注于使该表示尽可能高效地存储和查询。 与基于 RDF 的图不同,节点和关系上有内部结构,可提供丰富的数据表示以及相关的元数据。 属性图数据库剖析
Neo4j就是一个原生属性图数据库,让我们检查一下主要组件。 属性图数据库的主要组成部分如下: 节点:在图论中也称为顶点——构建图的主要数据元素
关系:在图论中也称为边——两个节点之间的链接。它将有方向和类型。没有关系的节点是允许的,没有两个节点的关系是不允许的
节点和关系
标签:定义一个节点类别,一个节点可以有多个
属性:丰富一个节点或关系,不可以为空值!
标签、类型和属性

图数据库与关系数据库不同
1.存储模型不同
关系型数据库在表中存储信息(行/列)。每个实体都有一个表(如:账户,人员等),在一个实际的应用中,关系型数据库通常会有几十甚至几百张表。在图数据库中,所有的信息存储为点和边的集合,而不是存在二维的表格中。这样每个点和边均可存储一系列属性,见下图:

2.查询模型不同
关系型数据库主要的计算模型是基于扫描行(select),连接行(join),过滤行(filter)等。
而图数据库的计算模型是从一系列的初始点开始,通过多步遍历图形。每一步从当前的节点开始,遵守一定的关联关系(边)到达相邻点。

3.分析模型不同
关系型数据库适合一两个表的简单数据查找以及描述性统计,他不太适用预测性和探测性的分析。例如:你很难编写SQL来回答一下的问题:“这三个用户如何关联?”,“点A和点B之间最短路线是什么?”
而在图数据库中,上述的问题都能得到自然,高效的表达和解决。
4.实时查询性能不同
在关系型数据库中,每个表采用物理分隔的方式存储,因此,建立两个表之间的关联慢而且需要中间表过度。大家都知道表和表之间,是不应该存在多对多的关系的。 一旦有了多对多的关系,是需要增加中间表来应对的。 而图数据库中,关于点的一切都已经有了关联性,因此,查询性能大大提高。
实例分析
我以电影与人为例来描述关系数据库与图数据库的不同
首先我们来看看我们各自数据库的数据模型。与所有数据模型一样,它们的外观最终取决于您提出的问题类型。所以让我们假设我们要问以下类型的问题:
一个人演过哪些电影?
一个人与哪些电影有关?
一个人曾经合作过的所有合作演员是谁?
基于这些,以下是相关的潜在数据模型:

电影图的实体关系数据模型

电影图的属性图数据模型 你会立刻发现一些东西——那些 ID 不见了!因为一旦我们知道那里有连接,我们就将数据连接在一起,我们不再需要它们,或者那些映射表来让我们知道不同的数据行如何连接在一起。 比较查询
现在让我们继续比较一些查询。从:PLAY movies示例中选取一些最初的查询,让我们看一下 Cypher 查询的一些并排比较,以及等效的 SQL 查询是什么样的。 什么是 Cypher,我听到你问?Cypher 是一种图查询语言,用于查询 Neo4j 图数据库。还有一个OpenCypher版本,许多其他供应商都在使用它。 随着我们进行查询,它应该开始变得更加清晰,图数据库以及一种帮助探索关系...
点击查看剩余70%
如何用html写出网页滚动视频播放卡片视觉差异效果的代码?
程序员如何低成本搭建代理进行科学上网学习技术?
threejs如何做个三维搭积木的游戏?
three如何实现标记多个起始路过地点位置后选择旅行工具(飞机汽车高铁等),最后三维模拟行驶动画导出mp4?
ai实时驱动的3d数字人可视频聊天的开源技术有吗
swoole+phpfpm如何实现不同域名指向不同目录的多租户模式?
如何用go替换nginx实现请求phpfpm解析运行php脚本?
有没有浏览器离线运行进行各种文档、图片、视频格式转换的开源工具?
如何使用go语言搭建一个web防火墙?
linux如何检测特定网络协议比如http协议中报文是否包含特点关键词并阻止返回给客户?


