我遇到了Neo4j的问题,由于生成了许多大的lucene.log.vXXX文件,目录graph.db / index /的大小急剧增加。对于根本不使用索引的计算会发生这种情况,但只是将数字属性添加到网络中的某些节点。
在运行Ubuntu Linux(14.04.1和14.04.2)的两台不同的64位计算机上,版本2.1.3,2.1.7和2.2.0的问题是可重现的。
我的数据库:
这导致graph.db目录为11 GB。目录graph.db / index /是2.4 GB大。
我使用嵌入Java的Neo4j并始终实例化如下:
String i1 = "id";
String i2 = "name";
String i3 = "country";
String i4 = "type";
String myIndeables = i1 + "," + i2 + "," + i3 + "," + i4;
GraphDatabaseService gdbs = new GraphDatabaseFactory().newEmbeddedDatabaseBuilder(cfg.dbPath).
setConfig(GraphDatabaseSettings.node_keys_indexable, myIndeables).
setConfig(GraphDatabaseSettings.node_auto_indexing, "true").
setConfig(GraphDatabaseSettings.relationshipstore_mapped_memory_size, "12G").
...
newGraphDatabase();
这种方式也用于创建(即导入)原始的11 GB数据库。
到目前为止一切顺利。
现在我对数据库进行计算。忽略细节,算法为网络中最大连通分量(6'118'740个节点)中的所有节点计算一种中心度量。
问题:
只需将这些新计算的数字作为属性添加到6'118'740节点(总共16'636'351),导致数据库爆炸到249 GB,带有243 GB graph.db / index /目录(到期)到lucene.log.vXXX文件)!!!
但是,如果我在没有索引的情况下实例化如下...
gdbs = new GraphDatabaseFactory().newEmbeddedDatabaseBuilder(cfg.dbPath).
setConfig(GraphDatabaseSettings.relationshipstore_mapped_memory_size, "12G").
...
newGraphDatabase();
...结果是6.9 GB的数据库大小(回想起原来是11 GB!),其中现在只有2.2 GB用于graph.db / index / !!!
这里发生了什么?
PS
其他信息:
答案 0 :(得分:0)
默认情况下,Neo4j将逻辑日志保留7天(旧版本具有不同的值)。由于启用了自动索引,因此对节点的任何更新都可能导致索引更新 - 如果仅更改非索引属性,则可能为空。
要防止此操作关闭数据库,请制作备份副本并删除lucene.log.vXXX
个文件。在您的启动代码中,修改keep_logical_logs=false
作为配置选项。