Java 从遍历中获取顶点或路径时,Tinkerpop非常慢

Java 从遍历中获取顶点或路径时,Tinkerpop非常慢,java,graph-theory,gremlin,tinkerpop,tinkerpop3,Java,Graph Theory,Gremlin,Tinkerpop,Tinkerpop3,我的Java应用程序中有一个图形遍历,遍历完成后,填充路径对象需要300毫秒以上的时间。这很奇怪,因为它只发生在某些特定的遍历上,而其他遍历会立即填充它们的路径。下面是使用Tinkerpop3.3.1的Java代码示例 我有一个例子,两个顶点由一条边直接连接。每次我执行这个短遍历,我都会得到很高的处理时间。如果不执行fill()操作,遍历将立即完成。我还有其他需要移动的超过10条边的遍历,它们在

我的Java应用程序中有一个图形遍历,遍历完成后,填充路径对象需要300毫秒以上的时间。这很奇怪,因为它只发生在某些特定的遍历上,而其他遍历会立即填充它们的路径。下面是使用Tinkerpop3.3.1的Java代码示例

我有一个例子,两个顶点由一条边直接连接。每次我执行这个短遍历,我都会得到很高的处理时间。如果不执行fill()操作,遍历将立即完成。我还有其他需要移动的超过10条边的遍历,它们在<1ms的时间内处理和填充路径

在下面的代码中,我试图找到从“origs”中的顶点到“dests”中顶点的最短路径,而不经过集合“avoids”中的任何顶点。遍历本身在不到1ms的时间内完成,这是占用时钟的fill()方法

    Date startTime = new Date ();
    if (! dests.isEmpty ()){
        g.V (origs).where (is (P.without (avoids))).    
        repeat (
                out ().
                simplePath ().
                where (is (P.without (avoids)))
                ).
                until (is (P.within (dests))).
                limit (1).
                path ().
                fill (paths);  // This 'fill' is the line that can take > 300ms.
                               // When fill is removed from the code,
                               // this all executes within the same milli
    }
    Date endTime = new Date ();
    // Now compare start time and end time
    int diff = DateUtil.getMillisBetween  (startTime, endTime);

我也尝试过使用toList()方法,但这也使代码的执行时间超过300毫秒

在没有
fill()
toList()
的情况下,您的遍历是瞬时的,因为没有“迭代”,您不会得到结果,您只有一个
GraphTraversal
实例:

换言之:

t = g.V()
创建一个
GraphTraversal
实例,并且不将
g.V()
的结果分配给
t
。另一方面:

t = g.V().toList()

将遍历迭代到
列表中
,并将该结果分配给
t
。显然,前者将在瞬间完成(即<1ms),因为它只是构造了一个对象,而后者将花费更长的时间,因为它必须与底层图形存储交互。

如果没有
fill()
toList()
,您的遍历是瞬时的,因为没有“迭代”您没有得到结果,只有一个
GraphTraversal
实例:

换言之:

t = g.V()
创建一个
GraphTraversal
实例,并且不将
g.V()
的结果分配给
t
。另一方面:

t = g.V().toList()
将遍历迭代到
列表中
,并将该结果分配给
t
。显然,前者将在瞬间完成(即<1ms),因为它只构建了一个对象,而后者将花费更长的时间,因为它必须与底层图形存储交互