一、 概况:

在图计算中,基本的数据结构表达式是:G= ( V,E ),V=vertex( 节点 ),E=edge(边) 。图数据库中数据模型主要以节点和关系(边)来体现,也可以处理键值对。数据具有如下特征:

①     包含节点和边。

②     节点上有属性(键值对)。

③     边有名字和方向,并总是有一个开始节点和结束节点。

④     边也可以有属性。

把点、边(关系)、属性联系到一起就能描述出一个图。下图展示了一张作者合作关系社交图谱(该图基于MDLayout改进算法生成)。每个作者代表一个点,边用白色实线表示,表明了两者间关系。边也可以拥有属性。很多个点关联起来就构成了一个很复杂的学术合作关系网。使用图形数据库很容易存放这种人际关系网,而传统的关系数据库则不能最优化的存储上述社会关系数据。

学术合作图谱实例

Neo4j数据库是一个高性能的新型NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。

它具有以下优点:

①    自带易于学习的查询语言(名为Cypher)。

②    不使用schema,可以满足任何形式的需求。

③    相比关系型数据库,查询速度要快上很多。

④    相比关系型数据库,可扩展性极高,灵活性强。

⑤    实体与关系结构非常自然地切合人类的直观感受,在处理关系复杂的数据时远胜于关系型数据库。

⑥    支持JAVA操作。

⑦    支持兼容ACID的事务操作。

⑧    提供了一个高可用性模型,以支持大规模数据量的查询,支持备份、数据局部性以及冗余。

⑨    提供了一个可视化的查询控制台。

同时,它具有以下不足:

①    作为新型数据库,它的成熟度远不如传统的关系型数据库。

②    数据查询语言种类繁多,尚未形成统一规范。

③    安全性相对较弱,有待完善。

④    不适合处理大量分布型数据。

⑤    不适合保存结构化数据、二进制数据(相较关系型数据库而言)。

二、 原理简介:

The node records contain only a pointer to their first property and their first relationship (in what is oftentermed the _relationship chain). From here, we can follow the (doubly) linked-list of relationships until we find the one we’re interested in, the LIKES relationship from Node 1 to Node 2 in this case. Once we’ve found the relationship record of interest, we can simply read its properties if there are any via the same singly-linked list structure as node properties, or we can examine the node records that it relates via its start node and end node IDs. These IDs, multiplied by the node record size, of course give the immediate offset of both nodes in the node store file.

上面的英文摘自<Graph Databases>(作者:IanRobinson) 一书,描述了 neo4j 的存储模型。Node和Relationship 的 Property 是用一个 Key-Value 的双向列表来保存的; Node 的 Relatsionship 是用一个双向列表来保存的,通过关系,可以方便的找到关系的 from-to Node. Node 节点保存第1个属性和第1个关系ID。

通过上述存储模型,从一个Node-A开始,可以方便的遍历以该Node-A为起点的图。下面提供示例,来帮助理解上面的存储模型。

示例

在这个例子中,A~E表示Node 的编号,R1~R7 表示Relationship编号,P1~P10 表示Property的编号。

  • Node 的存储示例图如下,每个Node保存了第1个Property和 第1个Relationship:
  • 关系的存储示意图如下:

  • 从示意图可以看出,从 Node-B 开始,可以通过关系的 next 指针,遍历Node-B 的所有关系,然后可以到达与其有关系的第1层Nodes,在通过遍历第1层Nodes的关系,可以达到第2层Nodes,……

  总而言之,Neo4j图形数据库是一个杰出的高性能NoSQL数据库,它相较于传统的关系型数据库具有强拓展性、灵活性等优势,在存储关系性强且变化频繁的数据时具有可观的效率;但同时,它在存储二进制数据、结构化数据时效率较低,安全性不及传统数据库强。作为新生数据库,Neo4j在知识图谱构建、文本搜索等方面已经逐渐显露出不凡的特性,也是近年来许多学者研究和尝试使用的宠儿,在将来会得到更广泛、更高效的应用。

