首页 > 其他分享 >Noe4j存量数据Load

Noe4j存量数据Load

时间:2022-11-18 16:00:25浏览次数:45  
标签:Load java 存量 memory ID Noe4j import neo4j id


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

引言

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

多种load方式比较(网图)

Noe4j存量数据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(起点,终点,类,属性)

并且在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

测试二:

测试结果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、加载预热

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

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

效果:

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

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


标签:Load,java,存量,memory,ID,Noe4j,import,neo4j,id
From: https://blog.51cto.com/u_15879559/5868562

相关文章