2016-03-01 66 views
1

我使用Titan 1.0.0和Cassandra作为后端。如何在Titan图形数据库上实现* *

我有位置数据(纬度,经度)作为节点和这些节点之间的边缘。我想找到从节点A到节点B的最短路径。图形大小非常大。目前我正在使用此查询来查找两个节点之间的路径。

g.V(fromNode).repeat(both().simplePath()).until(is(toNode)).limit(1).path().fill(list); 

这个查询是非常低效的,并给出内存错误的路径规模超过10 阅读最短路径算法后,我才知道,实施A *会比执行Dijkstra的是在一个更可行*更少的图将被探索。

现在我可以使用JUNG并将TitanGraph加载到内存中并实现我自己的A *以获得最短路径。但我不希望整个图形在内存中。

请建议我应该如何在TitanGraph上实现A *。我应该使用API​​查询图形还是应该先将图形加载到内存中,然后在内存图形上运行A *。

我会感谢任何其他建议。

回答

0

首先,这是一个与Tinkerpop3更相关的问题,而不是泰坦。我同意你在图形中加载图形是一个完全不好的主意。

最好的方法是在Gremlin控制台上直接运行A星算法。

Gremlin控制台执行Groovy代码。你可以实现一个.groovy文件A *算法,并将其加载到小鬼控制台这样:

gremlin> :load my_folder/a-star-algo-tp3.groovy 

比方说,你定义了这个文件里面的方法称为:

List<Element> a_star_algo(Graph graph, Object fromId, Object toId) 

你可以叫它从您的gremlin控制台这样:

list = a_star_algo(graph, v1.id(), v2.id()) 

您可以使用A *算法实现此方法。这个repo在Groovy中使用它们自己的数据结构实现算法。我不确定它们的实现效率如何,但你可以看看。

+0

谢谢:)。目前我已经实现了使用Java。而且不需要太多时间来执行。我也会尝试这种方法。谢谢。 – user825828