带有valueMap()和toList()的gremlin查询需要时间才能得到结果

带有valueMap()和toList()的gremlin查询需要时间才能得到结果,gremlin,janusgraph,janus,Gremlin,Janusgraph,Janus,我正在使用嵌入式模式下部署的janus graph。我正在使用java。并触发以下查询 -->g.V().已('deleted',false).valueMap()//速度慢 -->g.V().has('deleted',false)。toList()//慢 在实现复合索引之后,上述查询也需要时间 -->g.V().has('deleted',false)//fast 上面的查询速度很快,并且使用在已删除键上创建的已实现的复合索引 还使用java代码尝试了同样的方法 List&l

我正在使用嵌入式模式下部署的janus graph。我正在使用java。并触发以下查询

-->g.V().已('deleted',false).valueMap()//速度慢

-->g.V().has('deleted',false)。toList()//慢

在实现复合索引之后,上述查询也需要时间

-->g.V().has('deleted',false)//fast

上面的查询速度很快,并且使用在已删除键上创建的已实现的复合索引

还使用java代码尝试了同样的方法

        List<Vertex> list = new ArrayList<>();

        DateTime dt1 = new DateTime();
        JanusGraphQuery<? extends JanusGraphQuery> query = GraphClient.getJGraph().query();
        Iterator iterator = query.has("deleted",false).vertices().iterator();
        while(iterator.hasNext()) {
            Vertex next = (Vertex) iterator.next();
            getPropertyMapByVertex(next); //time consuming to convert vertex into Map.
            list.add(next);
        }


     public static Map<String, Object> getPropertyMapByVertex(Vertex vertex) {
    Map<String, Object> propertyMap = new HashMap<>();
    try {
        if (vertex != null) {
            Iterator<VertexProperty<Object>> properties = vertex.properties();
            if (properties != null) {
                while (properties.hasNext()) {
                    Property<Object> property = properties.next();
                    propertyMap.put(property.key(), property.value());
                }
                propertyMap.put(GraphConstants.VERTEX_ID, vertex.id());
            }
        }
    } catch (Exception e) {
        logger.error("Exception in getPropertyMapByVertex : {}", ExceptionUtils.getStackTrace(e));
    }
    return propertyMap;
}
List List=new ArrayList();
DateTime dt1=新的DateTime();

JanusGraphQuery我没有关注JanusGraph的开发进度,但是如果
multiQuery
API仍然可用,您应该尝试一下:

List<Vertex> vertices = g.V().has('deleted',false).toList();
graph.multiQuery().addAllVertices(vertices).properties();
列出顶点=g.V().has('deleted',false).toList();
graph.multiQuery().addAllVertices(顶点).properties();
这是从内存中编写的未经测试的代码,最终看起来可能有点不同


但是,由于您提到
g.V().has('deleted',false.)。toList()
很慢,但是
g.V().has('deleted',false)
很快,我不确定您是否真的了解发生了什么。后一条语句本身没有任何作用,而前一条语句实际上获取了所有顶点。

我没有跟踪JanusGraph中的开发进度,但是如果
多查询API仍然可用,您应该尝试一下:

List<Vertex> vertices = g.V().has('deleted',false).toList();
graph.multiQuery().addAllVertices(vertices).properties();
列出顶点=g.V().has('deleted',false).toList();
graph.multiQuery().addAllVertices(顶点).properties();
这是从内存中编写的未经测试的代码,最终看起来可能有点不同

但是,由于您提到
g.V().has('deleted',false.)。toList()
很慢,但是
g.V().has('deleted',false)
很快,我不确定您是否真的了解发生了什么。后一条语句本身不做任何事情,而前一条语句实际上获取所有顶点