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 ...
随机推荐
- python-模块-包
一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...
- 将rdlc报表作为资源嵌套使用
原文:将rdlc报表作为资源嵌套使用 如果我们准备在Windows Forms里面使用rdlc报表,那么会遇到一个问题:rdlc报表到底要不要作为附属文件的方式随程序发布? 这样做的优点是:报表可以后 ...
- HDU 6534 莫队+ 树状数组
题意及思路:https://blog.csdn.net/tianyizhicheng/article/details/90369491 代码: #include <bits/stdc++.h&g ...
- 【Luogu】【关卡2-9】带有技巧的搜索(2017年10月)
任务说明:这里的搜索不仅包含了dfs和bfs,还包括剪枝.记录等技巧以加快速度. [USACO06FEB]数字三角形Backward Digit Su… 滑雪 吃奶酪 靶形数独 P1118 [USAC ...
- Centos7.2安装MariaDB数据库,并进行基础配置
[注] MariaDB的安装与配置感谢博主carlo-jie的分享,原博文地址https://www.cnblogs.com/carlo-jie/p/6104135.html. 第二小节:用户创建及权 ...
- K8S集群安装部署
K8S集群安装部署 参考地址:https://www.cnblogs.com/xkops/p/6169034.html 1. 确保系统已经安装epel-release源 # yum -y inst ...
- jQuery的属性、遍历和HTML操作
一.属性操作 1..attr()与.removeAttr() 每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息.如:在img元素中,src就是元素的特性,用来标记图 ...
- 线性基思想+贪心——cf1249C
/*1+3+9+...+3^n<3^(n+1),按这个思路贪心一下就好*/#include<bits/stdc++.h> using namespace std; #define l ...
- 数学二分——cf700A
二分答案 #include<bits/stdc++.h> using namespace std; #define ll long long int n,l,v1,v2,k; double ...
- ionic学习使用笔记(一) 版本更新及创建项目时遇到的问题解决
最近开始用ionic开发项目,虽然去年的时候用ionic 2.0 开发过公司的项目,不过现在的ionic已经升级到了ionic framework 3.0 了.而且还有个 ionic-cli . 使用 ...