图数据库Neo4j集成springboot及导入数据踩坑问题

文章目录

  • ----------------------------------常用cql------------------------------------
      • 删除所有节点
      • 删除指定节点
      • 删除所有关系
      • 删除指定关系
      • 查看所有节点
      • 查看某种节点
      • 查看总节点数
      • 删除所有关系节点
      • 删除所有关系
  • ------------------------------手动导入数据--------------------------------------
      • 导入节点
      • 导入人-部门关系节点(使用)
  • ------------------------------导入数据方式--------------------------------------
  • -----------------------neo4j集成springboot------------------
      • 版本
      • 依赖 (注意 依赖版本与neo4j版本需要严格对应)
      • 配置
  • --------------------------踩坑----------------------

----------------------------------常用cql------------------------------------

删除所有节点

match(n) detach delete n

删除指定节点

match(n:sary) detach delete n

删除所有关系

match ()-[r]-() delete r

删除指定关系

match ()-[r:ZJ]-() delete r

查看所有节点

match(n) return n

查看某种节点

MATCH (n:sary) RETURN n LIMIT 25

查看总节点数

match(n) return count(n)

删除所有关系节点

match(n:RaRelationship) detach delete n

删除所有关系

match ()-[r]-() delete r

------------------------------手动导入数据--------------------------------------

导入节点
导入之前 需要给csv文件加上表头,且表头每个字段之间不能有空格

导入节点

#人员person
LOAD CSV WITH HEADERS FROM ‘file:///person.csv’ as row
MERGE (person:person {personsfzh:row.personsfzh}) on create set
person.personxm=row.personxm,person.personsjh=row.personsjh

#部门dept
LOAD CSV WITH HEADERS FROM ‘file:///dept.csv’ as row
MERGE (dept:dept {ajbh:row.ajbh}) on create set
dept.ajmc=row.ajmc,dept.jyaq=row.jyaq,dept.dplx=row.dplx,dept.lasj=row.lasj

导入关系

导入人-部门关系节点(使用)

#先清空
match(n:RaRelationship) detach delete n
#再导入
LOAD CSV WITH HEADERS FROM ‘file:///ra_relationship.csv’ as row
match (from:person {personsfzh: row.personsfzh})
match (to:dept {ajbh: row.ajbh})
create (relationship:RaRelationship)
set relationship.personjs=row.personjs,relationship.personzt=row.personzt,relationship.type=row.type
merge(from)<-[:PERSON]-(relationship)
merge(relationship)-[:DEPT]->(to)

#导入人-部门关系(目前不使用)
LOAD CSV WITH HEADERS FROM ‘file:///RA_relatitionship.csv’ as row
MATCH (person:person {personsfzh: row.personsfzh})
MATCH (dept:dept {ajbh: row.ajbh})
MERGE (person)-[:RaRelationship]->(dept)

#注意
关系与关系节点是不一样的,关系就是直接两个点之间的一条线,关系节点实际上是节点,只不过他有startNode和endNode,可以连接2个指定实体节点,所以也可以看作是一种关系

------------------------------导入数据方式--------------------------------------

1.Java内部使用api导入

2.使用csv文件 通过命令 load csv xxxxxx, 如上面

3.使用neo4j-admin在服务器内导入 (查到的部分资料表示:这种方式导入数据需要清空库,不能增量,只能全量导入)

4.使用第三方工具如apoc

-----------------------neo4j集成springboot------------------

版本

4.4

依赖 (注意 依赖版本与neo4j版本需要严格对应)

	<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId><version>2.3.5.RELEASE</version></dependency><dependency><groupId>org.neo4j</groupId><artifactId>neo4j-ogm-core</artifactId><version>3.2.41</version></dependency>

配置

spring:neo4j:uri: bolt://127.0.0.1:7687authentication:username: neo4jpassword: neo4jlogging:level:org.neo4j.ogm.drivers.bolt.request.BoltRequest: DEBUGorg.neo4j.driver: INFO

--------------------------踩坑----------------------

  1. neo4j版本和集成springboot的依赖版本需要严格对应,跟jdk版本也要对应,4版本的至少要jdk13

  2. 网上查到的资料大部分都是用neo4j3.5版本的,如果使用的是4或5版本,有很多都是过时的

  3. 使用load csv导入数据,对数量有要求,大概超过2w行的,会报内存不足,这时候需要改用其他方式了,官网说可以使用批量提交,但是试了下,发现会报隐式事务问题,4.4版本需要安装apoc才行。

  4. 考虑到数据源是在mysql那边,且需要同步更新,全量计算,最后选择使用在java内建定时任务去同步、更新数据。

  5. 如果使用java里面的api导入数据,save和saveAll效率都会比较慢,但是也不能直接使用多线程、并发,会报死锁之类的报错。
    查到的资料是说neo4j的api都是线程安全的,所以不能使用多线程导入数据之类的 没太看懂

