2023/2/24 图数据库Neo4j的理解与应用
1 什么是图数据库(graph database)
十大应用案例:https://go.neo4j.com/rs/710-RRC-335/images/Neo4j-Top-Use-Cases-ZH.pdf
“大数据”每年都在增长,但如今的企业领导者不仅需要管理更大规模的数据,还迫切需要从现有数据中得出深刻见解。企业需要摈弃仅仅收集数据点的做法,开始着手建立数据之间的关联关系。数据点之间的关系甚至比单个点本身更重要。讽刺的是,传统的关系数据库管理系统(RDBMS)并不擅长处理数据之间的关系。那些表状数据模式和呆板的结构难以添加新连接或不同类型连接。为了利用这些数据关系,需要一种能将关系信息存储为一等实体的新型数据库技术,这种技术就是图数据库。
图数据库不仅能有效存储数据点之间的关系,而且非常灵活,适合添加新的关系类型,并使数据模型适应新的业务需求。
随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,急需一种支持海量复杂数据关系运算的数据库,图数据库应运而生。
社交网络图谱:
在社交网络中,公司、员工、技能的信息,这些都是节点,它们之间的关系都是边,在这里面图数据库可以做一些非常复杂的公司之间关系的查询。比如说公司到员工、员工到其他公司,从中找类似的公司、相似的公司,都可以在这个系统内完成。
企业关系图谱:
图数据库可以对各种企业进行信息图谱的建立,包括最基本的工商信息:何时注册、谁注册、注册资本、在何处办公、经营范围、高管架构。围绕企业的经营范围,继续细化去查询企业究竟有哪些产品或服务,例如通过企业名称查询到企业的自媒体,从而给予其更多关注和了解。另外,企业的产品和服务数据的关联,查看该企业有没有令人信服的自主知识产权和相关资质来支撑业务的开展。
企业在日常经营中,与客户、合作伙伴、渠道方、投资者都会打交道,这也决定了企业对社会各个领域都广有涉猎,呈现面错综复杂,因此可以通过企业数据图谱来查询,层层挖掘信息。基于图数据的企业信息查询可以真正了解企业的方方面面,而不再是传统单一的工商信息查询。
在数据关系中,图数据库在查询速度方面非常高效,即使对于高深度和高复杂的查询也是如此。在关系型数据库和图数据库(Neo4j)之间进行了实验:在一个社交网络里找到深度为5的朋友的朋友,他们的数据集包括100万人,每人约有50个朋友:
图数据库并不是前端展示用的数据库,它不是用来画图的。相反,它是用来存储数据用的,以图的节点和边的方式来存储数据。而前端展现需要用一些前端展示工具,例如D3、ECharts等来实现。
图数据库并非指存储图片的数据库,而是以图数据结构存储和查询数据。图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是以图论为基础的,图数据库主要用于存储更多的连接数据。
图论〔Graph Theory〕是数学的一个分支。它以图为研究对象,图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有关系。
在一个图中主要包含两种数据类型:Nodes(节点)和Relationships(关系)。他们各自内部又包含key-value形式的属性,然后节点之间通过关系相连,形成了关系型的网状结构。
Neo4j是由Java实现的开源NoSql图数据库,是图数据库中较为流行的一款。它提供了完整的数据库特性,包括ACID事务的支持、集群支持、备份与故障转移等(部分功能例如集群支持只有在neo4j企业版中才有,社区版不支持)。
在我看来,图数据库最大的优势是体现在对数据关系的检索上。如果数据之间的关系很复杂,数据存在了多张表中,还有一些中间表的存在的话,传统数据库想要查询一些数据得通过各种联表操作才做得到,sql会写得很复杂,不利于维护,同时性能也不高。而图数据库仅仅通过简单的一句cypher语句便可实现查询功能(cypher语句是Neo4j的执行语句,类似于关系型数据库中的SQL),同时执行速度也会快很多(书中所说是能够实现毫秒级响应,但通过我实测其实并没有这么夸张。Neo4j是将数据存在内存中的,对硬件有一定要求。所以数据越来越多的情况下,同时也有事务的因素,查询速度也会变慢)。
图数据库也支持查询一些复杂的关系。例如某节点周围一级的关系节点有哪些,二级的关系又有哪些。拿社交网络来举例,假如我现在要实现一个查询某人可能认识的人有哪些的功能。那么这个功能翻译成cypher就是: 查询这个人A的周围一圈认识的人的集合B中,所有B周围一圈人中和A没有交集的人。 这个用cypher语句是能写出来的,同时也不会太复杂。
对比关系型数据库:
在关系型数据库中,Person和Department表之间用外键表示关系:
在图数据库中,节点和关系取代表,外键和join:
在图数据库中,无论何时运行类似JOIN的操作,数据库都会使用此列表并直接访问连接的节点,而无需进行昂贵的搜索和匹配计算。
分类 | 数据模型 | 优势 | 劣势 | 举例 |
---|---|---|---|---|
图数据库 | 节点和关系组成的图 | 利用图结构相关算 | 可能需要对整个图做计算,不利于图数据的分布存储 | Neo4J |
2 什么是neo4j
Neo4j是一个高性能的NOSQL图数据库,它将结构化数据存储在网络上(从数学角度叫做图)而不是表中。
它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。
Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的图网络结构下,而不是严格、静态的表中。但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注。采用属性图模型(Property graph model),极大的完善和丰富图数据模型;专属查询语言 Cypher。官网: https://neo4j.com/
Neo4j的特点:
SQL就像简单的查询语言Neo4j CQL;它遵循属性图数据模型;它通过使用Apache Lucence支持索引;它支持UNIQUE约束;它包含一个用于执行CQL命令的UI:Neo4j数据浏览器;它支持完整的ACID(原子性,一致性,隔离性和持久性)规则;它采用原生图形库与本地GPE(图形处理引擎);它支持查询的数据导出到JSON和XLS格式;它提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问;它提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本;它支持两种Java API:Cypher API和Native Java API来开发Java应用程序。
Neo4j的优点:
- 高度可扩展性:Neo4j具有高度可扩展性。它提供了一个简单,强大和灵活的数据模型,可以根据应用程序和用途进行更改。它提供:
更高的垂直缩放比例。
大规模改进了操作特性。
更高的并发性。
简化的调整。
- 无模式: Neo4j与其他NoSQL数据库—样无模式。
- 高可用性: Neo4j通过事务保证为大型企业实时应用程序提供高可用性。
- 实时数据分析: Neo4j提供基于实时数据的结果。
- 易于表示: Neo4j提供了一种非常简单的方法来表示连接【关系】的和半结构化的数据【节点】。
- 快速执行: Neo4j速度很快,因为连接的数据非常容易检索和浏览。
- 轻松检索: Neo4j不仅可以帮助您表示,而且可以比较容易地更快地检索与(遍历/导航)其他数据库中的连接数据。
- 密码查询语言;:Neo4提供了CQL(密码查询语言)一种声明性查询语言,使用ASCIi语法将图形直观地表示出来。该语言的命令非常易于学习并且易于阅读。
- 无联接:Neo4不需要复杂的联接即可检索已连接/相关的数据,因为无需联接或索引即可轻松检索其相邻节点或关系详细信息,因为它是一个图数据库并且所有节点都已连接。
3 Neo4j数据模型 图论基础
图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。
以属性【key,value】的形式将数据存储在节点和边中。在图中,我们可以用一个圆圈表示节点,用箭头表示节点之间的关系。简单的可能图是单个节点:
我们可以使用节点表示社交网络中的个人资料,向节点中添加一些属性:
在两个节点之间创建关系:
此处在两个配置文件之间创建关系名称“跟随”。 这意味着 Profile-I 遵循 Profile-II。
图的顶点表示相同类型的事物(分别是人、网页或交叉路口)。然而,图不局限于这样的同构数据,图更为强大的用途在于提供了单个数据存储区中保存完全不同类型对象的一致性方式。如Facebook维护一个含许多不同类型的顶点与边的大图:
- 顶点包括人、地点、事件、签到和用户的评论
- 边表示哪些人是彼此的朋友,签到发生在哪些位置, 谁评论了哪个帖子, 谁参与了哪个事件
它可能来自社交网络或某族谱数据库。 案例是两个人,分别来自爱达荷州的Lucy和来自法国波恩的Alain,它们结婚了,目前住在伦敦。
有多种不同但相关的方法可构建和查询图中的数据。本节将讨论属性图模型和三元存储模型。
4 属性图模型
在属性图模型中,每个顶点包括:
- 唯一标识符
- 出边的集合
- 入边的集合
- 属性的集合(键-值对)
每个边包括:
- 唯一标识符
- 边开始的顶点
- 边结束的顶点
- 描述两个顶点间关系类型的标签
- 属性的集合 (键-值对)
可将图存储结构由两个关系表组成,一个用顶点, 另一个用边:
此模式使用PostgreSQL JSON存储每个顶点或边的属性。为每个边存储头部和尾部顶点,若想要顶点的入边或出边集合 ,可分别通过head_vertex 或tail_vertex来查edges表。
图模型重点:
- 任何顶点都能连接到其他任一顶点,没有模式限制哪种事物可或不可关联
- 给定某顶点,可高效得到它的所有入、出边,从而遍历图,即沿着这些顶点链条一直向前或向后(这就是为何图2-2中在tail_vertex和
head_vertex列上都建立索引的原因) - 通过对不同类型的关系使用不同标签,可在单个图中存储多种不同类型的信息,同时仍保持整洁的数据模型。
5 Neo4j的构建元素
节点(Node)是图数据库中的一个基本元素,用来表示一个实体记录,就像关系数据库中的一条记录一样。在Neo4j中节点可以包含多个属性(Property)和多个标签(Label)。
- 1、节点是主要的数据元素节点,通过关系连接到其他节点,节点可以具有一个或多个属性
- 2、节点有一个或多个标签,用于描述其在图表中的作用
属性(Property)是用于描述节点和关系的键值对。其中Key是一个字符串,值可以通过使用任何Neo4j数据类型来表示。
- 1、键是字符串,属性可以被索引和约束
- 2、可以在多个属性创建复合索引
关系(Relationship)同样是图数据库的基本元素。当数据库中已经存在节点后,需要将节点连接起来构成图。关系就是用来连接两个节点,关系也称为图论的边(Edge) ,其始端和末端都必须是节点,关系不能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type) 。
- 1、连接两个节点关系是有方向性的,节点可以有多个甚至递归的关系
- 2、关系可以有一个或多个属性
- 3、基于方向性,Neo4j关系被分为两种主要类型:单向关系双向关系
标签(Label)将一个公共名称【标签名】与一组节点或关系相关联, 节点或关系可以包含一个或多个标签。 我们 可以为现有节点或关系创建新标签, 我们可以从现有节点或关系中删除标签。
- 标签用于将节点分组
- 一个节点可以具有多个标签
- 对标签进行索引以加速在图中查找节点
- 本机标签索引针对速度进行了优化
相关文章:

