当前位置:   article > 正文

Noe4j存量数据Load

Noe4j存量数据Load

知识的分享,比一味的吸收更重要

引言

noe4j是一个图数据库,存在节点和关系,可以把节点当作java中的一个对象,关系当作java中两个对象的进行交互时发生的条件。
每个点都有自己所属的类,比如卖家类、买家类,包含手机号、身份证号等属性,存在索引,一个用户可以属于卖家类,也开始属于买家类,也可以都属于。
每个关系也可以看做一个类,比如购买类、投诉类,包含订单号、商品号、时间等属性,存在索引,买家购买了卖家的商品,也就达成了购买关系。

多种load方式比较(网图)

在这里插入图片描述

数据导入

1)、数据预加载:neo4j-import

  • 首次导入,neo4j要停掉,节点唯一

  • 删除原有数据库

  • 简单,测试成功

  • 注意点:csv格式

    2)、数据批量插入: Batch import

  • neo4j要停掉,节点唯一

  • 无需删除原有数据库

  • 注意点:非官方脚本,与neo4j-import的设计差距较大,按照模版不够灵活,顺序不可变
    数据格式:

nodes: :label id:string:SellerID name uname(类、主键、属性)
rels:id:string:ID id:string:ID type sale_id payed_time(起点,终点,类,属性)
  • 1
  • 2

并且在batch.properties中指定主键(个人开发的还是存在很多问题的)
3)、近实时数据插入:Load csv

  • 使用cypher语法写入从
  • https://www.aboutyun.com/thread-21513-1-1.html 可以进一步封装

4)、实时插入:create方法使用java的api
- 2000个点 1000个关系 较慢
- 全新点:18s 一半新点:12s
- 旧点新边:11s 旧点旧边:3s

5)、近实时数据插入: load jdbc
支持从数据库直接导入neo4j,可以做成增量插入

batch-import使用(推荐)

优点:

  1. 存储数据量大
  2. 无需删除原有数据库,这也是为什么推荐使用的,neo4j 4.x版本后支持多个库,根据需求也可选择neo4j-import
    缺点:
  3. 也需要重启neo4j
  4. 不是并行的

测试一:

测试设计:
对象一:卖家: buyerId:ID(Buyer-ID), tel, ..., :LABEL
对象二:买家: seller:ID(Seller-ID), tel, ..., :LABEL
关系图:卖家->买家: :START_ID(Actor-ID),sale_id, 成交时间,:END_ID(Movie-ID)
  
  
测试结果1:
IMPORT DONE in 7s 668ms.
Imported: 2
    93366 nodes
    385987 relationships
    586732 properties
Peak memory usage: 1.03 GB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

测试二:

测试结果2:Using Existing Configuration File
...........
Importing 1125052 Nodes took 38 seconds
...........................................................
Importing 5959112 Relationships skipped (6)
took 313 seconds Total import time: 358 seconds
 
创建索引后
内存占用9.8G
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

调优

1、加载预热

MATCH (n)
OPTIONAL MATCH (n)-[r]->()
RETURN count(n.name) + count(r);
  • 1
  • 2
  • 3

2、参数调优

# java heap 初始值
dbms.memory.heap.initial_size=1g
# java heap 最大值,一般不要超过可用物理内存的80%
dbms.memory.heap.max_size=4g
# pagecache大小,官方建议设为:(总内存-dbms.memory.heap.max_size)/2,这样算下来我这台服务器应该设为(32g-16g)/2=8g,但由于服务器上面还有其他程序在占用内存,我这里根据实际情况,调整为2g
dbms.memory.pagecache.size=2g 
  
  
#********************************************************************
# 添加apoc配置
#********************************************************************
dbms.security.procedures.unrestricted=apoc.*,algo.*
apoc.import.file.enabled=true
apoc.export.file.enabled=true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

效果:

MATCH p=(from:Seller{id:'29212695'})-[*..4]->(to:Buyer{id:'28871733'})
RETURN p limit 100
执行以上语句
  • 1
  • 2
  • 3

调优前:10s
调优后:小于4s
提升2-3倍

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/610400
推荐阅读
相关标签
  

闽ICP备14008679号