neo4j图形数据库

news2024/12/26 21:00:20

目录

  • 1. neo4j简介
    • 1.1 什么是图形数据库
    • 1.2 什么是neo4j
    • 1.3 neo4j的特性
    • 1.4neo4j的优点
    • 1.5 neo4j的构建元素
  • 2. 安装部署
    • 2.1 环境说明
    • 2.2 下载安装包
    • 2.3 解压安装包
    • 2.4 配置安装jdk环境
    • 2.5 配置neoj4全局变量
    • 2.6 修改neo4j配置文件
    • 2.7 服务基本操作
    • 2.8 测试访问
  • 3. 使用DBeaver连接neo4j
  • 4. neo4j图形数据库基本操作
    • 4.1 增加节点
    • 4.2 查询
    • 4.3 增加关系
    • 4.4 修改
    • 4.5 删除

1. neo4j简介

1.1 什么是图形数据库

图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是以图论(它以图为研究对象图论中的图是由若干给定的点及连接两点的线所构成的图形)为基础的, 图数据库主要用于存储更多的连接数据。

1.2 什么是neo4j

Neo4j是一个开源的NoSQL图形数据库,2003 年开始开发,使用 scala和java 语言,2007年开始发布。

• 是世界上最先进的图数据库之一,提供原生的图数据存储,检索和处理;
• 采用属性图模型(Property graph model),极大的完善和丰富图数据模型;
• 专属查询语言 Cypher,直观,高效;

1.3 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应用程序

1.4neo4j的优点

• 它很容易表示连接的数据
• 检索/遍历/导航更多的连接数据是非常容易和快速的
• 它非常容易地表示半结构化数据
• Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
• 使用简单而强大的数据模型
• 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引

1.5 neo4j的构建元素

neo4j图数据库主要有以下构建元素:

节点、属性、关系、标签、数据浏览器
节点
节点(Node)是图数据库中的一个基本元素,用来表示一个实体记录,就像关系数据库中的一条记录一 样。在Neo4j中节点可以包含多个属性(Property)和多个标签(Label)。

• 节点是主要的数据元素
• 节点通过关系连接到其他节点
• 节点可以具有一个或多个属性(即,存储为键/值对的属性)
• 节点有一个或多个标签,用于描述其在图表中的作用

属性
属性(Property)是用于描述图节点和关系的键值对。其中Key是一个字符串,值可以通过使用任何
Neo4j数据类型来表示
• 属性是命名值,其中名称(或键)是字符串
• 属性可以被索引和约束
• 可以从多个属性创建复合索引

关系
关系(Relationship)同样是图数据库的基本元素。当数据库中已经存在节点后,需要将节点连接起来
基于方向性,Neo4j关系被分为两种主要类型:
• 单向关系
• 双向关系

标签
标签(Label)将一个公共名称与一组节点或关系相关联, 节点或关系可以包含一个或多个标签。 我们 可以为现有节点或关系创建新标签, 我们可以从现有节点或关系中删除标签。
• 标签用于将节点分组
• 一个节点可以具有多个标签
• 对标签进行索引以加速在图中查找节点
• 本机标签索引针对速度进行了优化

Neo4j Browser
一旦我们安装Neo4j,我们就可以访问Neo4j数据浏览器

2. 安装部署

2.1 环境说明

系统版本:
[root@localhost bin]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)

软件版本:
neo4j-community-3.5.28-unix.tar.gz

2.2 下载安装包

[root@localhost src]# curl -O http://dist.neo4j.org/neo4j-community-3.5.28-unix.tar.gz
[root@localhost src]# ls
debug  kernels  neo4j-community-3.5.28-unix.tar.gz

2.3 解压安装包

[root@localhost src]# tar xf neo4j-community-3.5.28-unix.tar.gz -C /usr/local/

2.4 配置安装jdk环境

下载或者用xftp上传jdk安装包:
[root@localhost src]# ls
debug  jdk-8u131-linux-x64.tar.gz  kernels  neo4j-community-3.5.28-unix.tar.gz

