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的方法。


欢迎关注公众号:实用自然语言处理


原文首发于微信公众号:实用自然语言处理


最新文章

  1. 转:Acegi Security
  2. 【LightOJ 1422】Halloween Costumes(区间DP)
  3. asm单机dg dbca报错ORA-01031 CRS-2676,rman restore主库控制文件报错ORA-15081
  4. 多线程与网络之SDWebImage和NSCache
  5. 前端CSS规范大全
  6. 移除Strorefront站点footer上的Storefront Design By WooThemes字样
  7. MyBatis 的Mapper中有小于号的处理
  8. C#开发移动应用系列(1.环境搭建)
  9. 不小心用js重做了一遍贪吃蛇
  10. 一步一步从原理跟我学邮件收取及发送 13.mime格式与常见字符编码
  11. SpringCloud教程 | 第三篇: 服务消费者(Feign)
  12. python_appium_模拟器启动app进行登录
  13. 爬虫基础01-day23
  14. 论文笔记系列-iCaRL: Incremental Classifier and Representation Learning
  15. js+jquery手写弹出提示框
  16. ubuntu18重装后 基本需求安装
  17. linq to sql语句中转换数据类型和日期操作
  18. java 时间间隔天数
  19. 每日英语:KFC's Crisis in China Tests Ingenuity of Man Who Built Brand
  20. 在Eclipse中配置Maven插件

热门文章

  1. 【机器学习】利用 Python 进行数据分析的环境配置 Windows(Jupyter,Matplotlib,Pandas)
  2. Morris 遍历实现二叉树的遍历
  3. 2.MongoDB系列之创建更新删除文档
  4. 后端框架的学习----mybatis框架(8、lombok)
  5. JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
  6. 齐博X1忘记管理员密码了怎么办?如何强制进后台?
  7. 28.解析器Parser
  8. calico和flannel的优缺点
  9. 关于Position Encoding 的理解
  10. FastApi学习1