Итак, я выполняю два очень простых запроса gremlin как через консоль Gremlin, так и через HTTP-запрос (отправленный с того же компьютера, на котором находится сервер Gremlin). Запросы выглядят так:
Первый запрос:
console: g.V(127104, 1069144, 590016, 200864).out().count()
http: curl -XPOST -Hcontent-type:application/json -d '{"gremlin":"g.V(127104, 1069144, 590016, 200864).out().count()}' http://localhost:8182
Второй запрос:
console: g.V(127104, 1069144, 590016, 200864).out().in().dedup().count()
http: curl -XPOST -Hcontent-type:application/json -d '{"gremlin":"g.V(127104, 1069144, 590016, 200864).out().in().dedup().count()}' http://localhost:8182
Это ни в коем случае не огромный график - первый запрос возвращает 750, а второй запрос возвращает 9154. Моя проблема в том, что я вижу огромные различия в производительности между запросами, выполняемыми через HTTP, по сравнению с консолью. Для первого запроса консоль и HTTP-запрос немедленно возвращаются, и, просматривая журнал сервера gremlin, я рад видеть, что запрос занимает всего 1-2 миллисекунды в обоих случаях. Все хорошо.
Теперь для второго запроса картина меняется. Хотя консоль продолжает предоставлять ответ немедленно, теперь для возврата HTTP-запроса требуется от 4 до 5 секунд (!!)! Журнал сервера сообщает примерно одинаковое время выполнения (около 50-60 мс) для обоих выполнений второго запроса, так что же происходит? Я делаю только count (), поэтому медленный HTTP-ответ не может быть проблемой сериализации - ему нужно только вернуть число, как в первом запросе.
У кого-нибудь есть хорошие идеи?
UPDATE:
Запуск profile()
дает некоторые интересные результаты (скриншоты прилагаются ниже). Похоже, что все работает намного медленнее при вызове через HTTP, что для меня не имеет смысла ...
с консоли:
Через HTTP-запрос: