我需要在数据库中进行广度优先搜索。有3.863个节点,2.830.471属性和1.355.783关系。 N是我的起点,m是我在查询中的终点,但它太慢了,所以当我启动以下段中的查询时,我无法获得结果:
start n=node(42),m=node(31)
match p=n-[*1..]->m
return p,length(p)
order by length(p) asc
limit 1
如何优化该查询?因为它必须在20秒内完成最大值。我在自己的电脑上有8GB的内存,但我买了24 Gb ram专用服务器。另外,我的堆大小是4096-5120 MB。还有我的其他配置是关于以下部分中的查询:
neostore.nodestore.db.mapped_memory=2024M
neostore.relationshipstore.db.mapped_memory=614M
neostore.propertystore.db.mapped_memory=128M
neostore.propertystore.db.strings.mapped_memory=2024M
neostore.propertystore.db.arrays.mapped_memory=614M
如何解决这个问题?
答案 0 :(得分:2)
您的查询基本上收集任何长度的所有路径,对它们进行排序并返回最短的路径。有一种更好的方法可以做到这一点:
start n=node(42),m=node(31)
match p=shortestPath(n-[*..1000]->m)
return p,length(p)
始终为可变深度模式提供上限是最佳做法。