【发布时间】:2014-05-24 14:29:09
【问题描述】:
我有一个包含大量节点(1000 万+)的庞大数据库。整个数据库中只有一种关系。但是,有大量节点之间存在重复关系。我目前拥有的是这个 cypher 脚本,它找到所有重复的对,然后是一个运行并清理每个对的 python 脚本(在这些节点之间只留下一个唯一的关系)。
match (a)-[r]->(b) with a,b, count(*) as c where c>1 return a.pageid, b.pageid, c LIMIT 100000;
这对于小型数据库非常有效,但是当我在大型数据库上运行它时,它最终会崩溃,但会出现堆内存不足的异常(越来越多地撞上盒子并没有帮助)。
所以,问题有两个方面: 1)我可以对关系进行任何类型的索引(现在没有),这将有助于加快速度吗? 2)是否有一个密码查询可以(以快速的方式......或至少可靠地)删除数据库中的所有重复关系,为每个节点对(它们之间已经存在关系)只留下一个唯一的关系?
附:我在 ubuntu(12something)AWS 机器上运行 neo4j 2.0.1。
附言我意识到有这个答案:stackoverflow,但是他要问的是更具体的东西(针对 2 个已知节点),并且覆盖完整数据库的答案不再运行(语法更改?)
提前致谢!
【问题讨论】:
-
只是一些想法:您是否尝试过较小的批次,一次可能 100 个,将它们传递给您的 python 脚本? (不确定您是否需要每次通过获取 100K)您的节点上是否有索引,您可以在其中针对特定节点类型运行此操作,从而减少总节点空间?