Neo4j数据库简单
作为世界上先进的地图数据库,Neo4j如今,公司已成为许多互联网的首选。Neo4j它是基于java开源地图数据库开发,另外一个NoSQL数据库。Neo4j在保证对数据关系的良好刻画的同一时候。还支持传统关系型数据的ACID特性。而且在存储效率,集群支持以及失效备援等等方面都有着不错的表现。近来由于实验室的项目的关系。对Neo4j有了一定的了解。
同一时候。我也对其设计思想和架构都产生了非常大的兴趣,所以写下这篇博客,帮助大家更好地了解这一数据库,也分享一下以及的认识。
设计理念
Neo4j的设计动机是为了更好地同一时候也更高效地描写叙述实体之间的关系。在现实生活中,每个实体都于周围的其它实体有着千丝万缕的关系,这些关系里面所存储的信息甚至要大于身体本身的属性。然后传统的关系型数据库更注重刻画实体内部的属性。实体与实体之间的关系通常都是利用外键来实现。所以在求解关系的时候通常须要join操作。而join操作通常又是耗时的。互联网尤其是移动互联网的爆发式增长本来就使得传统关系型数据库不堪重负,再加上诸如社交网络等应用对于关系的高需求,能够说关系型数据库已经是毫无优势。而图数据库作为重点描写叙述数据之间关系的数据库应运而生,成为了NoSQL中很重要的一部分。而Neo4j正是图数据库中最为优秀的之中的一个
Neo4j数据库仅仅有两种类型的数据:
- 节点Node:节点类似于E-R图种的实体(entity)。每一个实体能够有0到多个属性,这些属性以key-value对的形式存在。而且对属性没有类别要求。也无需预定义。另外。还同意给每一个节点打上标签。以差别不同类型的节点。
- 关系Relationship: 关系类似于E-R图种的关系(relationship)。一个关系有一个起始节点和一个终止节点构成。另外和node一样。关系也能够有多个属性已经标签
其详细的结构例如以下图:
而一个实际的图数据库样例就例如以下图所看到的的这样:
正是基于这种设计理念。Neo4j有了下面这些特性:
- 关系在创建的时候就已经实现了。因而在查询关系的时候是一个O(1)的操作
- 全部的关系在Neo4j中都是同等重要的
- 提供了图的深度优先搜索、广度优先搜索、最短路径、简单路径已经Dijkstra等等算法
Neo4j的存储结构
如今让我们来看看数据在Neo4j中是怎样存储的。首先是节点Node的格式: Node:in_use(byte)+next_rel_id(int)+next_prop_id(int),每一位的详细意义例如以下:
- in_use:1表示该节点被使用,0表示被删除
- next_rel_id(int):该节点下一个关系id
- next_prop_id(int):该节点下一个属性的id
Relation格式: in_use+first_node+second_node+rel_type+first_prev_rel_id+first_next_rel_id+second_prev_rel_id+second_next_rel_id+next_prop_id
- in_use,next_prop_id:同上
- first_node:当前关系的起始节点
- second_node:当前关系的终止节点
- rel_type:关系类型
- first_prev_rel_id & first_next_rel_id:起始节点的前一个和后一个关系id
- second_prev_rel_id & second_next_rel_id:终止节点的前一个和后一个关系id
相信看了存数结构之后。大家知道为什么Neo4j在查询节点关系的时候会如此之快了。由于每个节点有哪些关系都是直接存在该节点的定义域内的。直接訪问即可了。根本不须要再去查找另外一张表。
以下举一个图的遍历的样例:
- 从节点1開始。宽度优先遍历,其存储结构为:01 00000002 ffffffff
- 其下一个关系id是2。訪问关系2:01 00000001 00000004 00000000 ffffffff 00000001 ffffffff ffffffff ffffffff 得出node 1 -> node 4,同一时候下个关系是1
- 关系1: 01 00000001 00000003 00000000 00000002 00000000 00000003 ffffffff ffffffff node1 -> node 3,node3 有其它关系。所以将node3存入队列。同一时候訪问关系0
- 关系0:01 00000001 00000002 00000000 00000001 ffffffff ffffffff ffffffff ffffffff node1 -> node2,訪问完毕node1的全部关系。从队列中退出node3
- 用于上文同样的方法訪问node3
- 最后结果例如以下:
(1)–[KNOWS,2]–>(4)
(1)–[KNOWS,1]–>(3)
(1)–[KNOWS,0]–>(2)
(1)–[KNOWS,1]–>(3)–[KNOWS,5]–>(7)
(1)–[KNOWS,1]–>(3)–[KNOWS,4]–>(6)
(1)–[KNOWS,1]–>(3)–[KNOWS,3]–>(5)
Neo4j与关系型数据库的差别
事实上通过上述的解说,相信大家都对neo4j与RDBMS(Relational Database Management System)的差别有了一定的认识。如今再用以下的表格来又一次整理一下:
| Neo4j | RDBMS |
| 同意对数据的简单且多样的管理 | 高度结构化的数据 |
| 数据加入和定义灵活。不受数据类型和数量的限制,无需预定义 | 表格schema需提前定义。改动和加入数据结构和类型复杂,对数据有严格的限制 |
| 常数时间的关系查询操作 | 关系查询操作耗时 |
| 提出全新的查询语言cypher,查询语句更加简单 | 查询语句更为复杂,尤其涉及到join或union操作时 |
最后再以以下两张图来展示一下两者在查询关系时的差别:
RDBMS
Neo4j
关于Neo4j详细的安装和使用,不是文章的重点,假设想要真正上手用Neo4j,能够到Neo4j官网上面有非常多资料
版权声明:本文博主原创文章。博客,未经同意不得转载。
Neo4j数据库简单的更多相关文章
- Ubuntu14.04下沙盒数据导入到 Neo4j 数据库(图文详解)
不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793914 (表示感谢) 前期博客 Neo4j沙盒实验申请过程 ...
- Ubuntu16.04下沙盒数据导入到 Neo4j 数据库(图文详解)
不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793914 (表示感谢) 前期博客 Neo4j沙盒实验申请过 ...
- 嵌入式(Embedded)Neo4j数据库访问方法
应用中采用嵌入式Neo4j(Embedded Neo4j)数据库,插入数据后不知道如何访问.查询之后知道有Neoclipse这个可视化工具,最新版本是1.9.5.添加目录后报错: 应该是Neoclip ...
- linux/windows系统oracle数据库简单冷备同步
linux/windows系统oracle数据库简单冷备同步 我们有一个财务系统比较看重财务数据的安全性,同时我们拥有两套系统,一个生产环境(linux),一个应急备份环境(windows).备份环境 ...
- ORACLE 数据库简单测试
ORACLE 数据库简单测试 操作系统:Windows 7 – ORACLE:oracle database 10.2.0.4 一.目的 测试 启动监听程序.数据库 非同一个用户的情况,用户是否可以 ...
- Ubuntu16.04上安装neo4j数据库
什么是neo4j数据库? neo4j数据库是图数据库的一种,属于nosql的一种,常见的nosql数据库还有redis.memcached.mongDB等,不同于传统的关系型数据库,nosql数据也有 ...
- [数据库]简单SQL语句总结
1.在查询结果中显示列名:a.用as关键字:select name as '姓名' from students order by ageb.直接表示:select name '姓名' from ...
- 落网数据库简单查询接口 caddy+php7+mongodb
落网数据库简单查询接口 一个简单的DEMO,使用了caddy + php7 + mongodb 数据库&接口设计 来自 https://github.com/Aedron/Luoo.spide ...
- Neo4j数据库学习一:安装和数据类型常用命令简介
Neo4j数据库是图数据库 在数据库中,只有节点Nodes和关系Relationships Nodes用圆圈表示,Relationships用有向箭头表示 关系和节点都有属性(键值对) 安装3.3.7 ...
随机推荐
- Gentoo Linux 学习笔记2
在RHEL系列的Linux操作系统中,可以通过rpm -ql package的方式来查看这个软件包共有哪一些文件所构成.在Gentoo下,也有这样的工具,equery.要使用这个工具,首先要 ...
- java+android学习路线图
java.android学习路线图 看图之前先按住Ctrl键同时滑动鼠标滚轮
- Struts 2.3.4.1完整示例
[系统环境]Windows 7 Ultimate 64 Bit [开发环境]JDK1.6.21,Tomcat6.0.35,MyEclipse10 [其他环境]Struts2.3.4.1 [项目描述]S ...
- hadoop记录topk
lk@lk-virtual-machine:~$ cd hadoop-1.0.1 lk@lk-virtual-machine:~/hadoop-1.0.1$ ./bin dfs -mkdir inpu ...
- 使用IIS建立自己的网站、使用C#编写IIS模拟器,更好的理解Client和Server的relation
如何在IIS服务器上搭建自己的网站呢,今天带着这问题进行简单的实践一下,并且准备模拟一下IIS服务器工作方式,把这个工作方式搞清楚有利于发展. 1.首先应该进入控制面板=>程序=>添加或删 ...
- javaScript 工作必知(十) call apply bind
call 每个func 都会继承call apply等方法. function print(mesage) { console.log(mesage); return mesage; } print ...
- html标签总结。
接触了一段时间的html和css,发现了其中的乐趣.在写代码时一定要仔细,很有可能一个细微的错误便会导致页面的错误 总结了一下html标签. <html></html> 创建一 ...
- org.hibernate.QueryException: could not resolve property: address of:
Hibernate: select count(*) as y0_ from test.course this_ org.hibernate.QueryException: could not res ...
- AJAX应用中必须要掌握的知识!
AJAX是什么? 是Asynchronous Javascript And XML的首字母的缩写, 它不是一门的新的语言,而是对现有技术的综合利用. 其本质是在HTTP协议的基础上以异步的方式与服务器 ...
- CDH(cdh5.7) 上集成 kafka
CDH 可以在线下载: 离线安装