0

写入 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 完成 1 秒,线程 2 完成 2 秒,线程 3 完成 3 秒,等等)。是否有一些我缺少的特殊多线程配置来提高多线程同时击中它的性能。

Neo4J version
1.9.1-enterprise

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

My Machine Specs:
File system type ext3
4

1 回答 1

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

于 2013-08-22T14:55:02.250 回答