【发布时间】:2016-06-11 07:23:49
【问题描述】:
我正在使用 neo4j 3.0.1 社区,我有几 GB 的数据。这些数据很快就会过时(比如每天 2.3 次),我必须先创建新数据,然后删除旧数据(因此在任何时候都有一些数据可用)。
问题在于 neo4j 不会重用已删除节点/关系中的空间。 我使用 MATCH (n) WHERE 条件 DETEACH DELETE n
我可以看到节点正在被删除(它们的数量是恒定的 ~30M),但大小正在增长(在 12 次更新后,大小几乎正好是应有大小的 12 倍)。
我找到了以前的帖子 Neo4J database size / shrinking 关于store-utils,但我想找到更好的解决方案。
我还发现了旧问题(来自版本 1.x)neostore.* file size after deleting millions node,但至少在我的情况下,它根本不像答案那样工作。
有一些建议可以删除所有数据库文件并创建一个新文件,但这需要停止服务,这是不应该发生的。
我还发现了一些信息,为了重用空间,您需要先重新启动 DB,也尝试过,但没有成功。
有没有办法从已删除的节点/关系中有效地释放/重用空间?也许我错过了一些配置,或者它仅在企业版中可用?
编辑:
最后我有一些时间进行测试,我运行了几次刷新数据的场景,也重新启动了几次服务器。在 windows 10 环境下的 neo4j 3.0.0 上进行了测试。结果是(尚未允许嵌入图像):
每一列表示存储大小以供进一步更新,蓝线表示neo4j服务器重启,最后一列(用棕色线分隔)代表运行store-utils后的大小。
如前所述,大小增长得相当快,并且根据文档,重新启动没有帮助。只有 store-utils 有帮助(他们清理除了 neostore.nodestore.db 之外的文件),但将 store-utils 集成到生产解决方案将是一个困难且混乱的解决方案。
谁能给我一个提示,为什么存储空间会增长?
【问题讨论】:
标签: neo4j graph-databases