文章目录

  • 一、Neo4j介绍
  • 1.Neo4j简介
  • 2.图数据库简介
  • 3.Neo4j的优缺点
  • 4.Neo4j的常见应用场景
  • 二、使用教程
  • 1.下载安装
  • 2.数据插入和查询
  • (1)基本概念
  • (2)基本语法
  • Ⅰ.CREATE操作——创建
  • Ⅱ.MERGE——创建或更新
  • Ⅲ.Match操作——查找指定的图数据
  • Ⅳ.DELETE操作——删除节点
  • 3.JAVA实战

一、Neo4j介绍

1.Neo4j简介

Neo4j是一个高性能的,NOSQL图形数据库。它是一个嵌入式的、高性能(基于磁盘的)、具备完全的事务特性的Java持久化引擎,该引擎具有成熟数据库的所有特性,它在图(网络)中而不是表中存储数据。

2.图数据库简介

(1)特点:它的数据模型主要是以节点和关系(边)来体现,也可处理键值对。它的优点是快速解决复杂的关系问题。

(2)特征:
①包含节点和边;
②节点上有属性(键值对);
③边有名字和方向,并总是有一个开始节点和一个结束节点;
④边也可以有属性。

如下图的反洗钱模型:

(3)图计算
基本的数据结构表达就是:
G=(V, E)
V=vertex(节点)
E=edge(边)

3.Neo4j的优缺点

(1)优点
①底层数据存储专门针对图形数据的特点进行了优化,在处理关系数据方面比其他数据库有更高的性能。
②专门为关系数据设计的查询语言更便于关系数据的操作。
③没有表结构的概念,它比SQL更灵活。
④自动为数据建立合适的索引(根据数据的标签),避免索引管理的麻烦。
⑤支持高可用主从集群部署。
⑥借助图形平台等辅助工具帮助开发人员快速构建完整的关系数据平台。
(2)neo4j的缺点
①图数据结构导致写入性能差。
②只支持java和基于jvm的语言,社区版不能使用集群。
③社区不够活跃,资料不丰富。
(3)为什么选用Neo4j
Neo4j发布时间早,产品较为成熟稳定,目前是市场使用率最高的图数据库,文档和各种技术博客较多

4.Neo4j的常见应用场景

(1)金融行业的反洗钱模型
(2)社交网络图谱
(3)企业关系图谱

二、使用教程

1.下载安装

(1)下载
需要jdk环境:Neo4j v4 需使用 jdk11以上版本;v5需要jdk17以上版本。我本地是jdk1.8版本,所以选择v3的版本。
v4、v5下载可以到官网:https://neo4j.com/download-center/,但是官网找不到v3版本。
这里放上v3.5.5版本的资源:链接:https://pan.baidu.com/s/1Wx4MwHRCRKUOXUcUvWctmA 提取码:0g30
(2)配置环境变量
新建用户变量NEO4J_HOME,值为D:\tools\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5
然后在系统变量Path中添加%NEO4J_HOME%\bin
(3)启动
在cmd中运行D:\tools\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\bin>neo4j console
然后进入http://localhost:7474/browser/就可以访问了
然后会提示你输入用户名密码 默认是neo4j/neo4j

2.数据插入和查询

(1)基本概念

Nodes:节点,用于图形数据记录
Relationships:关系,用于连接节点
Properties:属性,用于命名数据值

(2)基本语法

首先我们找到创建图的入口,然后再在最上方运行命令即可

Ⅰ.CREATE操作——创建

①添加节点:
CREATE (n:Person {name:‘小李’, born:1989}) RETURN n;
注:CREATE是创建操作,n代表该节点,相当于一个只在当前语句生效的局部变量,Person是标签,代表节点的类型。花括号{}代表节点的属性。RETURN 代表返回该数据,也可以不return直接插入

批量操作:
CREATE (a:Person {name:‘老张’, born:1990})
CREATE (b:Person {name:‘老王’, born:1995})
CREATE (c:Person {name:‘李华’, born:1993})
CREATE (d:Country {name:‘美国’, des:‘美利坚共和国’})
CREATE (n:Country {name:‘中国’, des:‘中华人民共和国’})

此时我们的图:

②创建关系:
CREATE (a:Person {name:‘小李’, born:1989})-[r:所属国家]->(b:Country {name:‘中国’, des:‘中华人民共和国’}) return a,r,b
在一个Person与Country之间建立一个“所属国家”关系,并且这个关系是有方向的

Ⅱ.MERGE——创建或更新

merge等于是create+match,如果节点中有重复数据,就不会添加进去
①创建节点:
MERGE (n:Person {name:‘小胡’, born:1990})
②创建关系:
MATCH (a:Person {name:‘李华’, born:1993}), (b:Country {name:‘美国’, des:‘美利坚共和国’})
MERGE (a)-[r:所属国家]->(b)

③更新操作:
MERGE (n:Person {name:‘老王’})
ON MATCH SET n.born = 2023
RETURN n

Ⅲ.Match操作——查找指定的图数据

①普通查询:
MATCH (n:Person {born:1990}) RETURN n
指查询一个标签(Label)为Person、born为1990的节点。

