Neo4j图数据库实现节点批量删除

1 前言

 1-1 简介

        由于对图数据库需要经常维护,图数据库建设初期,需要经常对数据写入删除等操作。

1-2 任务背景

        再将1100万数据写入Neo4j后,由于需要对每个实体的label做精细化处理,之前写入的时候每个实体的label全部都为‘Common_test’,但是由于实体中是存在标签的,所以再后来的维护中需要将图数据库中的节点全部删除,重新写入。

1-3 图数据库来源

        之前部署在服务器中的Neo4j图数据库。

2 任务实现

        在删除图数据库节点时,有以下两种方案,分别是应对少数据量和千万级大数据量两种。

2-1 少数据量

        数据量少时可直接批量删除。

from py2neo import Graph
graph = Graph('http://xx.xx.xx.xxx:7474/browser/', auth=('neo4j', 'password'))
#直接删除
graph.delete_all()
# 删除节点及其子图
node = NodeMatcher(graph=graph).match("Test", name='test1').first()
result = graph.delete(node)

2-2 大批量数据

        对于大批量数据,在直接删除时会爆出内存不足的错误。借助APOC工具包,可以进行分批次删除。

graph.delete_all() 
DatabaseError: [Statement.ExecutionFailed] Java heap space

2-2-1 下载       

         jar包下载地址:https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/icon-default.png?t=MBR7https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/​​​​​​​

根据neo4j的版本下载合适的jar包。

2-2-2 安装

       1. 下载apoc jar包,放到 neo4j安装目录plugins下目录

Neo4j图数据库实现节点批量删除_第1张图片

Neo4j图数据库实现节点批量删除_第2张图片

         2.修改配置文件

Neo4j图数据库实现节点批量删除_第3张图片

dbms.security.procedures.unrestricted=apoc.*,algo.*
apoc.import.file.enabled=true
apoc.export.file.enabled=true
##下面这条配置是可选的,表示使用neo4j的配置,比如导入数据的路径
##apoc.import.file.use_neo4j_config=true

        3.重启Neo4j

2-2-3 执行代码

cypher = 'CALL apoc.periodic.iterate("MATCH (n) RETURN n","DETACH DELETE n",{batchSize:10000, parallel:false})'
#cypher = "CALL apoc.periodic.commit('MATCH (n:Common) WITH n LIMIT $limit DELETE n RETURN count(*)',{limit: 10000}) YIELD updates, executions, runtime, batches RETURN updates, executions, runtime, batches;"
data = graph.run(cypher).data()
print(data)

Neo4j图数据库实现节点批量删除_第4张图片

 

你可能感兴趣的:(深度学习,数据库,neo4j,深度学习,知识图谱)