Neo4j减少生产数据库大小

时间:2018-06-26 21:05:04

标签: neo4j compression storage

我比较了neo4j生产数据库的大小。 在2018年5月31日为120 mb,在2018年6月27日为100 mb,我正在分析每天大小的小幅减少。 通常,随着系统的运行,我们的生产规模应该增加,并且用户数量都不会增加。

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

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

对英语不佳表示歉意。

2 个答案:

答案 0 :(得分:0)

没有压缩,并且我确定大小不同是由于事务日志(即neostore.transaction.db.X文件)上的旋转

答案 1 :(得分:0)

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

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

所有这些因素的影响导致期望值发生有趣的逆转:随着图中节点和关系的删除,您的数据库大小可能会出现 increase 的增加,因为1.节点和节点的存储在发生删除和2.将ID添加到ID存储文件中时,不会压缩或整理碎片关系。以跟踪以后要填补的空缺。

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

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