Я использую 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)?