本篇主要从图(Graph)的概念、图形数据库的基本概念、Neo4j 与关系型数据库管理系统(RDBMS)对比以及和 NoSQL 之间的比较等方面详细介绍。
什么是图(Graph)
图是由一对链接(links)连接对象的图形表示。
一个图包含两个元素:
- 节点(顶点,英文称 vertices);
- 关系(边,英文称 edge)。
什么是图形数据库(Graph database)
图形数据库是用图的形式对数据进行建模的数据库。Neo4j 图形数据库由以下四个部分组成:
- 节点(Nodes);
- 关系(Relationships);
- 属性(Properties);
- 标签(Labels)。
节点(Nodes):节点是图形数据库中的记录数据。数据以多个属性形式存储,属性是简单的键值对。
节点可以通过标签(Label)进行分组,一个节点可以有 0 到多个标签,标签没有任何属性。
关系(Relationships):关系用于连接节点,并且它会指定节点的关联方式:
- 关系总是有方向的;
- 关系总是有其类型;
- 关系形成数据的模式。
属性(Properties):属性是命令的数据值。
标签(Labels):标签将通用名称与一组节点或关系相关联。一个节点或关系可以包含 0 到多个标签。我们可以为现有节点或关系创建新标签,也可以从现有节点或关系中删除现有标签。
与关系型数据库对比
下面是 neo4j 图形数据库与关系型数据库(RDBMS)之间不同层面上的比较:
层面 | 图形数据库 | 关系型数据库 |
---|---|---|
表(table)层面 | 数据以图(graph)的形式存储 | 数据存储在各个表(table)中 |
行(row)层面 | 每条数据对应一个节点(node) | 每天数据都是表(table)中的一行(row),从属于表 |
字段(field)层面 | 数据内容以属性(property)形式,存储键值对 | 数据以字段(column)的形式,存储不同的内容 |
关系(relationship)层面 | 通过定义的关系(relationship)连接不同的节点(nodes) | 通过约束(constraints)形式关联数据,如外键 |
关联查询(query)层面 | 通过图形的遍历(traversal)进行关联查询 | 通过联表(join)的形式进行关联查询 |