首页 > 解决方案 > 为什么我的 Neo4j 数据库的大小比上周小,即使我一直在添加节点、关系和属性而不是删除它们

问题描述

我的数据库以前是 80gb 大小,现在添加几百万个节点后,它的大小是 35gb。

知道在 Neo4j 幕后会发生什么,从而大大缩小了数据库大小吗?

这是数据库的 sysinfo:

在此处输入图像描述

标签: neo4jsizegraph-databases

解决方案


有一篇关于理解 Neo4j 数据库增长的文章应该可以解释你所看到的。

总而言之,当删除发生时,相关关系和节点存储文件中的条目被标记为已删除,但存储没有被压缩(这会弄乱我们的图形 id 编号,因为它们充当指向我们存储的指针)。我们存储.id文件,这些文件跟踪以后添加数据时有资格重复使用的 id。因此,在大量节点和关系删除时,您会看到存储大小增加,因为 1. 存储没有被压缩以回收已删除的项目空间和 2. 因为我们正在添加到 .id 文件中的可重用 id 列表。

稍后添加节点和关系时,会利用可重用的 id,并回收存储文件中的这些位置并用于新的节点和关系。存储文件的空间不会增长,但可重用的 ids 列表会缩小,从而产生更多的存储空间。

这里可能涉及的另一个因素是事务日志,它在更改刷新到存储之前用作临时事务存储。轮换和保留策略可能会使事务文件保留的时间超过您需要的时间(如果您想更改,请调整轮换和保留设置,不要自己修改或删除事务日志)。事务日志通常会占用大量空间,因此,如果您通过了可以修剪大部分事务日志的点,那么这可以解释空间差异。


推荐阅读