大数据时代的新型数据库–图数据库 Neo4j

1

什么是图数据库

大数据时代的新型数据库--图数据库 Neo4j

图数据库是基于数学里图论的思想和算法而实现的高效处理复杂关系网络的新型数据库系统。

图数据库的数据存储方式就像将其绘制出来一样-Nodes通过Relationships所定义的关系相连起来,形成关系型网络结构,展示了每个单独的实体如何与其他实体联系或相互关联。

2

图数据库擅长做什么-与传统关系型数据库相比

关系查询更佳:图形数据库善于高效处理大量的、复杂的、互连的、多变的数据。其计算效率远远高于传统的关系型数据库。

传统关系型数据库在查询关系问题上最简单的方法就是建立一个关系模型,如下图:

大数据时代的新型数据库--图数据库 Neo4j

图中展示了一个非常简单的关系模型,当我们想就这个关系模型查询关系深度为1的关系(比如小明的朋友)时可使用

大数据时代的新型数据库--图数据库 Neo4j

进行查询

深度为1的查询,关联关系并不复杂,MySQL执行起来压力不大,语句也很容易编写,但是如果将深度提到2(也就是查询小明朋友的朋友时)语句已经开始变长,再进一步将深度提升到3时,MySQL查询也会开始产生压力。

有一个很有意思的测试,一分别通过关系型数据和图数据库在一个社交网络里找到最大深度为5的关系。他们的数据集包括100万人,每人约有50个朋友。实验结果如下:大数据时代的新型数据库--图数据库 Neo4j

当查询的关系深度达到3时,MySQL的查询效率便开始被Neo4j图数据库甩开。

至于为什么Neo4j的关系查询能力能够优于传统关系型数据库,则需要去了解它是如何存储数据的。

3

图数据库Neo4j的存储结构

节点、关系与属性大数据时代的新型数据库--图数据库 Neo4j一个图数据库中的数据由节点(node)和将节点连接起来的关系(relationship)组成,节点(node)和关系(relationship)中又包含一个或多个属性(property)。节点有拥有若干标签,关系带有类型。

原生图存储(nativegraph storage

一般认为具有”无索引邻接”特性的图数据库才称为原生图数据。大数据时代的新型数据库--图数据库 Neo4jneo4j的节点、关系和属性分别保存在neostore.nodestore.db、neostore.relationshipstore.db和neostore.propertystore.db文件中,在neo4j中,点、关系和属性等图的组成元素都是基于neo4j内部维护的ID进行访问的,数据结构如下图:节点(指向联系和属性的单向链表,neostore.nodestore.db):inUse:表示是否被使用的标志位。nextRelId:代表关联到这个节点的第一个关系的ID。nextPropId:代表第一个属性ID。labels:是代表当前节点的标签,指向该节点的标签存储。大数据时代的新型数据库--图数据库 Neo4jextra:作为保留位。关系(双向链表,neostore.relationshipstore.db):inUse:代表是否被使用的标志位。firstNode:表示起始节点的IDsecondNode:表示结束节点的IDrelationshipType:表示关系类型firstPrevRelId:表示起始顶点上前一个边记录firstNextRelId:表示起始顶点上后一个边记录secPrevRelId:表示终止顶点上前一个边记录secNextRelId:表示终止顶点上后一个边记录指向前后边记录的4个指针形成了两个“关系双向链”nextPropId:是边上的第1个属性的id大数据时代的新型数据库--图数据库 Neo4jfirstInChainMarker:表示该边记录是否是“关系链”中第1条记录一个Byte存辅助信息,即前后属性结构ID的高位信息一个Int存前一个属性一个Int存下一个属性

假设要查询与某个点有对应关系的所有点时,首先查到该点的ID,通过该ID计算该点的存储偏移位置,从存储文件中获取到该点的信息,然后从该点的信息中获取到该点nextRelId数据即该点第一个关系的ID,根据这个ID计算该关系存储偏移量,从存储文件中获取该关系数据,判断是否为需要查询的关系,若为所要查询的,则获取该关系的secondNode即该关系的终节点ID,若为其他节点则保存该ID,查询到所有数据返回关系及节点。

综上所述Neo4j关系查询的核心便在relationship(关系)的存储上,一条关系存储的数据包括上一条边、下一条边、关系/边的起始节点与结束节点,当查询某一个点某一条关系时只需查询到该点所对应的第一条关系/边,然后根据这条关系上所存储的下一条关系以及关系的开始节点与终节点进行查询即可。

Neo4j中node、relationship、property以链表的形式存储了本记录及上一条或下一条记录的相关信息,保证了关系遍历的效率。

关于Neo4j的介绍就到这里。

来源:IT那活儿,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/125736

发表评论

登录后才能评论
侵权联系
返回顶部