Почему addVertex () от JanusGraph намного медленнее, чем addV () с обходом графа? - PullRequest
1 голос
/ 30 апреля 2019

Я использую JanusGraph для добавления вершин в базу данных cassandra, и я заметил большое несоответствие производительности, когда дело доходит до добавления вершины с помощью (1) метода addVertex (), предоставляемого Java-библиотеками JanusGraph vs (2) функция обхода гремлина addV (). Почему существует такое расхождение?

Я использую версию JanusGraph 0.2.0 с cql в качестве внутреннего хранилища. Я создал тест, который сравнивает время в миллисекундах, необходимое для добавления и фиксации вершины в графе, тремя способами: (1) addV() функция gremlin, (2) addV() функция gremlin с последующим шагом next() в получить вновь созданную вершину и (3) метод JanusGraph addVertex(). Я начинаю с совершенно пустого хранилища графиков. Код, который я использовал, можно найти ниже.

final Builder builder = JanusGraphFactory.build()
        .set("storage.backend", "cql")
        .set("storage.hostname", Config.get(CommonConfig.cassandra_host));

final JanusGraph graph = builder.open();

long nowMillis = TimeUtils.nowMillis();
graph.traversal().addV("myLabel");
graph.traversal().tx().commit();
System.out.println("(1) - Add vertex traversal only took " + (TimeUtils.nowMillis() - nowMillis) + " millis");

nowMillis = TimeUtils.nowMillis();
graph.traversal().addV("myLabel").next();
graph.traversal().tx().commit();
System.out.println("(2) - Add vertex traversal and next took " + (TimeUtils.nowMillis() - nowMillis) + " millis");

nowMillis = TimeUtils.nowMillis();
graph.addVertex("myLabel");
graph.traversal().tx().commit();
System.out.println("(3) - Add vertex method took " + (TimeUtils.nowMillis() - nowMillis) + " millis");

Это пример вывода следующего:

(1) - Add vertex traversal only took 15 millis
(2) - Add vertex traversal and next took 739 millis
(3) - Add vertex method took 682 millis

Это намекает мне на то, что (3) добавление с помощью JanusGraph addVertex делает нечто похожее на (2), но я не понимаю, почему разница во времени так велика. Что заставляет (2) и (3) работать на порядок дольше, чем (1)?

1 Ответ

2 голосов
/ 30 апреля 2019

Ваш первый кусочек Gremlin, который вы тестируете, на самом деле не создает вершину. Вы просто измеряете создание Traversal объекта, но на самом деле не повторяете его . Два других фактически создают объект Vertex на графике. Общая рекомендация - не использовать Graph.addVertex(), так как это не ориентированный на пользователя API - он предназначен для поставщиков графов, таких как JanusGraph. Используйте только язык Gremlin для взаимодействия с вашим графом, и это обеспечит вам самый широкий уровень переносимости кода.

...