Neo4j性能优化

我结合实际工作情况,聊一下Neo4j的性能优化。我这里在Neo4j存储了5个节点和5个边,数据量如下:

  31530628 nodes
  48336920 relationships
  77437758 properties

  Estimated number of nodes: 47.63 M
  Estimated number of node properties: 110.14 M
  Estimated number of relationships: 69.47 M
  Estimated number of relationship properties: 149.30 M
  Estimated disk space usage: 12.46 GB
  Estimated required memory usage: 1.58 GB

有一个Java程序在执行Cypher查询,以及社区发现算法。刚开始程序运行正常,过了一段时间,发现程序跑到一半会挂掉,原因是内存不足。服务器系统为CentOS6.9,32G内存,安装的Neo4j3.4.4社区版。从以下方面着手处理内存问题:

1、根据实际情况调整配置文件neo4j.conf里面的参数值:

# java heap 初始值
dbms.memory.heap.initial_size=1g
# java heap 最大值,一般不要超过可用物理内存的80%
dbms.memory.heap.max_size=16g
# pagecache大小,官方建议设为:(总内存-dbms.memory.heap.max_size)/2,这样算下来我这台服务器应该设为(32g-16g)/2=8g,但由于服务器上面还有其他程序在占用内存,我这里根据实际情况,调整为2g
dbms.memory.pagecache.size=2g

2、调整Linux服务器的swap分区大小:

调整完neo4j.conf参数后,发现还是存在内存问题,再看Linux服务器的swap分区,只有512M,全部被占满,后来将swap分区调整为32G。
(调整swap分区大小的方法可参考:https://blog.csdn.net/andyguan01_2/article/details/86680635)

经过以上两步调整,内存问题解决了,但执行Neo4j查询很慢,于是给节点加上索引,速度提升了10倍。
(给节点增加索引的方法可参考:https://blog.csdn.net/andyguan01_2/article/details/89357758)

总结起来就是三点:

1、修改参数文件neo4j.conf;
2、调整Linux的swap分区大小;
3、给节点增加索引。

完毕。

你可能感兴趣的:(neo4j)