尝试发出以下密码请求match (n:FOLDER)-[r*]->(m:FILE) with n,sum(m.size) as calc SET n.calculatedSize=calc
大约一分钟后,密码浏览器显示Unknown error
。
我的请求应该夸大整个子树的大小。因此,每个文件夹都应该具有所有子项的总结大小(FOLDER和FILE)。在生产环境中,将有大约900万件物品,最大深度为15件。
为什么请求返回Unknown error
,有没有更好的方法来实现计算的大小?
答案 0 :(得分:1)
fadanner,
您可能会发现,首先进行一级计算以将文件大小合并到其直接父文件夹中会更快,然后再进行操作。
MATCH (n:FOLDER)-[r]-(m:FILE)
WITH n, sum(m.size) as calc
SET n.calculatedSize = calc
在所有FOLDER节点上设置临时属性,以指示它们是否已被访问过。
MATCH (m:FOLDER) set m.seen = 0
将叶文件夹标记为已显示。
MATCH (m:FOLDER)
WHERE NOT (m)-[:CONTAINS]->(:FOLDER)
SET m.seen = 1
重复应用此查询,直到返回值为零以计算所有大小。
MATCH (m:FOLDER {seen : 0})-[:CONTAINS]->(n:FOLDER)
WITH m, sum(n.seen) AS val1, count(n) AS val2, sum(n.calculatedSize) AS val3
WHERE val1 = val2
SET m.calculatedSize = m.calculatedSize + val3, m.seen=1
RETURN count(m)
完成后,请删除“看过”'具有
的属性MATCH(m:FOLDER)
REMOVE m.seen
希望这有帮助。
恩典与和平,
吉姆
答案 1 :(得分:0)
尝试在变量路径长度中指定限制:
match (n:FOLDER)-[r*..15]->(m:FILE)
with n,sum(m.size) as calc
SET n.calculatedSize=calc