我在具有27g RAM的CENTOS机器上运行neo4j 2.3。 db大小约为10g(现在),我希望neo4j尽可能快地工作
如果以下设置正常,请您建议吗? (我是JAVA的新手)dbms.pagecache.memory=15g
wrapper.java.initmemory=8192
wrapper.java.maxmemory=8192
这些也是JVM操作系统选项:
java -XX:+PrintFlagsFinal -version | grep -e '\(Initial\|Max\)HeapSize'
uintx InitialHeapSize := 24696061952 {product}
uintx MaxHeapSize := 24696061952 {product}
***我不知道为什么我在htop中看到neo4j需要24g的虚拟内存。
答案 0 :(得分:4)
我假设您使用的是最新稳定的Neo4j版本(2.3.1)。
您可能感兴趣的链接:
从Neo4j数据库中获得最佳性能可分为几个部分:
TL; DR; - 您的设置没问题。
您需要检查的是:
默认情况下,Neo4j足够智能,可根据您的机器自动确定设置。
堆大小配置建议 - doc。基本规则 - 没有必要给予更多的记忆然后需要。
Pagecache - doc。
它将存储在耐用介质上的Neo4j数据缓存。
在neo4j 2.3.0中,对象缓存被完全删除,而pagecache现在只是缓存机制。那里的基本规则 - 如果你可以将你的数据库放在RAM中,那么将这个属性设置为数据库的大小(也许,在它上面添加一些+ 10-20%)。这将允许Neo4j将整个存储加载到RAM中。
Other Neo4j configuration settings
因此,在应用程序中,您应该确保以下几点:
始终使用指定的参数执行cypher。现在,在2.3.0中,Cypher在首次执行时被编译为字节码。如果您的查询是参数化的,那么它允许数据库重用已编译的Cypher版本。原始(第一)Cypher查询执行性能可能非常糟糕。
缓存分片。如果您的数据库足够大,并且不适合内存并且您正在使用群集部署,那么您可以从使用缓存分片中获益。基本上,您需要做的是 - 将对同一数据的请求路由到同一服务器。这将允许Neo4j将最常用的数据保留在缓存中。当每台服务器在缓存中拥有自己的数据时,你最终会遇到这种情况。
我觉得有趣的其他设置: