初识图数据库
什么是图数据库(graph database)
随着社交、电商、金融、零售、物联网等行业 的快速发展,现实社会织起了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据库之间的关系随数据量几何增长,而关系型数据库暴露出一些它始终无法解决问题,其中最主要的是数据建模中的一些缺陷和问题,以及在大数据下和多服务器之上进行水平伸缩的限制,急需一种支持海量复杂关系运算的数据库,图数据库应运而生
图数据结构由可以通过关系连接的节点(离散对象)组成。
图由两个元素组成
- 节点
- 关系
世界上很多著名企业都在使用图数据库
; 为什么选择图数据库
我们生活在一个互联的世界中,理解大多数领域需要处理丰富的连接集以了解真正发生的事情。通常,我们发现项目之间的联系与项目本身一样重要。
图数据库解决了我们许多人每天都在应对的巨大挑战。现代数据问题通常涉及与异构数据的多对多关系,需要:
- 导航深层层次结构
- 寻找远距离物品之间的隐藏联系
- 发现项目之间的相互关系
无论是社交网络、支付网络还是道路网络,您都会发现一切都是相互关联的关系图。当我们想问关于现实世界的问题时,很多问题都是关于关系而不是关于单个数据元素的。
关系型数据库与图数据库对比
在关系数据库中,通过外键列引用主键属性来指示对其他行和表的引用。连接是在查询时通过匹配连接表中所有行的主键和外键来计算的。这些操作需要大量计算和内存,并且成本呈指数级增长。
当模型出现当模型中出现一对多、多对多关系时,必须引入一个JOIN表(或关联实体表)来保存两个参与表的外键,进一步增加了join操作的成本
正如图看到的,这使得理解连接变得非常麻烦,因为您必须知道部门 ID 员工门 ID 值(执行额外的查找以找到它们)才能知道哪个人员连接到哪些部门。这些类型的代价高昂的连接操作通常通过非规范化数据来解决,以减少必要的连接数量,从而破坏关系数据库的数据完整性。
图形数据库对数据进行抽象的方式实际上和关系型数据库非常接近。每个结点仍具有标示自己所属实体类型的标签,也既是其所属的结点集,并记录一系列描述该结点特性的属性。除此之外,我们还可以通过关系来连接各个结点。
; 将关系转换为图
与其他数据库管理系统不同,关系在图数据模型中与数据本身同等重要。这意味着我们不需要使用特殊属性(例如外键)
来推断实体之间的关系
通过将节点和关系组装成连接的结构,图数据库使我们能构建简单而复杂的模型,这些模型紧密地映射到我们的问题域。数据与其在现实世界中的形式非常相似—小型、规范化但连接丰富的实体。这允许从任何可以想象的兴趣点查询和查看数据,支持许多不同的用例。
图数据库模型中的每个节点(实体或属性)直接且物理地包含关系记录列表,这些关系记录表示与其他节点的关系。这些关系记录按类型和方向组织,并且可能包含其他属性。每当您运行等效的JOIN操作时,图形数据库都会使用此列表,直接访问连接的节点并消除昂贵的搜索和匹配计算的需要。
数据模型差异
正如上面讨论的结构差异中想象的那样,关系与图的数据模型非常不同。与使用传统关系或其他 NoSQL 数据库生成的数据模型相比,简单的图形结构产生的数据模型更简单、更具表现力。
关系 – 人员和部门表
在上面的关系示例中,我们搜索左侧的 Person 表(可能有数百万行)以找到用户 Alice 和她的人员 ID 815。然后,我们搜索 Person-Department 表(橙色中间表)以找到所有引用 Alice 的人员 ID (815) 的行。检索到 3 个相关行后,我们转到右侧的 Department 表以搜索部门 ID 的实际值(111、119、181)。现在我们知道 Alice 是 4Future、P0815 和 A42 部门的一部分。
图表 – Alice 和 3 个部门作为节点
在上面的图形版本中,我们有一个 Alice 的单个节点,其标签为 Person。Alice 属于 3 个不同的部门,因此我们为每个部门创建一个节点,并带有一个标签为 Department。为了找出 Alice 所属的部门,我们将在图中搜索 Alice 的节点,然后遍历 Alice 的所有 BELONGS_TO 关系以找到她所连接的部门节点。这就是我们所需要的——一个不涉及查找的单跳。
; 数据存储和检索
使用 SQL 查询关系数据库很容易——一种声明式查询语言,它允许在数据库工具中进行简单的临时查询,以及从应用程序代码中进行特定于用例的查询。甚至对象关系映射器 (ORM) 在后台使用 SQL 与数据库对话。
而我们图数据库用的 Cypher
Cypher 是 Neo4j 的声明式图形查询语言
SQL 语句
SELECT name FROM Person
LEFT JOIN Person_Department
ON Person.Id = Person_Department.PersonId
LEFT JOIN Department
ON Department.Id = Person_Department.DepartmentId
WHERE Department.name = "IT"
Cypher 语句
MATCH (p:Person)-[:WORKS_AT]->(d:Dept)
WHERE d.name = "IT Department"
RETURN p.name
非关系型数据库与图数据库对比
NoSQL 大致可以分为四类:
- 键值数据库
- 列存储数据库
- 文档型数据库
- 图数据库
分类数据模型优势劣势举例键值数据库哈希表查找速度快数据无结构,通常纸杯当作字符串或二进制数据Redis列存储数据库列存储查找速度快,支持分布横向扩展,数据压缩率高功能相对受限Hbase文档型数据库键值对扩展数据结构要求不严格,表结构可变化,不需要预先定义表结构查找性能不高,缺乏同意的查询语句MongDB图数据库节点和关系组成的图利用图结构相关算法(最短路径、节点度关系查找等)可能需要对整个图做计算,不利于图数据分布式存储Neo4j
Original: https://blog.csdn.net/qq_41977838/article/details/123164641
Author: ゞ浪人与酒丶0
Title: Neo4j – 初识图数据库
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/556615/
转载文章受原作者版权保护。转载请注明原作者出处!