2023/2/24 图数据库Neo4j的理解与应用
1 什么是图数据库(graph database) 十大应用案例:https://go.neo4j.com/rs/710-RRC-335/images/Neo4j-Top-Use-Cases-ZH.pdf “大数据”每年都在增长,但如今的企业领导者不仅需要管理更大规模的数据,还迫切需要从现有…...

适合视力障碍者的Linux
导读有哪些最适合视障用户的 Linux 发行版?让我们一起来看看。 如果有人视力障碍或失明,他们可能会依赖声音提示或其他交互方式(如盲文)来阅读和交流。 他们怎样才能使用 Linux 发行版? 嗯,一般来说&…...

Tina Linux 存储开发指南
Tina Linux 存储开发指南 1 概述 1.1 编写目的 介绍TinaLinux Flash,分区,文件系统等存储相关信息,指导方案的开发定制。 1.2 适用范围 Tina V3.0 及其后续版本。 1.3 相关人员 适用于TinaLinux 平台的客户及相关技术人员。 2 分区管…...

【洛谷 P2670】[NOIP2015 普及组] 扫雷游戏 题解(模拟)
[NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 nnn 行 mmm 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻…...

【nohup引发磁盘读写高】nohup命令导致服务器磁盘读写占满该如何修复?
【写在前面】自己在跑一个项目的时候,猛然发现服务器挂了,直接访问不了,呈现出一种卡死现象,我当时都懵了,难道阿里在后端升级,也不会选择在工作日的时间升级吧,于是乎就咨询了一下客服。才有下…...

MySQL(二)索引和SQL优化
MySQL进阶MySQL体系结构存储引擎存储引擎特点InnoDB逻辑存储结构MyISAMMemory存储引擎选择索引索引结构二叉树B-TreeBTreeHash索引分类索引语法SQL性能分析工具SQL执行频率慢查询日志profile详情explain索引使用联合索引索引失效情况SQL提示覆盖索引前缀索引单列索引与联合索引…...

Java常用日期类(包含三代)_Date类及Calendar类等
一.java.util.Date类概述从JDK 1.0出现。表示一个日期和时间,精确到毫秒,内部getTime()从1970年1月1号开始算。1. java.util.Date类构造部份构造已经过时,重点看以下两个构造。public Date()从运行程序的此时此刻到时间原点经历的毫秒值&…...

计算机网络你都懂了吗
文章目录一、计算机网络的定义简单定义通用定义二、计算机网络通信过程三、什么是网络协议(Protocol)四、网络协议组成及功能一、计算机网络的定义 简单定义 计算机网络是一些相互连接的、自治的计算机系统的集合。 通用定义 将处于不同位置并具有独…...

3.4 Spring Boot 日志配置
第3章 Spring Boot 的系统配置 3.1 Spring Boot 系统配置文件 3.2 Spring Boot 自定义配置项 3.3 Spring Boot 其他配置 3.4 Spring Boot 日志配置 3.5 实战:Spring Boot 实现系统多环境配置 3.4 Spring Boot 日志配置 日志对于系统监控、故障定位非常重要…...

3款百里挑一的国产软件,逆天好用,装了就舍不得卸载
推荐3款让你偷懒,让你上头的提效电脑软件,个个功能强大,让你远离加班! 很多几个小时才能做好的事情,用上它们,只需要5分钟就行!! 1、JNPF快速开发平台 JNPF 是一款精巧耐用的软件…...

Java实现在线沟通功能
文章目录1、介绍 和 特点2、整合SpringBoot2.1、导入依赖2.2、websocket 配置类2.3、消息处理类2.4、启动服务2.5、前端代码:张三2.6、前端代码:李四3、效果4、小结1、介绍 和 特点 t-io是基于JVM的网络编程框架,和netty属同类,所…...

识别密文加密类型
离线密码破解:离线不会触发密码锁定机制不会产生大量登录失败日志引起管理员注意HASH识别工具(识别哈希类型):hash-identifierHashid yara规则匹配文件得到特定加密算法一、hash-identifierKali Linux提供工具hash-identifier来识…...

node报错
记录bug:运行 npx -p storybook/cli sb init 时报错gyp info spawn C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exegyp info spawn args [gyp info spawn args build/binding.sln,gyp info spawn args /nologo,gyp info spawn args…...

如何使用开源 BI 工具 DataEase 实现系列数据分析呢?
当我们使用可视化分析工具制作仪表板时,可能需要制作的仪表板不是单个单个的可视化大屏,而是一系列的仪表板,我们需要用它来产生一个连续性的故事,那么这个时候我们该怎么办呢?例如说总分形式,我们需要一个…...

金仓数据库安装
一、麒麟操作系统安装金仓数据库 操作系统 DISTRIB_IDKylin DISTRIB_RELEASEV10 DISTRIB_CODENAMEjuniper 按照安装文档的步骤安装,记得记住设置的数据库的用户名、密码 二、window安装连接数据库的工具软件 三、jdbc连接数据库 (1)连接工…...

深入浅出Webpack2-快速掌握webpack基本配置
深入浅出Webpack2-快速掌握webpack基本配置1.Entry1.1 context1.2 Entry类型2.Output2.1 filename2.2 path3.Module3.1配置Loader4.Resolve4.1 alias4.2 extensions4.3 modules5.Plugin6.DevServer7.其他配置项上一篇文章我们快速上手认识了一下webpack,今天这篇文章…...

如何使评论具有可操作性?取悦客户的指南
永远不要低估承认的力量。 当品牌与客户互动时,认可会带来更好的关系和更好的沟通。与买家和客户建立更多的个人联系意味着品牌需要证明他们支持他们的产品和客户。评论是利用客户分享他们的故事的那些时刻的绝佳机会。 为什么评论在 SaaS 中至关重要 在 B2B 软件的…...

一文带你彻底搞懂Nginx反向代理
一文带你彻底搞懂Nginx反向代理一、什么是反向代理1.1 正向代理1.2 反向代理1.3 总结二、配置反向代理2.1 准备 Tomcat2.2 配置 Nginx一、什么是反向代理 1.1 正向代理 举一个通俗的例子,因为众所周知的原因,我们无法访问谷歌,但是因为某些…...

手写SpringBoot的starter
自定义SpringBoot的starter 引言 starter命名格式: 官方的 starter 的命名格式为 spring-boot-starter-{xxxx} 比如spring-boot-starter-activemq 第三方我们自己的命名格式为 {xxxx}-spring-boot-starter。比如mybatis-spring-boot-starter。 如果我们忽略这种约定…...

pytorch1.2.0+python3.6
一、说明 pytorch1.2.0python3.6CUDA10.0cudnn7.4.1.5 二、步骤 在conda中创建一个新的虚拟环境 查看一下自己的所有环境 激活虚拟环境 conda activate torch1.2.0 关于cuda和cudnn 1、查看自己电脑系统是10.2版本 http://链接:https://pan.baidu.com/s/1v5cN6…...

WindowsPowerShell 停止、启动、暂停和重启服务、卸载服务
PowerShell 停止、启动、暂停和重启服务、卸载服务 PowerShell 停止、启动、暂停和重启服务 官文 powershell卸载服务 官文 目录PowerShell 停止、启动、暂停和重启服务、卸载服务停止、启动、暂停和重启停止服务启动服务暂停服务重启服务卸载移除服务停止、启动、暂停、重启…...

数据库专题
请简洁描述 MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别? 默认隔离级别 mysql repeatable-read oracle read-committed 脏读:不可重复读:幻读: CHAR 和 VARCHAR 的区别?…...

浅谈MySQL索引
目录 1.索引的定义 2.索引的原理 3.Hash索引与B Tree索引 4.索引的分类 5.建立索引的注意事项 1.索引的定义 索引是存储引擎用于快速找到数据记录的一种数据结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索…...

安装包UI美化之路-通过nsNiuniuSkin来做Electron程序的打包、发布与升级
nsNiuniuSkin从发布之初,因其简单、简洁、高效,受到了非常多公司的青睐,现在已经越来越多的公司采用我们的这套解决方案来制作安装包了! 从一个安装包UI插件,逐步演化成一套集美观、安全、简洁、自动化为一体的完整的…...

飞鹅打印机怎么样?飞鹅打印机好用吗?飞鹅打印机怎么知道订单是否漏单?
外卖打印机怎么选?飞鹅打印机好用吗?飞鹅智能云打印机产品专注于云打印的解决方案和技术服务提供。2019 年飞鹅已经成为国内先进的云打印服务提供商,主要是服务美团、饿了么客户,产品主要优势:自动接单、自动打印,无需…...

网络协议(八):传输层-TCP(三次握手、四次挥手原理)
网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络分类、ISP、上网方式、公网私网、NAT 网络…...

最新OpenMVG编译安装与逐命令运行增量式和全局式SfM教程
openmvg是一个轻便的可以逐步运行的SfM开源库,它同时实现了增量式和全局式两种算法。 说明文档地址:https://openmvg.readthedocs.io/en/latest/ github主页地址:https://github.com/openMVG/openMVG 1 编译安装 openmvg的安装比较简单&…...

数据结构与算法系列之插入排序
💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 什么是插入排序 有一个已经有序的数据序列,要求在这个已经排好的数…...

Text to image论文精读ALR-GAN:文本到图像合成的自适应布局优化
ALR-GAN是北京工业大学学者提出的一种自适应布局优化生成对抗网络,其可以在没有任何辅助信息的情况下自适应地优化合成图像的布局。 文章发表于2023年,IEEE Transactions on Multimedia(TMM)期刊(CCF B,JCR…...

windows版 redis在同一局域网下互联
项目场景: 同一局域网下各个主机互相连接同一个redis 问题描述 无法连接 原因分析: 没有放行对方的地址 解决方案: 修改配置文件 最重要的一步如下 然后把 redis.windows.conf的文件也照上面的修改一下保持一致 然后安装一下redis服务这…...