②查询所有对外有关系的节点(注意这里箭头的方向)
MATCH (a)–>() RETURN a
③查询所有有关系的节点
MATCH (a)–() RETURN a
④修改操作
MATCH (a:Person {name:‘老王’}) SET a.born=1988 RETURN a
⑤删除属性
MATCH (a:Country {name:‘美国’}) REMOVE a.des RETURN a

Ⅳ.DELETE操作——删除节点

①删除
MATCH (a:Person {name:‘李华’}) DETACH DELETE a
Delete操作会删除节点与关系。
②删除全部:
MATCH (n) DETACH DELETE n

3.JAVA实战

(1)首先引入maven包

  <dependency><groupId>org.neo4j</groupId><artifactId>neo4j</artifactId><!--<version>5.5.0</version>--><version>3.5.5</version></dependency>

(2)使用嵌入式的方式访问Neo4j(还有服务的方式,可以自行了解)

package com.example.user.dal;import org.neo4j.graphdb.*;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;import java.io.File;///neo4j使用--嵌入式
public class neo4jRepository {//创建节点的标签枚举public enum MyLabels implements Label {//城市CITY,//省会CAPITAL;}//创建关系的标签枚举public enum MyRelation implements RelationshipType {//所属BELONG}//全局只创建一个GraphDatabaseService实例GraphDatabaseService graphDb;//创建file 指明我们想要操作的neo4j数据库的数据文件的路径private static final File databaseDirectory = new File("D:\\tools\\neo4j\\neo4j-community-3.5.5-windows\\neo4j-community-3.5.5\\data\\databases\\graph.db");public static void main(String[] args) {neo4jRepository repository = new neo4jRepository();/*repository.createDb();repository.shutDown();*///repository.searchCapital("浙江");repository.searchProvince("郑州");}void createDb() {System.out.println( "打开数据库 ..." );//创建graphDb实例, 参数是我们想要操作的neo4j数据库的数据文件的路径, 以打开一个数据库graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(databaseDirectory);//创建事务try ( Transaction tx = graphDb.beginTx() ) {Node city1 = graphDb.createNode(new CaseLabel(String.valueOf(MyLabels.CITY)));city1.setProperty("name", "浙江");city1.setProperty("abbreviation", "浙");Node city2 = graphDb.createNode(new CaseLabel(String.valueOf(MyLabels.CITY)));city2.setProperty("name", "河南");city2.setProperty("abbreviation", "豫");Node cap1 = graphDb.createNode(new CaseLabel(String.valueOf(MyLabels.CAPITAL)));cap1.setProperty("name", "杭州");Node cap2 = graphDb.createNode(new CaseLabel(String.valueOf(MyLabels.CAPITAL)));cap2.setProperty("name", "郑州");cap1.createRelationshipTo(city1,MyRelation.BELONG);cap2.createRelationshipTo(city2,MyRelation.BELONG);//提交事务tx.success();}}//根据省份查省会void searchCapital(String provinceName) {graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( databaseDirectory );try ( Transaction tx = graphDb.beginTx()){Node startNode = graphDb.findNode(new CaseLabel(String.valueOf(MyLabels.CITY)), "name", provinceName);//Direction介绍:从起始节点来看,它是一个传出关系OUTGOING;从结束节点看是传入关系INCOMING;方向不重要时使用BOTH=OUTGOING+INCOMINGIterable<Relationship> iterable = startNode.getRelationships(MyRelation.BELONG, Direction.INCOMING);for (Relationship r : iterable) {Node node = r.getStartNode();long id = node.getId();String name = (String)node.getProperty("name");System.out.println(id + " " + name+ " ");}tx.success();tx.close();tx.success();}}//根据省会查省份void searchProvince(String capitalName) {graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( databaseDirectory );try ( Transaction tx = graphDb.beginTx()){Node startNode = graphDb.findNode(new CaseLabel(String.valueOf(MyLabels.CAPITAL)), "name", capitalName);//Direction介绍:从起始节点来看,它是一个传出关系OUTGOING;从结束节点看是传入关系INCOMING;方向不重要时使用BOTH=OUTGOING+INCOMINGIterable<Relationship> iterable = startNode.getRelationships(MyRelation.BELONG, Direction.OUTGOING);for (Relationship r : iterable) {//注意这里使用EndNodeNode node = r.getEndNode();long id = node.getId();String name = (String)node.getProperty("name");String abbreviation = (String)node.getProperty("abbreviation");System.out.println(id + " " + name+ " "+abbreviation);}tx.success();tx.close();tx.success();}}void shutDown(){System.out.println( "关闭数据库 ..." );// 关闭数据库graphDb.shutdown();}private static void registerShutdownHook( final GraphDatabaseService graphDb ){// 用来确保数据库正确关闭的 一个回调方法Runtime.getRuntime().addShutdownHook( new Thread(){@Overridepublic void run(){graphDb.shutdown();}} );}
}

