Neo4j 小调研
一、 概况:
在图计算中,基本的数据结构表达式是: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 小调研的更多相关文章
- SQLite 小调研
一. 概况: SQLite 是 D. Richard Hipp 于 2000 年采用 C 语言编写的一个轻量级.跨平台的关系型数据库,支持大部分 SQL92 标准(比如视图.事务.触发器.blob 数 ...
- MySQL 小调研
一. 概况: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL ...
- Level DB 小调研
一. 概况: 1. 背景: 随着信息技术的高速发展,数据存储量和流量呈现爆炸式增长.目前百度统计日 PV(日点击量)已超过 75 亿次,中国网民在百度上进行50 亿次的搜索请求,百度贴吧日 PV 十亿 ...
- Fog of War小调研
看起来LOL和DOTA2都用的是格子来做的战争阴影,并且是用PP做的.
- Redis 小调研
一. 概况: Redis是一款开源的.网络化的.基于内存的.可进行数据持久化的Key-Value存储系统.它的数据模型建立在外层,类似于其它结构化存储系统,是通过Key映射Value的方式来建立字典以 ...
- Elastic Search 小调研
一.概况: Elastic Search 是一个基于Apache Lucene™工具包的开源搜索引擎.无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库 ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
- Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
- 自己编写k8s
## 基于Docker和Kubernetes的企业级DevOps实践训练营 ### 课程准备 1. 离线镜像包 百度:https://pan.baidu.com/s/1N1AYGCYftYGn6L0Q ...
随机推荐
- pyhon if分支
在python中,最常用的就是if判断,if判断可以分为单次判断和多次判断 单次判断 if 条件 : (条件成立执行我) else:(else也可以没有,最近的else对应最近的if语句) (条件 ...
- 【Java】Java字符串转码
最近在开发项目中,偶尔遇到从页面上传到后台的中文数据,老是出现乱码的情况,但是对这个转码的过程又记不住,故此在此备份一下,希望对朋友们也有所帮助: String title=request.getPa ...
- UVA 12821 Double Shortest Paths
Double Shortest PathsAlice and Bob are walking in an ancient maze with a lot of caves and one-way pa ...
- 2018APIO 进京赶考
先见识了一下CTSC的操作...涨了见识... 打铁匠x1 见识了个全英文的ppt,各种讲课其实真的讲的很好,只是逻辑性太强反而让完全不会的同学有些尴尬... linux真的令人窒息...GUIDE用 ...
- android中的Serveice组件
创建 配置 Service: 1.定义一个继承了Service类的子类 2.在 AndroidManifest.xml清单文件中对开发的Service进行配置 Service和Activity很相似, ...
- linux常用命令记录(一)
文件搜索命令 grep在文件中查找字符并输出 grep 字符或字符串 文件目录 grep pub /teach/.txt -c 字符出现总行数 grep .txt -n 行号 grep .txt -i ...
- transform:translate(-50%,-50%)
和父亲元素没关系,走自己盒子宽度一半
- SpringBoot 2.x 使用 JWT(JSON Web Token)
一.跨域认证遇到的问题 由于多终端的出现,很多的站点通过 web api restful 的形式对外提供服务,采用了前后端分离模式进行开发,因而在身份验证的方式上可能与传统的基于 cookie 的 S ...
- Delphi 窗体函数GetWindowRect 取窗口矩形坐标
GetWindowRect,用于取窗口矩形坐标.返回值类型:布尔型(LongBool).执行成功返回真(True),否则返回假(False);参数1类型:整数型(HWND),目标窗口的窗口句柄;参数2 ...
- 【Web】Spring WebFlux
阅读目录 一.关于WebFlux 二.SpringMVC与SpringWebFlux 三.Reactive Spring Web 四.实现WebFlux示例 SpringWebflux是SpringF ...