首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4J 3.x比Neo4J 2.x使用更多的内存?如何避免这种情况?

Neo4J 3.x比Neo4J 2.x使用更多的内存?如何避免这种情况?
EN

Stack Overflow用户
提问于 2018-02-20 18:04:39
回答 1查看 360关注 0票数 5

我将我的图形数据库从Neo4J 2.0.4更新到了Neo4J 3.3.3,当我在我的应用程序中运行它时,它现在使用的内存(我的Mac机上的java进程)是以前的两倍。(我在我的Mac上运行Java 1.8 )

当我启动Neo4J 2时,对于相同的任务和查询,它使用了大约250Mb。但是Neo4J 3使用了大约500Mb。

我以为更新应该更有效率?

有什么可能的方法可以减少内存使用量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-24 18:58:31

Neo4j是基于JVM虚拟机的,它的内存消耗取决于堆的大小。

如果您还没有配置它的大小,Neo4j有一个启发式方法来计算它,并且当这个启发式方法改变的时候。

在Neo4j 3.X中,有3个内存空间:

JVM堆

堆用于存储所有事务的数据、节点上的锁和关系,以及缓存查询的执行计划。

您可以在conf/neo4j.conf中配置其大小:

代码语言:javascript
复制
# Java Heap Size: by default the Java heap size is dynamically
# calculated based on available system resources.
# Uncomment these lines to set specific initial and maximum
# heap size.
dbms.memory.heap.initial_size=512m
dbms.memory.heap.max_size=512m

页面缓存

数据库在磁盘上执行大量的IO操作。为了更快,它需要将你的数据放入RAM中。Neo4j 3.X使用了页面缓存机制,将其二进制数据文件的某些部分放入内存。因此,最常用的数据在RAM中。

这可以在conf/neo4j.conf中配置:

代码语言:javascript
复制
# The default page cache memory assumes the machine is dedicated to running
 # Neo4j, and is heuristically set to 50% of RAM minus the max Java heap size.
dbms.memory.pagecache.size=10g

索引

索引用于快速查找查询的节点,但如果这些索引不在RAM中,它们将很慢。

没有办法在Neo4j中配置这个内存大小,但是有了3的规则,它很容易计算(服务器RAM =堆+页面缓存+索引+操作系统的一些空闲内存)。

您可以使用以下命令计算索引的大小:

代码语言:javascript
复制
$> du -sh data/databases/graph.db/indexes

结论

从Neo4j 2开始,有很多改进(功能,性能),所以它确实更高效。

关于RAM上的指纹更有效,我不知道,我从来没有做过这样的测试,但是RAM现在很便宜。

我能告诉你的唯一一件事是,你需要一个较小的堆,数据缓存现在已经脱离了堆。在2.X中,Neo4j在内存中保存了一个图形,以便快速访问。

但是Neo4j是高度可配置的,所以如果你有一个很小的服务器,并且想要微调内存消耗,你必须设置堆和页面缓存大小。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48882553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档