我使用 neo4j 3.0.1 社区,并且我有几 GB 的数据。这些数据很快就会过时(比如每天 2.3 次),我必须先创建新数据,然后删除旧数据(因此在任何时间点都有一些数据可用)。
问题是 Neo4j 不使用已删除节点/关系中的空间。
我使用 MATCH (n) WHERE 条件 DETACH DELETE n
我可以看到节点正在被删除(它们的数量恒定约为 30M),但大小正在增长(12 次更新后,大小几乎比应有的大 12 倍)。
我找到了以前的帖子Neo4J 数据库大小/缩小 https://stackoverflow.com/questions/26894981/neo4j-database-size-shrinking
about 商店实用程序 https://github.com/jexp/store-utils但我想找到更好的解决方案。
我还发现了旧问题(来自版本 1.x)neostore.* 删除百万节点后文件大小 https://stackoverflow.com/questions/21625259/neostore-file-size-after-deleting-millions-node但至少在我的情况下,它根本不像答案中那样工作。
有一些建议删除所有数据库文件并创建一个新文件,但这需要停止服务,这是不应该发生的。
我还发现一些资料说为了重用空间需要先重启DB,也尝试了一下,没有用。
有没有办法有效地释放/重用已删除节点/关系的空间?也许我错过了一些配置,或者它仅在企业版中可用?
EDIT:
最后,我有一些时间来测试,并且我运行了数据刷新几次的场景,也重新启动了服务器几次。在windows 10环境下在neo4j 3.0.0上进行测试。结果是(还不允许嵌入图像):
neo4j 存储大小 https://i.stack.imgur.com/SzRgs.png
每列显示用于进一步更新的存储大小,蓝线表示 Neo4j 服务器重新启动,最后一列(用棕色线分隔)代表运行 store-utils 后的大小。
如前所述,大小增长得非常快,并且根据文档,重新启动并没有帮助。只有 store-utils 有帮助(它们清理除 neostore.nodestore.db 之外的文件),但将 store-utils 集成到生产解决方案将是一个困难且混乱的解决方案。
谁能告诉我为什么存储空间在增长?