【发布时间】:2015-09-09 06:46:34
【问题描述】:
我有具有数百万个人员类型节点的 neo4j 数据库,我想删除所有人员节点的特定属性。我试图通过匹配查询来实现它,但它正在扫描所有节点。
这是我尝试过的查询。
MATCH (p:Person)
REMOVE p.fatherName
这个查询还有其他快速的替代方法吗,
【问题讨论】:
-
这个查询不应该扫描所有节点(
AllNodesScan),它应该只获取带有该标签的节点(NodeByLabelScan)。如果确实是扫描所有节点,请分享EXPLAIN或PROFILE的结果(见stackoverflow.com/questions/20628663/…)。 -
是的,您对 NodeByLabelScan 的看法是正确的,但我只有人员类型的节点,并且所有节点都有这个标签。这就是为什么我说它正在扫描每个节点。
-
嗯,没有更简单的方法可以在密码中声明该操作。为什么速度对您来说是个问题?您是否需要重复执行此操作,还是在建模时进行一次性维护操作?通过嵌入数据库或使用服务器扩展,您可以使用 Java API 获得更好的性能,但您也可以只分页查询并重复运行它。
-
实际上它也占用了大量资源,它消耗了我系统的所有内存,大约 8gb,大约 1 小时后它给了我 gcc 内存不足的异常。这就是为什么我试图找出一些可行的解决方案。
-
在这种情况下,分页查询应该会有所帮助,MicTech 在他的答案中添加了如何做到这一点。尝试 10k 到 100k 之间的限制以找到一个有效的,然后运行查询,直到它显示没有属性被删除。
标签: neo4j graph-databases nosql