neo4j - Neo4j 减少生产数据库大小
问题描述
我比较了我的 neo4j 生产数据库大小。2018 年 5 月 31 日为 120 mb,2018 年 6 月 27 日为 100 mb,我每天都在分析大小的小幅下降。一般来说,我们的生产规模应该随着系统上线并且用户数量的增加而增加。
我比较了系统中每个节点的数量。Count 显示出预期和下降的增长,并且应用程序运行良好。
我只是想知道 neo4j 如何在内部存储和压缩数据以了解情况。
为糟糕的英语道歉。
解决方案
您所看到的另一种解释可能是因为 Neo4j 如何处理已删除的节点和关系,特别是在删除后创建新节点和关系时这与空间重用的关系。
由于节点和关系数据存储在内存中,可以通过使用图 ID 的计算访问和寻址,当在 Neo4j 中删除节点和关系时,内存中的这些空间被标记为已清除并清空,但内存不会被压缩。节点和关系存储中的那些“洞”仍然存在,占用空间和未使用(如占用物理空间的空置公寓,只是缺少租户)。但是,Neo4j 确实保留了一个 id 存储文件,该文件跟踪已删除的关系和节点的 id,并且在您以后添加节点和关系时可以重用。
所有这一切的结果导致了一个有趣的预期逆转:随着图中的节点和关系被删除,您可能会看到数据库大小增加,因为 1. 节点和关系的存储在删除时没有被压缩或碎片整理2. id 被添加到 id 存储文件中,以跟踪稍后要填写的空缺。
当您开始向图表添加节点和关系时,您可能会看到数据库大小减少,因为 1. 节点和关系存储中的空间被标记为空(但存在并占用存储中的空间)从以前删除这些新添加的图形元素正在重复使用条目,并且 2. 当我们填充这些空缺时,存储文件中的 ID 将被删除,因此 id 存储文件的大小会减小。
如果您达到所有符合重用条件的 id 都已填充的程度,那么随着节点和关系的添加,您将再次看到数据库大小的增加,因为我们需要增加节点和关系存储,并且我们赢了根本不要接触 id 存储(此时应该是空的,因为没有可重用的 id)。
推荐阅读
- c - 可以直接转换成write吗?
- c# - System.JSON 不会为格式错误的 JSON 输入抛出异常
- android - android volley如何发送数组?
- c++ - FindThreads 仅在启用 C 或 CXX 语言时才有效
- drop-down-menu - 如何从 JMeter 中的下拉列表中捕获值
- react-native - 如何在 React Native 中编写等效的 IF / ELSE 语句?
- php - 使用 Fetch(乏味)来接收/接收电子邮件
- python - Openhab2 exec 使用 pigpio 和 gpiozero 绑定到外部 rpi
- raspberry-pi - 在运动检测事件时在 Motion Eye 上执行 Python 脚本
- fiware - 监控 Orion Context Broker 以创建新的 XACML 规则