解决办法:
4.1 先修改配置文件,开启多线程 dbms.threads.worker_count=12, 大小参照服务器核数(这个是4.4的配置,其他版本的配置不一样)
4.2 java内,使用并发流parallelStream()来save数据,但是这里有个问题,也会偶尔出现死锁之类的报错,但是比较少(还没找到原因)
4.3 最后选择加入信号量semaphore来控制,这样基本不会出现死锁之类的问题了,(好像还是会有 但很少了 基本没出现过)

			  dataList.parallelStream().forEach(item -> {try {semaphore.acquire();rARelationshipRepository.save(item);} catch (InterruptedException e) {e.printStackTrace();} finally {semaphore.release();}});

4.4 由于还是有概率出现报错,最后选择try-catch,然后在catch模块使用分批导入,这样慢但是安全
for (List datas : ListUtil.split(dataList, 1000)) {
rARelationshipRepository.saveAll(datas)
}
这块没太多去研究neo4j并发导入数据,做得不是很好,勉强能用。

  1. 需要注意上面引生的问题,如果使用了xxljob之类的定时任务中间件,如果出现neo4j并发问题、死锁之类的,会直接阻塞住,导致任务一直卡住,所以任务中一定要防止并发问题

  2. 对于如何高效率导入数据到neo4j,网上大多还是建议使用apoc插件,在java内部导入还是太麻烦了,并且apoc可以直接从mysql更新到neo4j中,但是这块就没去研究了。

–第一次使用,时间赶还有很多地方都不清楚,一步一坑,有错误的地方还望指出。

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

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

相关文章

android开发---简单购物商城(JAVA) (一)

包括&#xff1a;商品展示&#xff0c;商品详情&#xff0c;购物车&#xff0c;删除&#xff0c;一键清除&#xff0c;返回 运用sqllist 另外因为一篇写不下 继续可看 源码二 下面是目录 运行样子 下面是源码 AndroidManifest.xml <?xml version"1.0" e…

代码随想录算法训练营29期Day37|LeetCode 738,968

文档讲解&#xff1a;单调递增的数字 监控二叉树 贪心算法总结 738.单调递增的数字 题目链接&#xff1a;https://leetcode.cn/problems/monotone-increasing-digits/description/ 思路&#xff1a; 题目要求小于等于N的最大单调递增的整数&#xff0c;那么拿一个两位的数字…

Android 8.1 铃声音量通话音量同步调节

Android 8.1 铃声音量通话音量同步调节 最近收到客户反馈&#xff0c;想要实现铃声音量通话音量同步调节&#xff0c;具体修改参照如下&#xff1a; /frameworks/base/core/java/android/preference/SeekBarVolumizer.java if (defaultUri null) {if (mStreamType AudioMan…

统计图表在线配置服务-百度 SugarBI的学习笔记

最近&#xff0c;有个产品要支持统计图表在线可配置&#xff0c;这样&#xff0c;当用户有新增统计指标的需求时&#xff0c;运维人员通过界面化配置&#xff0c;就可以增加统计指标了&#xff0c;不用开发写代码&#xff0c;画页面了。 上网查了下相关的组件&#xff0c;感觉…

SG2520CAA汽车用晶体振荡器

爱普生SG2520CAA是简单的封装晶体振荡器&#xff08;SPXO&#xff09;&#xff0c;具有CMOS输出&#xff0c;这款SPXO是汽车和高可靠性应用的理想选择&#xff0c;符合AEC-Q200标准&#xff0c;功耗低&#xff0c;工作电压范围为1.8 V ~ 3.3 V类型&#xff0c;宽工作温度-40℃~…

VPP学习-startup.conf配置文件

背景 VPP&#xff08;Vector Packet Processing&#xff0c;矢量报文处理&#xff09;&#xff0c;作为一个开源的高性能数据包处理框架&#xff0c;旨在提供可扩展、灵活且高效的网络数据包处理能力&#xff1b;由于传统Linux 内核协议栈整体网络吞吐性能的局限性&#xff0c;…

PyTorch和TensorFlow的简介

一、PyTorch和TensorFlow的简介 1.1 Pytorch PyTorch是由Facebook开发的一个开源深度学习框架&#xff0c;它提供了一个动态计算图模型&#xff0c;可以在GPU上运行。它于2017年首次发布。PyTorch提供了一个灵活、动态的计算图&#xff0c;使得深度学习模型的构建和调试更加直…

【Linux】环境基础开发工具的使用之gcc详解(二)

前言&#xff1a;上一篇文章中我们讲解了Linux下的vim和yum的工具的使用&#xff0c;今天我们将在上一次的基础上进一步的讲解开放工具的时候。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的深度刨析 &#x1f448; &#x1f4a…