(3)测试,这里需要关闭neo4j的cmd窗口。这里三块代码按顺序执行,调用时需要把其他步骤的代码注释掉:
第一步是插入数据,第二步是查省会,第三步是查省份。

         /*repository.createDb();repository.shutDown();*///repository.searchCapital("浙江");repository.searchProvince("郑州");

最后的图大概长这样

Neo4j详细介绍及使用教程相关推荐

  1. android 连接电脑,安卓手机怎么连接电脑详细介绍【图文教程】

    随着科技不断地发展,现在市场上的安卓手机越来越多,但是有些安卓的手机用户们在下载软件,往电脑上传照片视频时还是不会,不知道应该怎么连接到电脑,其实有的时候数据线将电脑与手机连接起来后,手机上的资料并不 ...

  2. 【webots教程】关于webots的超详细介绍

    系列文章 [webots教程]简介与软硬件要求 [webots教程]安装 [webots教程]关于webots的超详细介绍 [webots教程]你在webots搭建的第一个仿真环境 [webots教程 ...

  3. neo4j详细安装教程(附下载地址)

    neo4j详细安装教程(附下载地址) 一.环境介绍 本人下载的neo4j版本是5.5.0,需要配置本地java环境,版本是jdk17,不同的neo4j需要的jdk版本不同,官网有具体说明,大家可以自行 ...

  4. mysql5.17免安装教程_详细介绍MySql5.7.17免安装配置教程的示例代码

    这篇文章给大家详细介绍了MySql 5.7.17免安装配置教程,首先大家需要先下载mysql 5.7.17 的安装包,然后解压,具体配置过程大家通过本文一起学习吧 1.下载mysql-5.7.17-w ...

  5. 【WiFi密码破解详细图文教程】ZOL仅此一份 详细介绍从CDlinux U盘启动到设置扫描破解

    From: http://softbbs.zol.com.cn/1/32_7991.html 每天都能看到有不少网友在回复论坛之前发布的一篇破解WiFi密码的帖子,并伴随各种疑问.今天流云就为大家准备 ...

  6. php cdata,PHPcdata处理(详细介绍)_PHP教程

    PHPcdata处理(详细介绍)_PHP教程 当时在网上找了一个CDATA的转换器, 修改之后, 将CDATA标签给过滤掉.如下 代码如下: // States: // // 'out' // ' / ...

  7. 【WiFi密码破解详细图文教程】ZOL仅此一份 详细介绍从CDlinux U盘启动到设置扫描破解-破解软件论坛-ZOL中关村在线...

    [WiFi密码破解详细图文教程]ZOL仅此一份 详细介绍从CDlinux U盘启动到设置扫描破解-破解软件论坛-ZOL中关村在线 好了,先说下提前要准备的东东吧: 1.U盘一枚,最小1G空间.需进行格 ...

  8. DVWA环境搭建教程-手把手最详细介绍

    DVWA环境搭建教程-手把手最详细介绍 安装phpstudy 安装DVWA 安装环境:win7 安装phpstudy 1.下载安装phpstudy 百度搜索phpstudy,在官网上下载 链接: ht ...

  9. 【MySQL基础教程】DML语句详细介绍

    前言 本文为 [MySQL基础教程]DML语句详细介绍 相关知识,DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增.删.改操作.下 ...

最新文章

  1. 计算机网络工程实用技术考试,计算机网络实用技术期中考试复习题.doc
  2. MYSQL 练习题
  3. 您的数据中心UPS电池开关不能再选错和接错了
  4. 全球与中国零售机器人市场发展模式创新与投资战略规划研究报告2022-2028年
  5. 宝石世界1.0游戏发布
  6. 语言课程设计超市售货_自闭症儿童家庭干预10个语言能力提升小技巧
  7. 设计模式(2)--Singleton(单例模式)--创建型
  8. React学习:双向数据绑定、约束性和非约束性组件-学习笔记
  9. javascript网页自动填表_JavaScript脚本实现网页批量自动勾选及内容填写
  10. stringbuilder寻找字符串位置可能存在多个 java_Java 语言基础amp;String
  11. 与虚拟机连接出现ora-12514错误解决方法
  12. 职场谍战小说《监控》在广州日报连载
  13. android ssl-dl
  14. Confluence 6 重新获得附件指南
  15. Python字符串逆序输出六种方法
  16. 晶体晶振小结(XTAL与TCXO/VCXO/VC-OCXO等)-持续更新
  17. Markdown安装/破解/下载
  18. 爱python,爱学习
  19. 通信类顶级会议及期刊
  20. Yolo学习(框架分析)

热门文章

  1. 【赠书】阿里云天池大赛赛题解析,深度学习篇!
  2. win10为知笔记启动程序无反应
  3. 开脑洞|怎样用区块链来解决996的问题?
  4. 施耐德电气两款产品荣获2019德国红点设计大奖
  5. 黑客常用入侵方式(12种)
  6. 华大单片机、STM32单片机如何做printf串口打印格式化输出
  7. g4600黑苹果efi_黑苹果硬盘引导的两种方式
  8. Shapley Value(****夏普利值,沙普利值****)
  9. 医疗器械图纸管理软件,图文档管理解决方案
  10. linux不需要磁盘碎片整理!