(参考资料:http://sunxiang0918.cn/2015/06/27/neo4j-%E5%BA%95%E5%B1%82%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84%E5%88%86%E6%9E%90)

Neo4j 小调研的更多相关文章

  1. SQLite 小调研

    一. 概况: SQLite 是 D. Richard Hipp 于 2000 年采用 C 语言编写的一个轻量级.跨平台的关系型数据库,支持大部分 SQL92 标准(比如视图.事务.触发器.blob 数 ...

  2. MySQL 小调研

    一. 概况: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL ...

  3. Level DB 小调研

    一. 概况: 1. 背景: 随着信息技术的高速发展,数据存储量和流量呈现爆炸式增长.目前百度统计日 PV(日点击量)已超过 75 亿次,中国网民在百度上进行50 亿次的搜索请求,百度贴吧日 PV 十亿 ...

  4. Fog of War小调研

    看起来LOL和DOTA2都用的是格子来做的战争阴影,并且是用PP做的.

  5. Redis 小调研

    一. 概况: Redis是一款开源的.网络化的.基于内存的.可进行数据持久化的Key-Value存储系统.它的数据模型建立在外层,类似于其它结构化存储系统,是通过Key映射Value的方式来建立字典以 ...

  6. Elastic Search 小调研

    一.概况: Elastic Search 是一个基于Apache Lucene™工具包的开源搜索引擎.无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库 ...

  7. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  8. Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  9. 自己编写k8s

    ## 基于Docker和Kubernetes的企业级DevOps实践训练营 ### 课程准备 1. 离线镜像包 百度:https://pan.baidu.com/s/1N1AYGCYftYGn6L0Q ...

随机推荐

  1. dubbo的一些特性理解一下

    还有 启动检查.负载均衡.多协议支持 等 待总结

  2. spring security 学习二

    doc:https://docs.spring.io/spring-security/site/docs/ 基于表单的认证(个性化认证流程): 一.自定义登录页面 1.在securityConfigy ...

  3. 解决 使用migrations 执行update-database 出现System.InvalidOperationException: 实例失败的问题

    好久没有使用Code First的方式来创建模型了  今天重温了一下 但是出现了很多问题 现在总结一下 在我做完初期的操作的之后,使用 update-database -verbose 更新数据库时, ...

  4. iOS开发系列-Block

    概述 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想到在C函数中,我们可以定义一个指向函数的指针并且调用. #im ...

  5. 使用vscode搭建本地的websocket

    首先在服务器方面,网上都有不同的对websocket支持的服务器: php - http://code.google.com/p/phpwebsocket/ jetty - http://jetty. ...

  6. Linux中目录结构以及VI编辑器常见的命令操作

    1.每个目录的详细介绍,先放一张目录的整体结构在这里 /bin:是Binary的缩写,用于存放经常使用的命令 /sbin:s代表Super User,用于存放系统管理员使用的命令 /home:存放普通 ...

  7. tf.placeholde函数解释与用法

    函数原型:tf.placeholder(dtype, shape=None, name=None) 使用说明:该函数用于得到传递进来的真实的训练样本.同时也可以理解为形参, 用于定义过程,在执行的时候 ...

  8. isPrototypeOf,hasOwnProperty

    在看jquery源码的过程中,了解到isPrototypeOf属性.此属性只是Object.prototype的自有属性,即: Object.prototype.hasOwnProperty('isP ...

  9. sqlserver 将店铺表转换成可以用in查询的字符串

    create TABLE #tempshopt ( shopid varchar(max) ) set @aSql = 'insert into #tempshopt(shopid) select s ...

  10. flexbox布局一

    flexbox布局是一种新的css布局,flex是flexible的简写,所以flexbox就可以理解为可伸缩布局.而可伸缩性也是flexbox布局的亮点,至于如何可伸缩,看完下面的介绍大家应该就会有 ...