小程序配置服务器域名:步骤与注意事项

随着移动互联网的普及&#xff0c;小程序已成为许多企业和开发者的首选应用形式。为了确保小程序的正常运行和最佳用户体验&#xff0c;服务器域名的配置至关重要。本文将详细介绍小程序配置服务器域名的步骤及注意事项。 一、为什么要配置服务器域名&#xff1f; 小程序运行…

ESU毅速丨为什么增材制造广受关注?

随着科技的飞速发展&#xff0c;增材制造3D打印技术逐渐成为制造业的新宠。包括航空航天、汽车、家电、电子等各行业都在积极拥抱3D打印&#xff0c;为什么3D打印能引起制造业广泛关注与应用&#xff1f;它的主要优势有哪些&#xff1f; 首先&#xff0c;3D打印减少浪费。3D打印…

【Linux】 Linux编译器-gcc/g++使用

&#x1f497;个人主页&#x1f497; ⭐个人专栏——Linux学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读1. Linux编译器-gcc/g使用1.1 引入1.2 初识gcc/g1.3 程序运行的四个阶段1.3.1 预处理1.3.2 编译1.3.3 汇编1.3.4 链接 1.…

【2024.2.1练习】岛屿个数(15分)

题目描述 题目思路 题目乍一看类似于“水坑个数问题”&#xff0c;是对陆地块进行DFS,上下左右4个方向分别对应了四种状态转移&#xff0c;每块陆地进行搜索后变成海洋&#xff0c;最终搜索次数就是岛屿个数。 但在子岛屿存在的情况下&#xff0c;需要先对海洋块进行DFS,由于…

binder android

文心一言的回答 Binder驱动是Android操作系统中用于进程间通信&#xff08;IPC&#xff09;的机制。它提供了一种高效、跨进程的数据传输方式&#xff0c;使得应用程序的不同组件可以在Android系统上互相通信。 Binder驱动基于Linux内核&#xff0c;其核心组件是一个称为Bind…

基于最新koa的Node.js后端API架构与MVC模式

Koa 是一个由 Express 原班人马打造的现代 Web 框架&#xff0c;用于 Node.js。它旨在提供一个更小、更富有表现力和更强大的基础&#xff0c;用于 Web 应用和 API 开发。Koa 不捆绑任何中间件&#xff0c;它提供了一个优雅的方法以组合不同的中间件来处理请求和响应。 Koa 的核…

TypeScript中的泛型

前言 TypeScript想必大家也很熟了&#xff0c;今天主要介绍一下TS中的泛型&#xff0c;泛型也是一种强大的工具&#xff0c;它是可以在定义函数、类和接口时使用参数化类型&#xff0c;使得这些实体可以适用于多种数据类型而不失类型安全性。泛型的引入让开发者能够编写更加灵…

2024年哪款便签软件是手机电脑同步的?

在繁忙的生活、工作和学习中&#xff0c;我们时常面临各种琐事和任务&#xff0c;需要随时记录、提醒&#xff0c;以保持高效的生活节奏。比如&#xff0c;突然想到的灵感、重要的工作计划、紧急的购物清单&#xff0c;都需要一个便利的便签工具来随手记录。特别是在多终端使用…

vue2 el-form 两个时间框(第一个时间框是只能选择当前时间,之前的是不允许选择,第二个时间框是第一个时间的当前的时间后30天后可以选择的)

<template><div id"app"><el-form :model"form"><el-form-item label"预签时间"><el-date-picker v-model"form.t2" type"date" placeholder"选择预签时间" changepreSigning/><…

RT-DETR算法优化改进:上采样算子 | 超轻量高效动态上采样DySample,效果秒杀CAFFE,助力小目标检测

💡💡💡本文独家改进:一种超轻量高效动态上采样DySample, 具有更少的参数、FLOPs,效果秒杀CAFFE和YOLOv8网络中的nn.Upsample 💡💡💡在多个数据集下验证能够涨点,尤其在小目标检测领域涨点显著。 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/…

HTTP传输文件和FTP传输文件的相关简介

服务器数据安全一直以来是网络工作中的重中之重&#xff0c;服务器文件传输方式也是需要重视的一方面。而服务器传输文件的方式有很多&#xff0c;比如HTTP传输、FTP传输、BT传输、SFTP传输等等。今天就简单来介绍下HTTP传输文件和FTP传输文件的相关特点。 HTTP传输是一种常见…

C++ 音视频流媒体浅谈

C流媒体开发 今天就浅浅聊一下C流媒体开发 流媒体开发中最常见的是FFmpeg&#xff08;编解码器&#xff09; 业务逻辑主要是播放器了&#xff08;如腾旭视频 爱奇艺等等&#xff09; FFmpeg是一个开源的音视频处理工具集&#xff0c;可以用于处理、转换和流媒体传输音视频…