一、 概况:
在图计算中,基本的数据结构表达式是:G= ( V,E ),V=vertex( 节点 ),E=edge(边) 。图数据库中数据模型主要以节点和关系(边)来体现,也可以处理键值对。数据具有如下特征:
① 包含节点和边。
② 节点上有属性(键值对)。
③ 边有名字和方向,并总是有一个开始节点和结束节点。
④ 边也可以有属性。
把点、边(关系)、属性联系到一起就能描述出一个图。下图展示了一张作者合作关系社交图谱(该图基于MDLayout改进算法生成)。每个作者代表一个点,边用白色实线表示,表明了两者间关系。边也可以拥有属性。很多个点关联起来就构成了一个很复杂的学术合作关系网。使用图形数据库很容易存放这种人际关系网,而传统的关系数据库则不能最优化的存储上述社会关系数据。
学术合作图谱实例
Neo4j数据库是一个高性能的新型NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。
它具有以下优点:
① 自带易于学习的查询语言(名为Cypher)。
② 不使用schema,可以满足任何形式的需求。
③ 相比关系型数据库,查询速度要快上很多。
④ 相比关系型数据库,可扩展性极高,灵活性强。
⑤ 实体与关系结构非常自然地切合人类的直观感受,在处理关系复杂的数据时远胜于关系型数据库。
⑥ 支持JAVA操作。
⑦ 支持兼容ACID的事务操作。
⑧ 提供了一个高可用性模型,以支持大规模数据量的查询,支持备份、数据局部性以及冗余。
⑨ 提供了一个可视化的查询控制台。
同时,它具有以下不足:
① 作为新型数据库,它的成熟度远不如传统的关系型数据库。
② 数据查询语言种类繁多,尚未形成统一规范。
③ 安全性相对较弱,有待完善。
④ 不适合处理大量分布型数据。
⑤ 不适合保存结构化数据、二进制数据(相较关系型数据库而言)。
二、 原理简介:
The node records contain only a pointer to their first property and their first relationship (in what is oftentermed the _relationship chain). From here, we can follow the (doubly) linked-list of relationships until we find the one we’re interested in, the LIKES relationship from Node 1 to Node 2 in this case. Once we’ve found the relationship record of interest, we can simply read its properties if there are any via the same singly-linked list structure as node properties, or we can examine the node records that it relates via its start node and end node IDs. These IDs, multiplied by the node record size, of course give the immediate offset of both nodes in the node store file.
上面的英文摘自<Graph Databases>(作者:IanRobinson) 一书,描述了 neo4j 的存储模型。Node和Relationship 的 Property 是用一个 Key-Value 的双向列表来保存的; Node 的 Relatsionship 是用一个双向列表来保存的,通过关系,可以方便的找到关系的 from-to Node. Node 节点保存第1个属性和第1个关系ID。
通过上述存储模型,从一个Node-A开始,可以方便的遍历以该Node-A为起点的图。下面提供示例,来帮助理解上面的存储模型。
示例
在这个例子中,A~E表示Node 的编号,R1~R7 表示Relationship编号,P1~P10 表示Property的编号。
- Node 的存储示例图如下,每个Node保存了第1个Property和 第1个Relationship:
- 关系的存储示意图如下:
从示意图可以看出,从 Node-B 开始,可以通过关系的 next 指针,遍历Node-B 的所有关系,然后可以到达与其有关系的第1层Nodes,在通过遍历第1层Nodes的关系,可以达到第2层Nodes,……
总而言之,Neo4j图形数据库是一个杰出的高性能NoSQL数据库,它相较于传统的关系型数据库具有强拓展性、灵活性等优势,在存储关系性强且变化频繁的数据时具有可观的效率;但同时,它在存储二进制数据、结构化数据时效率较低,安全性不及传统数据库强。作为新生数据库,Neo4j在知识图谱构建、文本搜索等方面已经逐渐显露出不凡的特性,也是近年来许多学者研究和尝试使用的宠儿,在将来会得到更广泛、更高效的应用。
(参考资料:http://sunxiang0918.cn/2015/06/27/neo4j-%E5%BA%95%E5%B1%82%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84%E5%88%86%E6%9E%90)