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

缓存参数无效。

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存储中读取,它会提供更快的速度。

最新更新