图数据库:程序员高薪之路的必备技能

发表时间: 2022-06-06 12:31

随着信息化技术的不断推进,越来越来的数学方法的工程实现也逐渐进入了人们的视野。图数据库就是其中的一种。那么什么是图数据库呢?它有哪些功能和作用?如果想掌握它,需要了解哪些知识呢?下面我们就来看一看。


一、什么是图

图是相互连接的事物及其关系的一种结构化表达。一般来讲信息读取是顺序的过程,读取之后要求阅读者能够在大脑中将信息串联,形成自己的认知。而复杂的信息则很有可能造成阅读者的理解障碍,像《红楼梦》里面的人物关系,很多人就一直也搞不清楚。有些人看了很多遍《红楼梦》还是不清楚薛宝钗和史湘云俩人之间是啥亲戚。宝玉和贾瑞又该怎么称呼之类的。


而图则能够即时传达信息,易于提示复杂的模式。比如说,如果有个男人叫小帅,他有个弟弟叫小强,他们有个漂亮的邻居叫小美,他们三个是同一所学校的学生。小帅喜欢小美,小强也喜欢小美,但小美不喜欢小强,小美喜欢的人是小帅。这么一说是不是看起来很乱?但是用图表示一下就很清楚了。像下面这样。




是不是看起来容易理解多了?这里就用了图结构来表达数据。


所以图是节点和关系两个元素组成的,每个节点代表一个实体,例如人,地,事物,类别等,每个关系代表两个节点的关联方式。在数学里,又具体分为无向图(两个节点连接没有方向箭头)、有向图(两个节点之间有方向,像上图里面的小强单恋小美)、多重图(允许有多重边的图,像上面小强和小帅)、环等。在工程实践中,我们用到的多为有向多重图。

数学上,图一般用一个顶点和边的集合G=(V,E)来表示,其中V指Vertexes(顶点)、E指Edges(边)。


二、什么是图数据库

了解了图的概念之后,我们就可以想到所谓图数据库就是使用图的结构来表示和存储具有图语义数据的数据库了。与传统关系型数据库的区别在于,图数据库直接将节点与节点之间的关系也保存下来,这样在查询的时候,两个节点的数据可以直接进行关联,这样就会使得查询效率非常高。像阿里禁止三个表以上的关联查询,如果用图数据库进行查询的话,可能就不需要复杂的关联查询了。


例如上面的三位同学,如果小帅想查询小美选了哪些课,以便在小美下课时创造偶遇的机会,那么在关系型数据库里,需要分3步:


第一步,通过学生信息表找到小美对应的学号;

第二步,使用学号去学生和课程对应关系表中找到小美选课的课程ID;

第三步,使用课程ID在课程信息表中找到对应的课程名称等信息。


这样就需要多次查询或者应用三个表的关联查询,效率很低。而如果用图数据库的话,就不用这么麻烦,因为图数据库与关系型数据库的建模方式不同。在图数据库里,学生和课程都在一张图中,小美和三门课程都是节点,分别带有标签Student和Course,他们之间通过属性为选课的边建立关联关系。那么在图数据库里,小帅查找小美选课时就是这样处理:


第一步,通过在学生标签student上建立的索引来找到小美对应的节点;

第二步,再通过节点保存的标签为选课的边来找到对应的课程;

第三步,读取选课课程信息。


这样,第一步和关系型数据库一样,第二步则无需查找,直接可以通过数据获取,因为一个学生选的课程数量很少,而学生和课程对应关系则会很多,像一万个学生和一百门课的关系,假设每个学生只选5门课,那就是五万条数据,而在图数据库里则只是一个节点的5个边。因些,在海量数据的情况下,图数据库进行数据查询与分析的速度比关系型数据库,快了不止一个数量级。


因此,图数据库相比于关系型数据库而言,具有以下几点优势:

1、天然解释性:图的表示可以很直观地表达现实世界中的实体和关系

2、高性能:图数据库在数据关联关系查询中具有更高的性能

3、灵活性:一个新的实体可以很容易地加入现有数据中,可以适应不断变化的业务需求,任意添加或删除顶点、边,扩充或缩小模型


三、现在都有哪些主流图数据库

现在比较常用的图数据库包括Neo4j、JanusGraph、HugeGraph、ArangoDB、Amazon Neptune、AllegroGraph、Oracle Spatial and Graph、OrientDB、OrientDB等等。按照类型,可以分为纯图模型数据库(如Neo4j、JanusGraph、OrientDB等)以及多模型数据库(如ArangoDB、OrientDB等)。

其中最常用的是开源的Neo4j。


Neo4j是使用Java语言完全开发的,它使用原生图存储,以高度自由且规范的方式管理和存储数据。其单机性能表现良好。对于企业版是集群模式(非分布式)。

JanusGraph是开源的分布式图数据库,它的单机性能较差,但是分布式部署可以支持千亿级以上的海量数据,并且和spark、hbase等有着良好的结合度。


四、学习图数据库需要了解哪些算法知识

如果想深入学习图数据库,那么对于一些基本算法的理解必不可少。学习图数据库需要了解的基本算法有以下几种:

1、遍历算法:深度优先遍历、广度优先遍历

2、搜索算法:深度优先搜索、广度优先搜索、双向广度优先搜索、A*算法

3、最短路径算法:Dijkstra、Bellman-Ford、Floyd-Warshall

4、图匹配算法:匈牙利算法、KM算法

5、强连通分支算法与网络流:Ford-Fulkerson

6、深度学习:GNN


五、学习图数据库需要了解的图查询语言

像SQL一样,图查询语言是为了解决实际的查询问题。例如:

在一棵家谱树中,某人有多少个远房表亲?

在记录朋友或关注者信息的社交媒体图片中,两个用户之间的分离程度是多少?

在企业的供应链中,工厂与客户之间的最长跳数是多少?

在一系列银行交易中,哪些人与欺诈交易间的关系高于平均水平?

等等。

那么,目前常用的图查询语言有哪些呢?主要有以下几种:


  • Gremlin——最初为Apache Tinkerpop项目开发的图搜索语言,可实现过程性或声明性查询。
  • Cypher——最初由Neo4J创建,之后以OpenCypher的形式得到普及,这种声明性语言可用于搜索匹配特定属性的顶点和边。
  • GQL——一项标准倡议,致力于将Cyher、GSQL以及PSQL统一起来。
  • SPARQL——一种为了查询RDF格式知识图谱而建立的标准。
  • PGQL——甲骨文的原创语言,用于从符合规范的顶点当中搜索并收集信息。
  • GSQL——TigerGraph的原创过程语言。
  • AQL——ArangoDB的原创过程语言。
  • GraphQL——顾名思义,它肯定支持图查询;但GraphQL实际是一种更为通用的查询语言,能够高效搜索大部分文档与关系数据库。它虽然也能发掘出一部分图数据库用途,但总体来讲只是在支持与关系数据库相同的常规查询。


好了,了解了这么多,现在是不是很想下载一个图数据库,开始自己探索,走向高薪之路了呢?