Py2neo:一种快速导入百万数据到Neo4j的方式
Py2neo:一种快速导入百万数据到Neo4j的方式
Py2neo是一个可以和Neo4j图数据库进行交互的python包。虽然py2neo操作简单方便,但是当节点和关系达几十上百万时,直接创建和导入节点、关系的方式会越来越耗时。本文提供一个py2neo小技巧,通过简单的代码,能够以每秒1万节点/关系的速度快速将数据导入Neo4j。
本文目录
1、Neo4j与Py2neo
对于已构建知识图谱,通过可视化技术能够清晰、直观的呈现实体与实体之间的关系。Neo4j图数据库作为高性能和轻量级的知识存储与可视化工具,在实践中的应用越来越广泛。
Py2neo为python代码操作Neo4j提供了便利,简单好用,具体可访问其操作手册。
Neo4j官网
Py2neo手册
2、Py2neo常规导入节点/关系到Neo4j的方法
Py2neo导入知识图谱到Neo4j的一般方式是,利用Node和Relationship分别实例化节点和关系,然后利用Graph的create()方法创建相应的节点和关系,具体示例如下:
from py2neo import Graph, Node, Relationship
if __name__ == '__main__':
# 连接neo4j
graph = Graph("http://localhost:7474", auth=("neo4j", "123456"))
# 创建两个节点
node_1 = Node("py2neo", name="py2neo")
graph.create(node_1)
node_2 = Node("neo4j", name="neo4j")
graph.create(node_2)
# 创建两个节点之间的关系
relation = Relationship(node_1, "Subgraph()导入节点/关系就是快", node_2)
graph.create(relation)

3、Py2neo快速导入节点/关系到Neo4j的方法
第2节中的方法对于少量数据速度尚可,但是不适合大数据量的情形。为此,可利用py2neo的Subgraph类构造子图,并在Transaction中批量创建节点和关系。此处详细文档可参考:详细文档
Py2neo批量创建节点/关系示例如下:
from py2neo import Graph, Subgraph, Node, Relationship
def batch_create(graph, nodes_list, relations_list):
"""
批量创建节点/关系,nodes_list和relations_list不同时为空即可
特别的:当利用关系创建节点时,可使得nodes_list=[]
:param graph: Graph()
:param nodes_list: Node()集合
:param relations_list: Relationship集合
:return:
"""
subgraph = Subgraph(nodes_list, relations_list)
tx_ = graph.begin()
tx_.create(subgraph)
graph.commit(tx_)
if __name__ == '__main__':
# 连接neo4j
graph = Graph("http://localhost:7474", auth=("neo4j", "123456"))
# 批量创建节点
nodes_list = [] # 一批节点数据
relations_list = [] # 一批关系数据
# 如:实例化一个节点
node_1 = Node("中药名", name="白术")
nodes_list.append(node_1)
node_2 = Node("功能", name="健脾")
nodes_list.append(node_2)
# 创建两个节点之间的关系
relation = Relationship(node_1, "功能", node_2)
relations_list.append(relation)
node_3 = Node("功能", name="益气")
nodes_list.append(node_3)
relation2 = Relationship(node_1, "功能", node_3)
relations_list.append(relation2)
# 批量创建节点/关系
batch_create(graph, nodes_list, relations_list)

(哈哈哈:图与功能不匹)
该方法能够以每秒至少1万节点/关系的速度快速将数据导入Neo4j(其实可以更快速)。
4、Neo4j快速清库大量数据的方法
match (n) detach delete n
对于少量数据,在neo4j中可以利用上面一行命令删除,但是当节点和关系非常多的时候,该方法很耗时。经过实验,提供如下方法:即:在neo4j安装目录中分别找到data和transactions目录,然后在两个目录中分别删掉需要删除数据库名字的文件夹即可(特别的:删库需谨慎)。
总结
本文记录了一个py2neo快速导入知识图谱到neo4j的方法。