解压
[root@localhost src]# tar xf jdk-8u131-linux-x64.tar.gz -C /usr/local/
[root@localhost src]# cd /usr/local/
[root@localhost local]# ls
bin  etc  games  include  jdk1.8.0_131  lib  lib64  libexec  neo4j-community-3.5.28  sbin  share  src

[root@localhost local]# mv jdk1.8.0_131/ java
[root@localhost local]# vim /etc/profile
末尾添加
#JAVA_HOME
export JAVA_HOME=/usr/local/java
#JRE_HOME
export JRE_HOME=/usr/local/java/jre
#CALSSPATH
export CLASSPATH=$CLASSPATH:${JAVA_HOME}/lib:${JRE_HOME}/lib
#PATH
export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin

重新加载配置文件,查看java版本
[root@localhost local]# source /etc/profile
[root@localhost local]# java -version
java version "1.8.0_131"

2.5 配置neoj4全局变量

[root@localhost src]# vim /etc/profile
末尾添加
export NEO4J_HOME=/usr/local/neo4j-community-3.5.28
export PATH=$PATH:$NEO4J_HOME/bin
[root@localhost src]# source /etc/profile
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java/jre/bin:/usr/local/java/bin:/usr/local/java/jre/bin:/usr/local/java/bin:/usr/local/java/jre/bin:/usr/local/neo4j-community-3.5.28/bin

2.6 修改neo4j配置文件

[root@localhost src]# cd /usr/local/neo4j-community-3.5.28/conf/
[root@localhost conf]# vim neo4j.conf
修改相应配置如下

修改22行,在前面加个#,可以任意路径读取文件
22 #dbms.directories.import=import

修改35行和36行,设置jvm初始堆内存和jvm最大堆内存
生产环境给的jvm最大内存越大越好,但是要小于机器的物理内存
35 dbms.memory.heap.initial_size=512m
36 dbms.memory.heap.max_size=512m

修改46行,可以认为这个是缓存,如果机器配置高,这个越大越好
46 dbms.memory.pagecache.size=10g

修改54行,去掉#,可以远程通过ip访问neo4j数据库
54 dbms.connectors.default_listen_address=0.0.0.0

默认 bolt端口是7687,http端口是7474,https关口是7473,不修改下面3项也可以
修改71行,去掉#,设置http端口为7687,端口可以自定义,只要不和其他端口冲突就行
71 #dbms.connector.bolt.listen_address=:7687
75 #dbms.connector.http.listen_address=:7474
79 #dbms.connector.https.listen_address=:7473

修改227行,去掉#,允许从远程url来load csv
245 dbms.security.allow_csv_import_from_file_urls=true

修改254行,设置neo4j可读可写
265 dbms.read_only=false

2.7 服务基本操作

启动:
[root@localhost ~]# neo4j start

查看运行状态
[root@localhost ~]# neo4j status

服务停止
[root@localhost ~]# neo4j stop

服务重启
[root@localhost ~]# neo4j restart

2.8 测试访问

浏览器访问:
192.168.5.56:7474/browser/

初始用户名和密码为neo4j
在这里插入图片描述
登录之后会提醒你更改密码
在这里插入图片描述
在这里插入图片描述

3. 使用DBeaver连接neo4j

输入ip、用户名、密码
在这里插入图片描述
测试连接成功
在这里插入图片描述

4. neo4j图形数据库基本操作

