Neo4j在内存配置,多线程和慢速写入中

时间:2013-08-21 16:06:08

标签: neo4j

写入neo4j时,如何提高性能?我目前在服务器上安装了neo4j,目前我在嵌入式服务器上运行它。我相信我的配置是根据我在网上找到的配置将我的图形数据库的所有内容存储在内存中

neostore.nodestore.db.mapped_memory=0 
neostore.relationship.db.mapped_memory=0
neostore.propertystore.db.mapped_memory=0
neostore.propertystore.db.strings.mapped_memory=0
neostore.propertystore.db.arrays.mapped_memory=0
neostore.propertystore.db.index.keys.mapped_memory=0
neostore.propertystore.db.index.mapped_memory=0

node_auto_indexing=true

node_keys_indexable=type,id

cache_type=strong
use_memory_mapped_buffers=false
node_cache_size=12G
relationship_cache_size=12G
node_cache_array_fraction=10
relationship_cache_array_fraction=10

如果这不正确,请告诉我。我遇到的问题是,当我尝试将信息保存到图形数据库时。看起来这些时间与我们MYSQL相同的时间相比并不是很快(例如,添加250个项目需要大约3秒,而在MYSQL中需要1秒)。我在网上看到,如果你有多个索引会降低持久数据的性能,所以我现在正在努力查看这是否是我的罪魁祸首。但是,我只想确保在内存中运行图形数据库时,我的配置似乎是内联的。

本主题的第二个问题。好的,如果我的配置很好并且我的数据库确实在内存中,那么有没有办法优化持久数据,以防万一这不是银弹。如果我们针对执行此功能的测试运行一个线程,则反对10个线程,它似乎是执行起泡的时间 例如(线程1结束1s,线程2结束2s,线程3结束3s等)。是否有一些特殊的多线程配置,当多个线程同时击中它时,我缺少这些配置以提高性能。

Neo4J version
1.9.1-enterprise

My Jvm configs are 
-Xms25G -Xmx25G -XX:+UseNUMA -XX:+UseSerialGC

My Machine Specs:
File system type ext3

1 个答案:

答案 0 :(得分:0)

您的缓存参数无效。

node_cache_size=12G
relationship_cache_size=12G
node_cache_array_fraction=10
relationship_cache_array_fraction=10

这些只能与GCR缓存一起使用。设置缓存不会在启动时将所有内容都放在内存中,您必须编写代码才能为您执行此操作。像这样:

GlobalGraphOperations ggo = GlobalGraphOperations.at(graphDatabaseFactory);
for (Node n : ggo.getAllNodes()) {
    for (String propertyKey : n.getPropertyKeys()) {
        n.getProperty(propertyKey);
    }
    for (Relationship relationship : n.getRelationships()) {
    }
}

请注意强大的缓存,如果您有很多节点/关系,最终您的缓存会变得很大并且执行GC会导致系统长时间暂停。

我的建议是使用内存映射文件,因为这是一个处理过的操作系统,它将在堆空间之外。它不提供接近缓存的速度,但如果您必须从neo商店读取它将提供加速。