欢迎关注公众号:实用自然语言处理
原文首发于微信公众号:实用自然语言处理
Py2neo:一种快速导入百万数据到Neo4j的方式的更多相关文章
- MySQL 快速导入大量数据 资料收集
一.LOAD DATA INFILE http://dev.mysql.com/doc/refman/5.5/en/load-data.html 二. 当数据量较大时,如上百万甚至上千万记录时,向My ...
- Mysql使用存储过程快速添加百万数据
前言 为了体现不加索引和添加索引的区别,需要使用百万级的数据,但是百万数据的表,如果使用一条条添加,特别繁琐又麻烦,这里使用存储过程快速添加数据,用时大概4个小时. 创建一个用户表 CREATE TA ...
- [Java] 高效快速导入EXCEL数据
需求1.高效率的以excel表格的方式导入多条数据.2.以身份证号为唯一标识,如果身份证号已存在,则该条数据不导入. 分析刚开始的时候是传统的做法,解析excel数据,获取单个对象,判断身份证是否已存 ...
- Oracle中用exp/imp命令快速导入导出数据
from: http://blog.csdn.net/wangchunyu11155/article/details/53635602 [用 exp 数 据 导 出]: 1 将数据库TEST完全导出, ...
- mysql快速导入大量数据问题
今天需要把将近存有一千万条记录的*.sql导入到mysql中.使用navicate导入,在导入100万条之后速度就明显变慢了, 导入五百万条数据的时候用了14个小时,且后面的数据导入的越来越慢. 后来 ...
- 使用MySQL Migration Toolkit快速导入Oracle数据
近来笔者有项目需要将原有的Oracle数据库中的数据导入到MySQL中,经过试用发现MySQL GUI Tools中的MySQL Migration Toolkit可以非常方便快捷的将Oracle数据 ...
- mysql快速导入导出数据
--导入 select * from inhos_genoperation(表名) where UPLOAD_ORG_CODE='***' into outfile '/tmp/inhos_genop ...
- 快速导入Excel数据到mysql
首先利用mysql文件,导出csv文件, 然后,直接修改csv文件,然后导入csv文件
- python-几种快速了解函数及模块功能的方式
背景 在进行编程的时候经常要导入各种包的各种函数,但是很多包一下又不知道为什么要导入这个模块,所以想总结下有哪些方法可以让我们快速熟悉其中函数的作用. import numpy as np impor ...
- Oracle快速导入数据工具
sqlldr是oracle自带的快速导入批量数据的工具,常用于性能测试.考虑手工构造控制文件较为繁琐,因此使用脚本完成批量数据的自动导入. 基本知识 sqlldr命令语法 sqlldr dbname/ ...
随机推荐
- filebeat知识点
在Filebeat的根目录下,有一个叫做filebeat.yml的文件. filebeat.inputs: - type: log enabled: true paths: - ./sample.lo ...
- k8s中使用到的各种证书图示
- 使用 fail2ban 和 FirewallD 黑名单保护你的系统
如果你运行的服务器有面向公众的 SSH 访问,你可能遇到过恶意登录尝试.本文介绍了如何使用两个实用程序来防止入侵者进入我们的系统. 为了防止反复的 ssh 登录尝试,我们来看看 fail2ban.而且 ...
- 30分钟掌握 Webpack
本文基于:峰华前端工程师--30分钟掌握Webpack 为什么使用 Webpack 在我们进行传统网页开发中,会在 index.html 中引入大量的 js 和 css 文件,不仅可能会导致命名冲突, ...
- salesforce零基础学习(一百一十九)In-App Guidance实现引导页操作功能
本篇参考: https://help.salesforce.com/s/articleView?id=sf.customhelp_lexguid.htm&type=5 https://deve ...
- PAT (Basic Level) Practice 1012 数字分类 分数 20
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和: A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n ...
- 干货|什么是特性团队/功能团队(FeatureTeam)
最近一直在思考如何做团队组织能力建设和如何进行决策.执行产品研发策略.因为自己一直在研发效能领域,所以来谈谈什么是特性团队(FeatureTeam), 怎么创建特性团队以及在日常工作中如何结合 Scr ...
- 检测 MySQL 服务是否存活 shell脚本
#!/bin/bash # 检测 MySQL 服务是否存活 # host 为你需要检测的 MySQL 主机的 IP 地址,user 为 MySQL 账户名,passwd 为密码 # 这些信息需要根据实 ...
- Docker | 容器互联互通
上篇讲到创建自定义网络,我创建了 mynet 网络,并指定了网关和子网地址.在上篇结尾呢,我抛出了一个问题:其它网络下的容器可以直接访问mynet网络下的容器吗?今天就让我们一块看下怎么实现容器互联. ...
- Linux 下搭建 Hive 环境
Linux 下搭建 Hive 环境 作者:Grey 原文地址: 博客园:Linux 下搭建 Hive 环境 CSDN:Linux 下搭建 Hive 环境 前置工作 首先,需要先完成 Linux 下搭建 ...