2014-01-17 47 views
0

太慢了,我用下面的代码找到两个节点之间的最短路径:最短路径查询与OrientDB

Iterable<Object> spath = orientGraph.getRawGraph().command(new OSQLSynchQuery<Object>( 
       "select shortestPath("+v1.getId()+","+v2.getId()+",'BOTH')")); 

我的问题是,我需要太多的时间。我的图形有36,692个顶点和367,662个边,查询需要大约2分钟。我使用orientdb-1.6.2。我的机器有一个2.3 Ghz CPU(i5),4GB RAM和320GB磁盘,我在Macintosh OSX Mavericks(10.9)上运行。

请注意,我没有为我的数据库使用任何特殊配置。我只是用下面的代码打开它:

orientGraph = new OrientGraph("plocal:"+orientDBDir); 

另外我的堆大小是在2GB。

有没有一种方法来提高程序的速度?

编辑:我想用下面的代码

System.out.println(spath.iterator().next()); 

一些测试我意识到spate.iterator旁边的()()线是减慢的程序之一后打印结果。这是为什么?

+0

所以你没有使用服务器,但你连接嵌入到OrientDB,对吧?这是冷启动吗?你是否尝试过执行2次相同的查询来查看它是否更快? – Lvca

+0

不,我没有使用服务器。这是一个冷静的开始。我运行它5次迭代,并没有得到更快。 – salvador

+0

请参阅编辑 – salvador

回答

2

版本1.7-SNAPSHOT解决了这个问题。现在从2分钟起,相同的查询在0.1秒内返回!