Гремлиновый запрос с valueMap () и toList () требует времени, чтобы получить результат - PullRequest
0 голосов
/ 21 января 2020

Я использую граф Януса, развернутый во встроенном режиме. И я использую java. И запускает следующие запросы

-> gV (). Has ('удалено', false) .valueMap () // медленно

-> gV (). Has ('удалено') , false) .toList () // медленно

вышеупомянутый запрос также требует времени после реализации составных индексов

-> gV (). has ('удалено', false) // быстро

Приведенный выше запрос выполняется быстро и использует встроенный составной индекс, созданный для удаленного ключа.

Также пытался сделать то же самое, используя 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;
}

у нас есть какой-нибудь способ быстрого метода "getPropertyMapByVertex" или любой другой способ запустить запрос и быстро получить данные, используя java.

1 Ответ

1 голос
/ 24 января 2020

Я не следил за ходом разработки в JanusGraph, но если API multiQuery все еще доступен, вам следует попробовать:

List<Vertex> vertices = g.V().has('deleted',false).toList();
graph.multiQuery().addAllVertices(vertices).properties();

Это непроверенный код, написанный из памяти, в конечном итоге это может выглядеть немного иначе.

Однако, поскольку вы упоминаете, что g.V().has('deleted',false).toList() медленный, а g.V().has('deleted',false) быстрый, я не уверен, что вы действительно понимаете, что происходит. Последнее утверждение само по себе абсолютно ничего не делает, в то время как первое утверждение фактически выбирает все вершины.

...