最近在用图形数据库来完成对项目的支持。在使用过程中觉得这种图形数据库实际上挺有意思的。因此在这里给大家做一个简单的介绍。
图数据库
图形数据库是一种非关系型数据库,它应用图形理论存储实体之间的关系信息。最常见的一个例子,就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。
Neo4j
Neo4j是一个流行的图形数据库,它是开源的。Neo4j基于Java实现,兼容ACID特性,也支持其他编程语言,如Ruby和Python。
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。Neo4j 使用图(graph)相关的概念来描述数据模型,把数据保存为图中的节点以及节点之间的关系。很多应用中数据之间的关系,可以很直接地使用图中节点和关系的概念来建模。对于这样的应用,使用 Neo4j 来存储数据会非常的自然,要优于使用关系数据库。
Neo4j 使用数据结构中图(graph)的概念来进行建模。Neo4j 中两个最基本的概念是节点和边。节点表示实体,边则表示实体之间的关系。节点和边都可以有自己的属性。不同实体通过各种不同的关系关联起来,形成复杂的对象图。Neo4j 同时提供了在对象图上进行查找和遍历的功能。
Neo4j特点
作为一款强健的,可伸缩的高性能数据库,Neo4j最适合完整的企业部署或者用于一个轻量级项目中完整服务器的一个子集存在。
它包括如下几个显著特点:
- 完整的ACID支持
- 高可用性
- 轻易扩展到上亿级别的节点和关系
- 通过遍历工具高速检索数据
适当的ACID操作是保证数据一致性的基础。Neo4j确保了在一个事务里面的多个操作同时发生,保证数据一致性。不管是采用嵌入模式还是多服务器集群部署,都支持这一特性。
可靠的图型存储可以非常轻松的集成到任何一个应用中。随着我们开发的应用在运营中不断发展,性能问题肯定会逐步凸显出来,而Neo4j不管应用如何变化,他只会受到计算机硬件性能的影响,不受业务本身的约束。
部署一个neo4j服务器便可以承载上亿级的节点和关系。当然,当单节点无法承载我们的数据需求时,我们可以进行分布式集群部署(含有集群方案的版本是商业版)。
将图数据库用于存储关系复杂的数据是他最大的优势。通过Neo4j提供的遍历工具,可以非常高效的进行数据检索,每秒可以达到上亿级的检索量。一个检索操作类似于RDBMS里面的连接(join)操作。
Cypher查询语言
Cypher查询语言,是一种不需要手动遍历图结构数据,就可高效完成查询功能的陈述性查询语言。Cypher用于在图数据库中存储和检索数据,可以实现对Neo4j数据库的添加、删除及更新操作。Cypher受启于陈述性查询语言,很多关键字如WHERE、ORDER BY等来源于SQL;模式匹配方法来源于SPARQL。Cypher语言更专注于检索内容的图结构形式化描述,而不是实现。
在查询语言中包含以下几个明显的部分:
- START:在图中的开始点,通过元素的ID或所以查找获得。
- MATCH:图形的匹配模式,束缚于开始点。
- WHERE:过滤条件。
- RETURN:返回所需要的。
使用Neo4j图数据库的优势
使用Neo4j图数据库的优势如下:
- 自带一套易于学习的Cypher查询语言,减少在开发过程中的学习成本;
- 与关系型数据库相比,对于高度关联的数据(图形数据)的查询快速要快上许多;
- 它的实体与关系结构非常自然地切合人类的直观感受;
- 支持兼容ACID的事务操作;
- 提供了一个高可用性模型,以支持大规模数据量的查询,支持备份、数据局部性以及冗余;
- 提供了一个可视化的查询控制台,方便在控制台进行查询操作。