当前位置: 首页 > 知识库问答 >
问题:

当属性添加到节点时,由于Lucene日志,Neo4j数据库爆炸

颛孙航
2023-03-14

我在Neo4j中遇到了一个问题,由于生成了许多大型lucene.log.vXXX文件,目录graph.db/index/的大小急剧增加。这发生在根本不使用索引的计算中,而是简单地向网络中的一些节点添加数字属性。

在运行UbuntuLinux(14.04.1和14.04.2)的两台不同的64位计算机上,2.1.3, 2.1.7和2.2.0版本的问题是可以重现的。

我的数据库:

  • 16'636'351个节点,具有4个属性:id(string)、name(string)、国家代码(string)和type(string)。
  • 14'724'489加权链接。

这将生成一个图。11 GB的db目录。目录图。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。db/index/directory(由于lucene.log.vXXX文件)!!!

然而,如果我在没有索引的情况下实例化如下。。。

        gdbs = new GraphDatabaseFactory().newEmbeddedDatabaseBuilder(cfg.dbPath).
                setConfig(GraphDatabaseSettings.relationshipstore_mapped_memory_size, "12G").
                ...
                newGraphDatabase();

...结果是数据库大小为6.9GB(回想一下,原来是11GB!),其中现在只有2.2 GB用于图形。数据库/索引/!!!

这里发生了什么?


PS附加信息:

  • Java版本:Java(TM)SE运行时环境(build 1.7.0_76-b13)和OpenJDK运行时环境(IcedTea 2.5.4)(7u75-2.5.4-1 ~ trusty1)

共有1个答案

魏宸
2023-03-14

默认情况下,Neo4j将逻辑日志保留7天(旧版本的值不同)。由于启用了自动索引,因此对节点的任何更新都可能导致索引更新-如果仅更改非索引属性,则索引更新可能为空。

为了防止这种情况,关闭数据库,制作备份副本并删除lucene。日志vXXX文件。在启动代码中,将keep\u logical\u logs=false修改为配置选项。

 类似资料:
  • 我确实有一个存储库 没有定义自定义方法。因此,我使用了类似的,它们是预定义的。 我的课程如下 带字段的getter。 目前,我能够将这样的Pois保存到neo4j并将其检索回来,但是当我试图通过cypher处理数据库中的这些节点时,似乎这些字段没有映射到neo4j属性。 我以为spring-data-neo4j会将我的类字段转换为neo4j图形属性。我错了吗? 注意:调用似乎工作得很好。之后,我可

  • 我正在将XML返回到一个jsp页面。 最终的XML结构如下所示: 的根节点作为向量返回,我使用xtream将其别名为“tasks”,如上图所示。 如何使用XStream实现这一点?我需要使用XSLT文件来转换XML输出吗?完成这一点的最佳方法是什么?

  • 我有一个XML: 我想向根元素:/doc添加一个属性(名称空间),以便输出如下所示: 我尝试了三种xslt(跳过了默认的“复制所有”部分以减少问题的长度)。 xslt1:见下文,问题在于将空名称空间xmlns=”“添加到/doc的所有子节点(即:/doc/tag1和/doc/tag2) Xslt2:见下文,问题是“ns”被添加到根节点:和 xslt3:请参见下文,问题是报告了错误:未定义名称空间前

  • 这是网站中的一个常见功能,用户可以自定义其报告(他们可以选择数据库表中要在其报告中显示的列名,如https://i.stack.imgur.com/GxOGz.jpg). 我知道如何在SQL server中使用Select语句来查找列的系统属性(如column\u name、data\u type、length等),但是,如何为数据库列添加额外的自定义属性(如is\u visible、owner、

  • 我正在使用Neo4j的最新Spring数据。在这个项目中,我有不同的组,它们可以通过url/group/{id}/project访问,该url/group/{id}/project应该返回用户有权访问的所有项目的列表。这东西工作得很好,但是如果用户输入了一个很大的数字作为groupId,而这个数字在数据库中并不存在,我会得到一个 组织。neo4j。图b。NotFoundException:未找到节

  • 我正在使用neo4j to elasticsearch插件,以便使用以下配置索引我的所有决策节点- 我需要根据一些节点属性排除一些决策节点(要在ES中建立索引),例如,我不想为决策(where)建立索引。hidden(隐藏)为true。是否可以扩展neo4j elasticsearch以支持它?