
随着日益庞大的数据量,我们已经生活在一个数据时代,虚拟世界中形成了庞大复杂的关系网,传统的数据库在应对这类几何级增长的关系时,难以处理。所以,我们需要一种支持复杂数据关系存储与运算的数据库,即“图数据库”。
图数据库是NoSQL数据库的一种类型,也是一种非关系型数据库,它应用图理论,存储和治理实体之间的关系信息。比如说我们的社交网络关系。特别是层级较多的关联关系(比如社交中,朋友的朋友的朋友喜欢的物品有什么等等)这样的复杂的关系表,关系型数据库会出现查询复杂,执行缓慢,内存溢出等等问题。而图数据库的独特设计恰恰弥补了这个缺陷。在一个图数据库中,最主要的组成有两种,就是节点集合和关系属性。节点结合就像传统数据库的表一样。而关系,是图数据库特有的组成。通过关系包含的属性,提供更为丰富的对事物间关系进行展现方式。比如我们的社交软件,我们每个人的微信好友(第一层好友)平均在300-1000人左右。我们第二层好友(好友的好友)就是9万-100万,第三层好友(好友的好友的好友)就是个极大的数据。那么,我们社交软件中找出,“可能认识的人”就耗费很多时间:
| 深度 | MySQL执行时间(s) | Neo4J执行时间(s) | 返回记录数 |
|---|
| 2 | 0.016 | 0.01 | ~2500 |
| 3 | 30.267 | 0.168 | ~110 000 |
| 4 | 1543.505 | 1.359 | ~600 000 |
| 5 | 未完成 | 2.132 | ~800 000 |
可以看出,关系型数据库在处理第二层关系时的时间,我们还可以接受,到了第三层关系,我们就需要等待30s的时间,到了第四层关系需要近半个小时才可以完成,这就无法实际使用。但我们的图数据库仍可以在几秒钟完成。Neo4J
就是属于原生图数据库,它使用的后端存储是专门为Neo4J这种图数据库定制和优化的,理论上说能更有利于发挥图数据库的性能。而JanusGraph
不是原生图数据库,而将数据存储在其他系统上,比如Hbase。随着大数据逐渐普及,图数据库的需求场景正在不断增多,从计算和分析数据之间关系这个角度来说,图数据库比传统数据库的性能约有百倍以上的提升,比如我们在工业生产中分析上千个工艺参数之间的关系。由此可见图数据库是最为前沿的方向之一。