首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在无向图中优化有限路径的Neo4j循环路径查找

在无向图中优化有限路径的Neo4j循环路径查找
EN

Stack Overflow用户
提问于 2013-03-21 13:57:27
回答 1查看 585关注 0票数 1

作为"Neo4j循环路径在无向图中的慢查找“问题的后续。Michael和Wes好心地提供了帮助,但我没有将所学到的技术应用到路径查找查询中,这些查询应该返回路径。

问题:

下面的查询大约取3s,并从数据库返回13行(找到的路径)。我发现它很慢,并且希望它执行得更快,但是不知道如何优化它。(当然,这是一个例子,但我发现类似的其他查询也很慢。)

代码语言:javascript
运行
复制
START n=node:NodeIds('id:4000'), t=node:NodeIds('id:10778')   
MATCH path = (n)-[:ASSOCIATIVY_CONNECTION*1..3]-(t)   
RETURN nodes(path) AS Nodes

对个人资料也是如此:

代码语言:javascript
运行
复制
neo4j-sh (0)$ profile START n=node:NodeIds('id:4000'), t=node:NodeIds('id:10778')    MATCH path = (n)-[:ASSOCIATIVY_CONNECTION*1..3]-(t)    RETURN nodes(path) AS Nodes;
==> +-------------------------------------------------------------------------------------------+
==> | Nodes                                                                                     |
==> +-------------------------------------------------------------------------------------------+
==> | [Node[3984]{Id:4000},Node[986]{Id:1001},Node[18536]{Id:18552},Node[10763]{Id:10778}]      |
==> | [Node[3984]{Id:4000},Node[1085]{Id:1100},Node[9955]{Id:9970},Node[10763]{Id:10778}]       |
==> | [Node[3984]{Id:4000},Node[133348]{Id:133364},Node[9955]{Id:9970},Node[10763]{Id:10778}]   |
==> | [Node[3984]{Id:4000},Node[111409]{Id:111425},Node[18536]{Id:18552},Node[10763]{Id:10778}] |
==> | [Node[3984]{Id:4000},Node[64464]{Id:64480},Node[18536]{Id:18552},Node[10763]{Id:10778}]   |
==> | [Node[3984]{Id:4000},Node[64464]{Id:64480},Node[9955]{Id:9970},Node[10763]{Id:10778}]     |
==> | [Node[3984]{Id:4000},Node[64464]{Id:64480},Node[10763]{Id:10778}]                         |
==> | [Node[3984]{Id:4000},Node[64464]{Id:64480},Node[64455]{Id:64471},Node[10763]{Id:10778}]   |
==> | [Node[3984]{Id:4000},Node[79152]{Id:79168},Node[18536]{Id:18552},Node[10763]{Id:10778}]   |
==> | [Node[3984]{Id:4000},Node[69190]{Id:69206},Node[18536]{Id:18552},Node[10763]{Id:10778}]   |
==> | [Node[3984]{Id:4000},Node[25893]{Id:25909},Node[18536]{Id:18552},Node[10763]{Id:10778}]   |
==> | [Node[3984]{Id:4000},Node[31683]{Id:31699},Node[18536]{Id:18552},Node[10763]{Id:10778}]   |
==> | [Node[3984]{Id:4000},Node[6965]{Id:6980},Node[18536]{Id:18552},Node[10763]{Id:10778}]     |
==> +-------------------------------------------------------------------------------------------+
==> 13 rows
==> 2824 ms
==> 
==> ColumnFilter(symKeys=["path", "n", "t", "  UNNAMED3", "Nodes"], returnItemNames=["Nodes"], _rows=13, _db_hits=0)
==> Extract(symKeys=["n", "t", "  UNNAMED3", "path"], exprKeys=["Nodes"], _rows=13, _db_hits=0)
==>   ExtractPath(name="path", patterns=["  UNNAMED3=n-[:ASSOCIATIVY_CONNECTION*1..3]-t"], _rows=13, _db_hits=0)
==>     PatternMatch(g="(n)-['  UNNAMED3']-(t)", _rows=13, _db_hits=0)
==>       Nodes(name="t", _rows=1, _db_hits=1)
==>         Nodes(name="n", _rows=1, _db_hits=1)
==>           ParameterPipe(_rows=1, _db_hits=0) 

设置:

Neo4j图数据库有165 k节点和266 k关系,其中所有关系都是无向的(双向的),标签为"ASSOCIATIVY_CONNECTION“。没有一个节点连接到根节点。除了节点和关系之外,每个节点只存储一个整数值(图数据库不是用来存储实际数据,而是用于结构)。

此数据库的内存配置如下:

代码语言:javascript
运行
复制
wrapper.java.initmemory=1024
wrapper.java.maxmemory=1024

neostore.nodestore.db.mapped_memory=225M
neostore.relationshipstore.db.mapped_memory=250M
neostore.propertystore.db.mapped_memory=290M
neostore.propertystore.db.strings.mapped_memory=330M
neostore.propertystore.db.arrays.mapped_memory=330M

dataset是通过跟踪维基百科文章之间的互连而生成的图表,可以从这里下载。

我从Neo4j启动,在Windows8机器上运行Neo4j.bat 1.9.M05社区。我不认为硬件会成为一个问题,因为查询只会导致10%的CPU峰值。有GBs的免费RAM可用。

我非常感谢关于如何使这个查询运行得更快的指针。

编辑:在有283 k节点和538k关系的略有增强的相同图中尝试了相同的查询。现在需要20秒!

编辑2,增加内存限制:按照Michael的建议将wrapper.java.initmemory和wrapper.java.maxmemory设置提高到8192 (8GB)。它确实将运行Neo4j的java进程的内存占用增加到了2,25 up,并且提高了查询的性能:现在,在热身查询上(在第三次运行之后)大约是1s。我还将neo4j.properties配置文件中的内存设置分别提高到2GB,但没有任何明显的效果。为此,我需要64bJava运行时(浏览器可以轻松下载的默认运行时是32b版本),因此我下载了它的手动安装程序。安装后,Neo4j将自动开始使用它,而不是32b版本。

EN

回答 1

Stack Overflow用户

发布于 2013-03-28 18:09:45

在Windows上运行时,请增加堆大小,因为MMIO直接内存是windows上java堆的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15549573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档