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