首先我们打开Neo4j的浏览器控制台(http://xxx.xxx.xxx.xxx:7474/browser),用户名是neo4j,默认密码也是 neo4j,如果你已经了密码,那么,就输入你修改的密码即可。登陆进去我们会看到如下的界面的。

4.1 增加节点

Neo4j使用的是create 命令进行增加,就类似与MySQL中的insert。

创建一个学生节点(只有节点没有属性)
create (s:Student)

在这里插入图片描述
这说明我们已经创建完了学生节点

语法格式:
create (<node-name>:<label-name>)

•	node-name:它是我们要创建的节点名称
•	label-name:它是我们要创建的标签名称

创建一个学生节点(创建具有属性的节点)

创建一个id10000,名字张三,年龄为18岁,性别为男的学生节点
create (s:Student{id:10000, name:"张三",age:18,sex:1})

执行后,会看到如下的结果:
在这里插入图片描述
这说明我们创建了一个具有id,name,age,sex四个属性的节点。

不难理解,id、name、age、sex,就类似我们MySQL中 表中的字段一样。

创建带属性的节点语法如下:

create (<node-name>:<label-name> {
    <property1-name>:<property1-Value>,
    <property2-name>:<property2-Value>,
    ...,
    <property3-name>:<property3-Value>
})

property1-name就是属性名称,property1-Value就是属性值。

4.2 查询

我们在上一步创建了没有属性的节点和有属性的节点,那么问题来了,我们怎么查看呢?查询咯~

Neo4j使用的是match … return … 命令进行查询,就类似与MySQL中的select。
我们查询刚刚创建的节点信息。

查询全部学生
match (s:Student) return s

在这里插入图片描述
两个节点是以图的形式展示,我们也可以切换左边的Graph(图)、Table(表格)、Text(文本)等来以不同的形式展示。

查询全部或者部分字段

只需要把要展示的字段以节点名 + 点号 + 属性字段 拼接即可,如下:
match (s:Student) return s.id,s.name,s.age,s.sex

在这里插入图片描述

查询满足年龄age等于18的学生信息
match (s:Student) where s.age=18 return s.id,s.name,s.age,s.sex

在这里插入图片描述

查询出所有的男生(sex=1)并按年龄倒叙排序
match (s:Student) where s.sex=1 return s.id,s.name,s.age,s.sex order by s.age desc

在这里插入图片描述
查询出名字不为null,且按性别分组

这里要注意一点,CQL中的分组和SQL是有所差异的,在CQL中不用显式的写group by分组字段,由解释器自动决定:即未加聚合函数的字段自动决定为分组字段。

match (s:Student) where s.name is not null return s.sex,count(*)

在这里插入图片描述
union联合查询(查询性别为男或者女的,且年龄为19岁的学生)

match (s:Student) where s.sex=1 and s.age=19 return s.id,s.name,s.sex,s.age
union 
match (s:Student) where s.sex=0 and s.age=19 return s.id,s.name,s.sex,s.age

在这里插入图片描述

4.3 增加关系

东和深圳创建关系,深圳是属于广东省的。但是并没有广东省份节点和深圳市节点,没错,我们就是为两个不存在的节点创建关系。

create (c:City{id:30000,name:"深圳市"})-[belongto:BelongTo{type:"属于"}]->(p:Province{id:40000,name:"广东省"})

在这里插入图片描述

match (c:City{id:30000,name:"深圳市"})-[belongto:BelongTo{type:"属于"}]->(p:Province{id:40000,name:"广东省"}) return c,belongto,p

在这里插入图片描述
为两个不存在的节点创建关系的语法如下:

create (<node1-name>:<label1-name>
    {<property1-name>:<property1-Value>,
    <property1-name>:<property1-Value>})-
[(<relationship-name>:<relationship-label-name>{<property-name>:<property-Value>})]
->(<node2-name>:<label2-name>
    {<property1-name>:<property1-Value>,
<property1-name>:<property1-Value>})

4.4 修改

现在将张三的年龄从18岁修改到59岁
match (s:Student) where s.name="张三" set s.age=19 return s

在这里插入图片描述

4.5 删除

这里以删除学生节点中没有属性的来举例:
先查询下学生中没有属性的节点

match (s:Student) where s.name is null return s

在这里插入图片描述

删除这个节点
match (s:Student) where s.name is null delete s

在这里插入图片描述

删除带关系的节点
match (c:City{id:30000,name:"深圳市"})-[belongto]->(p:Province{id:40000,name:"广东省"}) delete c,belongto,p

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上门洗车小程序软件开发所需要的功能有哪些呢?

相信很多企业及投资者都想开发一款属于自己的小程序系统。那么一款专业好用的上门洗车小程序软件开发所需要的功能有哪些呢&#xff1f; 1. 用户注册与登录。 用户可以通过手机号码或微信账号进行注册和登录。注册后可以查看历史订单、评价技师、参加活动等。 …

浅析EasyCVR视频能力在自然灾害风险预警场景中的应用意义

一、方案背景 我国是自然灾害多发的国家&#xff0c;夏季也是灾害多发季节&#xff0c;山洪、泥石流、洪涝、冰雹、飓风、地震等自然灾害每年都给国家经济带来巨大的损失。建设自然灾害风险预警视频监控系统&#xff0c;实现对自然灾害的可视化预警监测和监管&#xff0c;并提…

分布式事务的21种武器 - 2

在分布式系统中&#xff0c;事务的处理分布在不同组件、服务中&#xff0c;因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式&#xff0c;并分析其实现原理和优缺点&#xff0c;在面对具体分布式事务问题时&#xff0c;可以选择合适的模式…

【业务架构】业务驱动的推荐系统相关技术总结

什么是推荐系统 推荐系统是一种基于用户历史行为和属性信息为用户推荐个性化内容的技术。而业务驱动的推荐系统&#xff0c;是指根据业务需求&#xff0c;将推荐系统集成进业务流程中&#xff0c;通过推荐系统提高业务效率、提升用户体验等目的。以下是一些相关实现技术。 用户…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(一)

今天开始使用 vue3 ts 搭建一个项目管理的后台&#xff0c;因为文章会将项目的每一个地方代码的书写都会讲解到&#xff0c;所以本项目会分成好几篇文章进行讲解&#xff0c;我会在最后一篇文章中会将项目代码开源到我的GithHub上&#xff0c;大家可以自行去进行下载运行&…

C语言隐藏自己源码成lib静态库的和使用lib静态库的方法

首先从头开始创建一个新项目&#xff1a; 这个sub.c内的文件内容很简单&#xff0c;就写一个减法函数 // 定义一个减法函数&#xff0c;传入两个整数&#xff0c;返回差 int sub(int x, int y) { return x - y; } // 定义一个减法函数&#xff0c;传入两个整数&#xff0…

7. 数据库MySQL

本文介绍了数据库mysql的安装配置过程&#xff0c;以及通过VsCode调用数据库实现一些功能 一、安装 如果之前安装过&#xff0c;或者安装失败。清除MySQL缓存并重新安装&#xff1a;运行以下命令以清除所有MySQL缓存文件&#xff0c;并重新安装它们 sudo apt-get remove --pu…

JAVA基础(各种类)

Object类 1、Object类中有许多方法是用native修饰的&#xff0c;这些方法是本地方法&#xff0c;用C语言实现。 2、Object类的一些方法&#xff1a; clone()方法&#xff1a;需要继承Clonable接口&#xff0c;并覆写clone()&#xff0c;修改为public权限&#xff0c;原来为p…

Halcon中从两组点的对应关系生成仿射矩阵,及思考原理和代码实现

有几个算子有点类似&#xff0c;看了下区别 1.vector_to_rigid( : : Px, Py, Qx, Qy : HomMat2D) 2.vector_to_similarity( : : Px, Py, Qx, Qy : HomMat2D) 3.vector_to_aniso( : : Px, Py, Qx, Qy : HomMat2D) vector_to_rigid 这个是刚性变换&#xff0c; 只有旋转和平移…

参考企业微信日程 通过vue+elementUi编写一个按月统计会议的日程计划组件

这个组件的话 需要三个第三方依赖 npm install --save chinese-lunar-calendar sass sass-loader element-uisass因为我这里 还是习惯写sass样式 毕竟真的方便啊 chinese-lunar-calendar 是一款将日期转为农历的工具 element-ui主要是表格真的方便 在 项目src下的main.js入口…

如何学好人工智能?

“在主流的视频直播教学之外&#xff0c;直接与老师在课件上互动能够更快地让我进入学习状态。” 大家的时间都很宝贵&#xff0c;当我们好不容易下定决心要学习一门新知识时&#xff0c;各种影响学习的噪声会在本不富裕的耐心上大打折扣&#xff0c;万事开头难变成了真理。特别…

[技术分享]Android平台实时音视频录像模块设计之道

实现背景 录像有什么难的&#xff1f;无非就是数据过来&#xff0c;编码保存mp4而已&#xff0c;这可能是好多开发者在做录像模块的时候的思考输出。是的&#xff0c;确实不难&#xff0c;但是做好&#xff0c;或者和其他模块有非常好的逻辑配合&#xff0c;确实不容易。 好多…

考研复试第十六天:合并果子 【哈佛曼树】

前置知识 哈佛曼树&#xff1a;我们先来复习一下啥叫做哈佛曼树 1.背景 我们有下面这样一个字符串需要编码&#xff0c;就是将下面的字符转为二进制。我们采用的方法是前缀编码&#xff0c;用一颗树的叶节点来放字符。 2.前缀编码 编码是咋样的呢&#xff1f;看下面这个例子…

BurpSuite—Project options模块(项目选择)

本文主要BurpSuite—Project options模块(项目选择)介绍的相关内容 关于BurpSuite的安装可以看一下之前这篇文章&#xff1a; http://t.csdn.cn/cavWt 一、简介 Project options主要用来对Project的一些设置。 二、模块说明 Project options主要由五个模块组成: 1.Connect…

Zabbix“专家坐诊”第192期问答汇总

问题一 Q&#xff1a;请问下&#xff0c;客户机snmptrap发告警为啥server web收不到&#xff0c;关键是snmptrap日志已经收到&#xff0c;zabbix server配置以及开启snmptrap1 snmptrapvar log snmptrap snmptrap.log&#xff1f; A&#xff1a;有配置trap的监控项吗&#xff…

Install ELK+Filebeat on Kubernetes Cluster with Helm

目录 Node & Software & Docker Images Lists Prerequisites Install ELK Manually Deploying ElasticSearch Create deployment Expose deployment Deploying Kibana Create deployment Accessing the Kibana UI Deploying Logstash Create ConfigMap and…

快手上市后首次盈利,直播电商业务成造血利器

5月22日盘前&#xff0c;快手业绩还没有发布&#xff0c;股价却先涨为敬&#xff0c;中信证券、彭博、中金公司等多家机构给出超预期业绩的预测。盘后公布的业绩确实超过市场的一致预期&#xff0c;市场在今天也给出正面回应&#xff0c;股价再次上扬&#xff0c;最高点达57.10…

revit窗族的平面出图设置,revit快速创建幕墙

一、revit窗族的平面出图设置 在平面视图中&#xff0c;为了满足出图的需要&#xff0c;我们经常要修改在不同的详细程度的可见性设置。 例如我们的窗在没有进行设置时在粗略/中等/精细的详细程度中都可以看到清晰的窗体构件。那么要使窗在精细程度中才可以看见详细的窗体结构&…

Sentinel如何实现对分布式系统的高可用性和流量控制?我们通过源码一起学习

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将详细介绍Sentinel源码实现对分布式系统高可用性和流量控制&#xff0c;后续文章将详细介绍Sentinel的其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教…

蓝桥杯单片机DS18b20单总线测温模块常见问题解决

蓝桥杯单片机DS18b20单总线测温模块常见问题解决 有道是&#xff1a;“溪水声声留我住&#xff0c;梅花朵朵唤人回” DS18b20测温模块作为一个比较简单、稳定的蓝桥杯单片机外设模块&#xff0c; 使用时却经常出现各种问题&#xff0c;总是让我们不禁三番多次回顾其基础知识…