图数据库与关系型数据库有什么区别?
网友回复
什么是图数据库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%