图数据库是一种专门用于创建和操作图的平台。在图的上下文中,图由节点和边组成,它们以关系数据库无法实现的方式表示和存储数据。图分析是另一种常用术语,指的是使用数据点作为节点和关系作为边来分析图格式中的数据。进行图分析需要一个能够支持图格式的数据库,它可以是一个专门的图数据库或者是一个支持多种数据模型(包括图)的融合数据库。
在计算机领域,图由两个元素组成:节点和关系。每个节点代表一个实体,比如一个人、一个地方、一个事物、一个类别或一个数据片段。这种通用结构使能够模拟从道路系统到建筑物网络的广泛场景。从设备到人口的医疗历史,关系定义了一切。例如,考虑Twitter,它拥有3000万用户且仍在增长。图是一种直观的方法,将问题抽象为边(关系)和数字(节点),激发了数学家使用这种方法解决复杂问题的兴趣。现在它已经成为数学中最复杂的分支之一。
顾名思义,图数据库是任何使用基本图原理以节点和关系的形式存储和处理数据的数据库。在图数据库中,关系是最重要的。因此,模式和实际数据紧密耦合。图数据库的灵活性允许轻松添加新的域对象、关系和属性,而不影响现有设置。图数据库的数据模型比关系数据库或其他NoSQL数据库更简单、更富有表现力。在图的世界里,关系是一等公民,整个系统围绕着存储、维护和遍历关系的效率展开。在充满互联数据的真实世界中,图数据库提供了一个框架和范式,直观地模拟语义关系。
图存储:图数据库的存储高度优化,用于存储节点和关系。例如,Neo4J中的图数据存储在存储文件中,每个文件包含图的特定部分的数据,如节点、关系、标签和属性。这种划分存储的方法允许高效的图遍历。原生图存储从一开始就设计为处理高度互联的数据集,使其成为存储和检索互联数据的最有效方式。
图处理引擎:图引擎使用高度优化的存储,连接的节点物理指向彼此。这被称为“无索引邻接”。在无索引邻接的世界中加载数据时,每个节点存储相邻节点的指针(RAM位置)。因此,不需要额外的地址解析。
图数据库非常适合存储、分析和利用关系。当大规模使用时,这打开了传统“关系”技术无法实现的一系列可能性。图数据库专门设计用于处理高度连接的数据,并且可以处理上述所有问题。由于图的以下特点,企业开始对它产生兴趣。
简单性:可以精确地模拟想要的东西。图提供了一种与实现无关的数据存储方法。在数据库中保存的就是写下来的。它们根据关系提供数据建模灵活性。从高度受限的关系数据库到没有规则的图,这是向使业务用户能够解决实际问题迈出的重要一步。图数据库可以添加由域或业务所需的语义意义,而无需考虑规范化或通过非规范化进行数据重构等约束。
灵活性:图不仅允许模型灵活性,还有助于数据库的演变。用户可以添加或删除新的实体或关系,扩展模型以集成新业务,或直观地演变现有模型。
操作和分析:图数据库设计为不触及无关数据,因此优化以支持事务性操作。图结构促进了与开箱即用算法以及标准CRUD操作的集成。由于数据关系是核心,图在查询速度上非常高效,即使是深层和复杂的问题也是如此。图可以快速找到所有相关的关系和相关信息,因为它们不需要扫描整个表来找到关系。
假设想知道公司员工Alice属于哪个部门。在关系数据库中,通常需要建立一个员工信息表、一个员工和部门对应关系表(假设一个员工可以属于多个部门),以及一个部门信息表。找到Alice对应的部门需要3个步骤:首先,通过员工信息表找到Alice对应的工号;其次,使用工号在关系表中找到对应的部门ID;最后,使用部门ID在部门信息表中找到部门名称和其他信息。每一步都需要索引查找过程。假设这是一家拥有数万甚至数十万员工的大公司,那么员工和部门对应表的记录将会非常庞大,B步骤的搜索效率将远低于A和C步骤。
然而,在图数据库中不需要如此复杂的查询。这是因为图数据库的建模与传统数据库或数据存储方式不同。在图数据库中,员工和部门在同一个图中,直接通过边建立关系。查找时也有3个步骤:首先,通过在员工标签Person上建立全局索引(可以是稀疏的)找到对应Alice的节点Na;其次,通过Na节点保存的BELONGS_TO标签找到对应的部门;最后,读取部门信息。虽然也可以分为3个步骤,但效率差异很大。a步骤的效率等同于A;b不需要进行索引查找;直接通过Na节点获取,尽管Na节点可能有很多不同标签的边,但记录数量肯定不是一个数量级,而且通过Na找到边也可以通过Na的本地索引加速查找;对于支持无索引邻接的图数据库,如Neo4J,Na直接指向3个部门节点的物理地址,对于其他非原生图存储数据库,如JanusGraph,则需要查找在部门标签Department上建立的全局索引。