图数据库简介
图数据库简介
图数据库(Graph Database)是基于图论实现的一种新型NoSQL数据库。它的数据存储结构和数据的查询方式都是以图论为基础的。图论中图的基本元素为节点和边,在图数据库中对应的就是节点和关系。
在图数据库中,数据与数据之间的关系通过节点和边构成一个图结构并在此结构上实现数据库的所有特性,如对图数据对象进行创建、读取、更新、删除(Create、Read、Update、Delete,简称:CRUD)等操作的能力,还有处理事务的能力和高可用性等。
目前市面上较为流行的图数据库产品有以下几种:
主流图数据库图标.png
实时图数据排名及增长趋势图如下:
主流图数据库排名.png
主流图数据库趋势图.png
图数据库中的关系查询示意图:
图数据库中的关系查询示意图.png
neo4j简介
Neo4j是由Java和Scala实现的开源NoSQL图数据库。自2003年开始研发,直到2007年正式发布第一版。Neo4j的源代码托管在GitHub上,技术支持托管在Stack Overflow和Neo4j Google讨论组上。Neo4j现如今已经被各种行业的数十万家公司和组织采用。Neo4j的使用案例涵盖了包括网络管理、软件分析、科学研究、路由分析、组织和项目管理、决策制定、社交网络等。
官方网站:https://neo4j.com
Github: https://github.com/neo4j/neo4j
Example: https://github.com/neo4j-examples
Neo4j的特点
- SQL一样容易查询语言的Neo4j CQL。
- 它遵循属性图数据模型。
- 它通过使用Apache Lucence支持索引。
- 它支持UNIQUE约束。
- 它包含一个UI执行CQL指令:Neo4j的数据浏览器。
- 它支持完整的ACID(原子性,一致性,隔离性和持久性)规则。
- 它采用原生图形库与本地GPE(图形处理引擎)。
- 它支持查询的数据导出到JSON和XLS格式。
- 它提供了REST API由如Java,python等编程语言进行访问。
- 它提供了Java Script支持以任何UI MVC框架如Node JS进行访问。
- 它支持两种类型的Java API:Cypher支架API和本地Java API来开发Java应用程序。
Neo4j优势
neo4j不管是与关系型数据库相比,还是与其他NoSQL数据库相比,都具有很多前所未有的优势,这可以从以下几个方面来分析,主要表现为查询的高性能、设计的灵活性和开发的敏捷性等。<本段内容选自<Neo4j全栈开发>>
1 高性能表现
Neo4j是一个原生的图数据库引擎,它存储了原生的图数据,因此,可以使用图结构的自然伸展特性来设计免索引邻近节点遍历的查询算法,即图的遍历算法设计。图的遍历是图数据结构所具有的独特算法,即从一个节点开始,根据其连接的关系,可以快速和方便地找出它的邻近节点。这种查找数据的方法并不受数据量的大小所影响,因为邻近查询始终查找的是有限的局部数据,不会对整个数据库进行搜索。所以,Neo4j具有非常高效的查询性能,相比于RDBMS可以提高数倍乃至数十倍的查询速度。而且查询速度不会因数据量的增长而下降,即数据库可以经久耐用,并且始终保持最初的活力。不像RDBMS那样,因为不可避免地使用了一些范式设计,所以在查询时如果需要表示一些复杂的关系,势必会构造很多连接,从而形成很多复杂的运算。并且在查询中更加可怕的是还会涉及大量数据,这些数据大多数与结果毫无关系,有的可能仅仅是通过ID查找它的名称而已,所以随着数据量的增长,即使查询一小部分数据,查询也会变得越来越慢,性能日趋下降,以至于让人无法忍受。
2 设计的灵活性
在日新月异的互联网应用中,业务需求会随着时间和条件的改变而发生变化,这对于以往使用结构化数据的系统来说,往往很难适应这种变化的需要。图数据结构的自然伸展特性及其非结构化的数据格式,让Neo4j的数据库设计可以具有很大的伸缩性和灵活性。因为随着需求的变化而增加的节点、关系及其属性并不会影响到原来数据的正常使用,所以使用Neo4j来设计数据库,可以更接近业务需求的变化,可以更快地赶上需求发展变化的脚步。
大多数使用关系型数据库的系统,为了应对快速变化的业务需求,往往需要采取推倒重来的方法重构整个应用系统。而这样做的成本是巨大的。使用Neo4j可以最大限度地避免这种情况发生。虽然有时候,也许是因为最初的设计考虑得太不周全,或者为了获得更好的表现力,数据库变更和迁移在所难免,但是使用Neo4j来做这项工作也是非常容易的,至少它没有模式结构定义方面的苦恼。
3 开发的敏捷性
图数据库设计中直观明了的数据模型,从需求的讨论开始,到程序开发和实现,以及最终保存在数据库中的样子,它的模样似乎没有什么变化,甚至可以说本来就是一模一样的。这说明,业务需求与系统设计之间可以拉近距离,需求和实现结果之间越来越接近。这不但降低了业务人员与设计人员之间的沟通成本,也使得开发更加容易迭代,并且非常适合使用敏捷开发方法。
Neo4j本身可伸缩的设计灵活性,以及直观明了的数据模型设计,还有其自身简单易用的特点等,所有这些优势充分说明,使用Neo4j很适合以一种测试驱动的方法应用于系统设计和开发自始至终的过程之中,通过迭代来加深对需求的理解,并通过迭代来完善数据模型设计。
4 与其他数据库的比较
与当前一些主流的数据库相比,不管是传统的关系型数据库,还是NoSQL数据库,或者同类的图数据库,Neo4j都是出类拔萃的。
在传统的RDBMS中,如果要表现一个部门的用户,即1.2节提到的例子,按照第三范式的设计要求,至少需要三张表格来表示,即部门表、用户表和部门-用户关系表,这样实体和关系就被人为地隔开了,它们是完全分离的,存在于不同的表中,这就给查询带来了一定的难度,从而影响了查询的性能。而Neo4j所表现的是实体的联系本身,它表现了现实世界中事物联系的本质,它的联系在节点创建时就已经建立,所以在查询中能以快捷的路径返回关联数据,从而表现出非常高效的查询性能。
Key-Value的数据库虽然能提供高性能的查询,但它所能表示的内容是有限的。实际上,Neo4j节点的属性就是一些Key-Value的数据集合。而Neo4j通过节点和关系的属性可以表现更为丰富多彩的内容,这是其他Key-Value的数据库所无法比拟的。
对于Key-Document文档数据库来说,相对于Key-Value数据库,内容是丰富了些,但美中不足的是,一个文档经不起内容的变更或修改。如果用Neo4j的节点及其属性来表示,则处理这种类似的变更却是轻而易举的。
在图数据库领域,除Neo4j之外,还有其他如OrientDB、Giraph、AllegroGraph等各种图数据库。跟所有这些图数据库相比,Neo4j的优势表现在以下两个方面。
(1)Neo4j是一个原生图计算引擎,它存储和使用的数据自始至终都是使用原生的图结构数据进行处理的,不像有些图数据库,只是在计算处理时使用了图结构数据,而在存储时还将数据保存在关系型数据库中。
(2)Neo4j是一个开源的数据库,其开源的社区版吸引了众多第三方的使用和推广,如开源项目Spring Data Neo4j就是一个做得很不错的例子,同时也得到了更多开发者的拥趸和支持,聚集了丰富的可供交流和学习的资源与案例。这些支持、推广和大量的使用,反过来会很好地推动Neo4j的发展。
5 综合表现
Neo4j查询的高性能表现、易于使用的特性及其设计的灵活性和开发的敏捷性,以及坚如磐石般的事务管理特性等特点,都充分说明了使用Neo4j是一个不错的选择。有关它的所有优点,总结起来,主要表现在以下几个方面。
(1)闪电般的读/写速度,无与伦比的高性能表现。
(2)非结构化数据存储方式,在数据库设计上具有很大的灵活性。
(3)能很好地适应需求变化,并适合使用敏捷开发方法。
(4)很容易使用,可以用嵌入式、服务器模式、分布式模式等方式来使用数据库。
(5)使用简单框图就可以设计数据模型,方便建模。
(6)图数据的结构特点可以提供更多更优秀的算法设计。
(7)完全支持ACID完整的事务管理特性。
(8)提供分布式高可用模式,可以支持大规模的数据增长。
(9)数据库安全可靠,可以实时备份数据,很方便恢复数据。
(10)图的数据结构直观而形象地表现了现实世界的应用场景。