初版图谱数据采集接入方案

  1. neo4j数据采集方案利弊比较
    • 采用大批量数据文件导入的优点以及缺点

    大批量数据导入初始化库建议使用neo4j-import,这是直接官方集成的把需要导入的数据提前处理成相应的csv文件使用neo4j-import命令导入即可,简单快速,实测导入5E条数据仅需约30-40分钟。

    缺点:必须停止Neo4j的服务,而且只能重新新建一个库,无法在已有的库中插入。

采用原生态接口直接插入Neo4j(百度已有测试例子)

 

CPU: I3 2.4Ghz 4核,内存8G

方式一:采用其原生接口操作

JVM:-Xms1024m -Xmx1024m -Xmn512m-XX:PermSize=128m -XX:MaxPermSize=256m

4000节点(50个属性),4000关系:1秒,其间cpu使用率25%,761M

8000节点(50个属性),8000关系:2秒,其间cpu使用率25%,829M

16000节点(50个属性),16000关系:5秒,其间cpu使用率25,983M

24000节点(50个属性),24000关系:9秒,其间cpu使用率25%,1079M

32000节点(50个属性),32000关系:14秒,其间cpu使用率25%,1187M

40000节点(50个属性),40000关系:执行1多分钟以后直接报outOfMemery: java heap space

 

内存使用:

 

结论:插入时用事务插入接口的话,在JVM 1G内存的配置下最后能够插入3万多个节点和关系,再多就内存溢出。

数据采集方案

 

  1. 前端获取用户操作小程序的行为数据(点击,转发,分享等等)接口传入后端。
  2. 后端获取接口,采集相应数据根据文件大小或者文件条数来生成CSV相应文件
  3. 根据相应的CSV 定时调用Neo4jload 命令把数据导入neo4j图形数据库中(具体性能在测试后才能得出)。
  4. 对load命令进行前面加上USING PERIODIC COMMIT 1000,1000表示每1000行的数据进行一次Transaction提交,提升性能。

 

 

 

VM:采用JVM默认设置

40000节点(50个属性),40000关系:6秒,其间CPU使用率25%,内存288M

80000节点(50个属性),80000关系:17秒,其间CPU使用率25%,内存288M

120000节点(50个属性),120000关系:31秒,其间CPU使用率25%,内存289M

200000节点(50个属性),200000关系:56秒,其间CPU使用率25%,内存288M

 

分析:

根据官方文档,当少量数据(根据测试观察5000条以下)插入时,建议使用事务型插入接口(即通常NEO4J的数据操作接口),速度还是可以的;当数据量比较大时,建议采用专用的BatchInserters接口,这个接口在插入时不创建事务,估计内存占用很少,基本上在不同数据量的操作期间内存无太大变化。由此可见,在向NEO4J导入大量数据时,可以有以下两种方法实现快速插入:

化大为小法

此法是将大量的数据集合分成5000条或者更少集合,使用事务型插入接口插入数据,这样整体的插入时间按照以上的测试结果,100000条数据可以在30秒内插入完毕。缺点是需要分拆数据集合为小的集合;优点是当用户已经在运行一组NEO4J的数据库时,只需改造相关的代码即可,也不需要在导入期间暂停数据库。

批量插入法

此法不管数据量多大,都可以实现快速插入,实现速度和内存的平衡,适合在初始化数据库时(或者需要大量导入数据时)一次性导入大量的数据;缺点是导入数据时要暂停数据库,采用BatchInserters接口导入,不能实现业务无中断运行。

 

建议:

采用化大为小法,当插入(导入)数据量大于1000个时,采用分批插入的方法,可以达到快速插入数据的目的,也能保证内存占用量不会有太大的变化而导致OOM。

 

 

关于Neo4j数据备份,社区版本没有热备份。

介绍: Neo4j 的neo4j-admin 工具提供 dump 和 load 功能,格式如下: neo4j-admin dump --database=<database> --to=<destination-path> neo4j-admin load --from=<archive-path> --database=<database> [–force]

注意:无论备份 与 还原 都必须关闭Neo4j

 

 

 

 

 

  • 支付宝打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
Administrator

Administrator

知人不必言尽,留三分余地与人,留些口德与己。 责人不必苛尽,留三分余地与人,留些肚量与己。 才能不必傲尽,留三分余地与人,留些内涵与己。 锋芒不必露尽,留三分余地与人,留些深敛与己。 有功不必邀尽,留三分余地与人,留些谦让与己。

发表评论

电子邮件地址不会被公开。 必填项已用*标注