Graql компилируется или переводится в gremlin? - PullRequest
0 голосов
/ 25 декабря 2018

Я немного обнимаю Гракна, чтобы понять его добавленную стоимость. Интересно, скомпилирован ли Graql или переведен на шаг обхода gremlin?

Это заставляет меня задуматься о разнице выразительности между Sparql и Graql, учитывая, что первое до сих пор не полностью переведено в Gremlin.Кажется, это открытая проблема?Является ли Graql существенно проще, чем sparql, и это объясняет тот факт, что он полностью переведен, если это так?Если нет, то есть ли какое-либо ограничение в переводе его на шаги гремлина на этом этапе?

1 Ответ

0 голосов
/ 19 февраля 2019

Я постараюсь пролить свет на ваши вопросы.

Начнем с того, что Graql был разработан как высокоуровневый, понятный человеку язык запросов.Основная идея состояла в том, чтобы абстрагировать структуру данных графа нода-вершина с концепциями, которые являются специфическими для данного пользовательского домена.Таким образом, пользователю не нужно беспокоиться о базовом представлении графа и низкоуровневых конструкциях gremlin, и вместо этого он может работать с высокоуровневыми терминами, которые он определил сам и / или ему знакомо.

ТеперьС точки зрения реализации Graql - это абстракция над Gremlin, которая переводит высокоуровневые запросы в обходы Gremlin, которые затем могут быть выполнены для определенного графа.Однако отображение между Граклом и Гремлином не 1-1.Фактически, Graql работает с некоторым подмножеством Gremlin, которое позволяет фиксировать предполагаемое поведение языка Graql.Мы никогда не собирались находить такое отображение, поскольку целью было преобразовать высокоуровневые запросы в запросы, понятные базовому графовому процессору.

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

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

...