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操作时

最后再以以下两张图来展示一下两者在查询关系时的差别:RDBMSNeo4j

关于Neo4j详细的安装和使用,不是文章的重点,假设想要真正上手用Neo4j,能够到Neo4j官网上面有非常多资料

版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-10-25 13:14:36

Neo4j数据库简单的相关文章

Neo4j数据库简介

作为世界先进的图数据库,Neo4j成为了时下许多互联网公司的首选.Neo4j是基于java开发的开源图数据库,也是一种NoSQL数据库.Neo4j在保证对数据关系的良好刻画的同时,还支持传统关系型数据的ACID特性,并且在存储效率,集群支持以及失效备援等等方面都有着不错的表现.近来因为实验室的项目的关系,对Neo4j有了一定的了解.同时,我也对其设计思想和架构都产生了很大的兴趣,所以写下这篇博客,帮助大家更好地了解这一数据库,也分享一下以及的认识. 设计理念 Neo4j的设计动机是为了更好地同时

让你提前认识软件开发(25):数据库简单介绍

第2部分 数据库SQL语言 数据库简单介绍 数据库是个通用化的综合性的数据集合.它可以供各种用户共享且具有最小的冗余度和较高的数据与程序的独立性. 眼下,国际上主导的大型数据库管理系统有ORACLE.SQL SERVER.SYBASE.INFORMIX和INGRES等. 数据库中经常使用的编程语言是SQL语言,按其功能可分为四大部分: (1) 数据定义语言(Data Definition Language.DDL),用于定义.撤销和改动数据模式. (2) 数据查询语言(Data Query La

[数据库]简单SQL语句总结

1.在查询结果中显示列名:a.用as关键字:select name as '姓名'   from students order by ageb.直接表示:select name '姓名'   from students order by age 2.精确查找:a.用in限定范围:select * from students where native in ('湖南', '四川') b.between...and:select * from students where age between 2

MySql 与其他数据库简单比较

在事务支持方面,虽然MySQL自己的存储引擎并没有提供,但是已经通过第三方插件式存储引擎Innodb实现了SQL92标准所定义的四个事务隔离级别的全部 比如,大家所熟知的大名鼎鼎的Oracle数据库就仅仅实现了其中的两种(Serializable和ReadCommited),而PostGreSQL,同样支持四种隔离级别. 而PostGreSQL,同样支持四种隔离级别. 不过在可编程支持方面,MySQL和其他数据库相比还有一定的差距,虽然最新版的MySQL已经开始提供一些简单的可编程支持,如开始支

MongoDB和关系型数据库简单对比

MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoDB 工作在收集和文件的概念. 数据库:数据库是一个物理容器集合.每个数据库都有自己的一套文件系统上的文件.一个单一的MongoDB服务器通常有多个数据库. 集合:集合是一组MongoDB的文档.它相当于一个RDBMS表.收集存在于一个单一的数据库.集合不执行模式.集合内的文档可以有不同的领域.通常情况下,一个集合中的所有文件是相同或相关的目的. 文档:文档是一组键 - 值对. 文件动态模式.动态模

落网数据库简单查询接口 caddy+php7+mongodb

落网数据库简单查询接口 一个简单的DEMO,使用了caddy + php7 + mongodb 数据库&接口设计 来自 https://github.com/Aedron/Luoo.spider 项目(V1.0版本分支) 参考地址:https://www.cnblogs.com/edit/p/luoo-service_caddy-php7-mongodb.html 环境配置: 下载程序,新建一个目录,比如 C:\web https://caddyserver.com/download 下载cad

neo4j数据库迁移---------Neo4j数据库导入导出的方法

Neo4j数据进行备份.还原.迁移的操作时,首先要关闭neo4j; /usr/share/neo4j/bin neo4j stop 如果出现 Neo4j not running 出现这种情况, Neo4j没有运行, 但是浏览器仍然可以访问neo4j数据库的情况, 直接执行导入数据后,是无法看到导入的数据库, 其实这种情况下Neo4j仍在运行(否则浏览器是无法然访问的), 这就需要强制杀死Neo4j进程,则执行命令 ps -ef|grep neo4j kill -9 <对应的pid> 关闭Neo

Neo4j数据库学习一:安装和数据类型常用命令简介

Neo4j数据库是图数据库 在数据库中,只有节点Nodes和关系Relationships Nodes用圆圈表示,Relationships用有向箭头表示 关系和节点都有属性(键值对) 安装3.3.7版本 注意:需要系统有jdk8配置,没有请先安装jdk8,楼主这里已经安装过jdk8 3.3.7下载地址: https://neo4j.com/download-thanks/?edition=community&release=3.3.7&flavour=unix&_ga=2.208

使用Neo4j和简单分词算法实现菜品推荐系统

背景:本推荐系统基于一款硬件产品--旺小宝桌牌.客人按下点餐按钮,扫码进入点餐界面,然后开始点自己喜欢的菜,在手机端下单.目前在成都已有近200家合作餐饮商家. 菜品推荐功能: 当客人在某商家使用桌牌点菜,提取该客人点菜的主材,当客人下一次在另外一家使用桌牌的商家点菜时,即为该客户推荐该商家对应主材的菜. 如:某客人在A店点了[麻辣鸡爪],则该客人喜好食材为"鸡爪",当客人来到B店,则可为客人推荐B店对应的[二娘鸡爪爪]. 一.菜品主材提取 桌牌上的菜名由商家输入,存入到桌牌数据库中,