首页 > 解决方案 > Neo4j 减少生产数据库大小

问题描述

我比较了我的 neo4j 生产数据库大小。2018 年 5 月 31 日为 120 mb,2018 年 6 月 27 日为 100 mb,我每天都在分析大小的小幅下降。一般来说,我们的生产规模应该随着系统上线并且用户数量的增加而增加。

我比较了系统中每个节点的数量。Count 显示出预期和下降的增长,并且应用程序运行良好。

我只是想知道 neo4j 如何在内部存储和压缩数据以了解情况。

为糟糕的英语道歉。

标签: neo4jcompressionstorage

解决方案


您所看到的另一种解释可能是因为 Neo4j 如何处理已删除的节点和关系,特别是在删除后创建新节点和关系时这与空间重用的关系。

由于节点和关系数据存储在内存中,可以通过使用图 ID 的计算访问和寻址,当在 Neo4j 中删除节点和关系时,内存中的这些空间被标记为已清除并清空,但内存不会被压缩。节点和关系存储中的那些“洞”仍然存在,占用空间和未使用(如占用物理空间的空置公寓,只是缺少租户)。但是,Neo4j 确实保留了一个 id 存储文件,该文件跟踪已删除的关系和节点的 id,并且在您以后添加节点和关系时可以重用。

所有这一切的结果导致了一个有趣的预期逆转:随着图中的节点和关系被删除,您可能会看到数据库大小增加,因为 1. 节点和关系的存储在删除时没有被压缩或碎片整理2. id 被添加到 id 存储文件中,以跟踪稍后要填写的空缺。

当您开始向图表添加节点和关系时,您可能会看到数据库大小减少,因为 1. 节点和关系存储中的空间被标记为空(但存在并占用存储中的空间)从以前删除这些新添加的图形元素正在重复使用条目,并且 2. 当我们填充这些空缺时,存储文件中的 ID 将被删除,因此 id 存储文件的大小会减小。

如果您达到所有符合重用条件的 id 都已填充的程度,那么随着节点和关系的添加,您将再次看到数据库大小的增加,因为我们需要增加节点和关系存储,并且我们赢了根本不要接触 id 存储(此时应该是空的,因为没有可重用的 id)。


推荐阅读