在计算机科学中,图数据库(英语:graph database,GDB)是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项,与数据节点和节点间表示关系的边的集合相关联。这些关系允许直接将存储区中的数据链接在一起,并且在许多情况下,可以通过一个操作进行检索。图数据库将数据之间的关系作为优先级。查询图数据库中的关系很快,因为它们永久存储在数据库本身中。可以使用图数据库直观地显示关系,使其对于高度互连的数据非常有用。
最常见的图数据库模型是 Labeled Property Graph Model,这一模型中的基础元素是节点 Node 和关系 Relationship。
在 Graph Databases for Dummies 这本书里面,作者使用类似驼峰命名法
PascalCase
来表示节点,使用下划线 + 全大写SNAKE_CASE_ALL_CAPS
来表示关系。节点和关系的属性用下划线 + 全小写snake_case
表示。
如其名称表示,node 表示某种实体。你可以给节点加上标签 Label 来表示节点在图中的角色。例如对于一个表示人的节点,你可以加上 Business
和 Customer
标签来表示企业客户,加上 Person
和 Customer
表示个人客户。然后你可以使用这些标签来快速找到图中所有的客户节点、或是所有的企业客户节点。
你也可以给节点加入数据属性。
关系则用来将节点关联在一起。Relationship 是单类型 (singly-typed),有向的。同样的,关系也可以拥有自己的属性;
对于节点,你可以加入任何数量、任何类型和任何方向的关系。
然而,在实际业务场景中,图数据不可能是完全自由的,你可以向图加入约束 Constraints。在传统数据上,数据表的 Schema 也扮演了约束的作用。对于图数据库来说,其设计思想是尽可能多地保持自由度,Schema 的作用是通常是局部的,这使得非约束的区域的数据可以灵活变化。这种策略被称为 less-schema,而不是 schema-less。
上图是一个简单的遵循 Labeld Property Graph Model 范式的图。类似 Neo4j 的图数据库引擎可以沿着这样的图中的关系箭头从一个节点出发,在图上进行高效的遍历并最终查询到目标数据。这种追踪过程,相比起关系型数据库中的 JOIN 和索引操作,其成本是要低得多的。这也体现出沿着关系箭头进行 Pointer Chasing 查询的特点:其具备无需索引的上下文临接信息(index-free adjacency)。因此,查询的成本将只和查询的区域的邻域大小有关,而和数据的整体大小没有关系。