Я постараюсь пролить свет на ваши вопросы.
Начнем с того, что Graql был разработан как высокоуровневый, понятный человеку язык запросов.Основная идея состояла в том, чтобы абстрагировать структуру данных графа нода-вершина с концепциями, которые являются специфическими для данного пользовательского домена.Таким образом, пользователю не нужно беспокоиться о базовом представлении графа и низкоуровневых конструкциях gremlin, и вместо этого он может работать с высокоуровневыми терминами, которые он определил сам и / или ему знакомо.
ТеперьС точки зрения реализации Graql - это абстракция над Gremlin, которая переводит высокоуровневые запросы в обходы Gremlin, которые затем могут быть выполнены для определенного графа.Однако отображение между Граклом и Гремлином не 1-1.Фактически, Graql работает с некоторым подмножеством Gremlin, которое позволяет фиксировать предполагаемое поведение языка Graql.Мы никогда не собирались находить такое отображение, поскольку целью было преобразовать высокоуровневые запросы в запросы, понятные базовому графовому процессору.
Теперь эффективность генерации обхода.Graql-запросы могут быть разложены на свойства (has, isa, sub и т. Д.) И фрагменты.Каждый фрагмент имеет определенный аналог Gremlin, и каждое свойство может содержать несколько фрагментов.Теперь перевод фрагментов однозначен, однако существует большая свобода в выборе и расположении фрагментов, которые входят в свойство.Учитывая, что запросы содержат несколько свойств, это делает организацию строго нетривиальной задачей.Для выполнения этой договоренности, которая в Gremlin передается пользователю, мы реализовали процессор запросов.Идея процессора состоит в том, чтобы выбрать такое расположение и упорядочение фрагментов, чтобы результирующий запрос выполнялся максимально быстро.Это напоминает процессоры SQL-запросов, и мотивация точно такая же, чтобы абстрагировать оптимизацию запросов от пользователя.
Мы активно работаем над компонентом планирования запросов, и хотя он не дает гарантии того, что во всех случаях будет составлен самый оптимальный план, мы пытаемся привести сработанные планы в соответствие с оптимальными решениями.