Разработано | Марко А. Родригес |
---|---|
Разработчик | Apache TinkerPop из Apache Software Foundation |
Впервые появился | 2009 |
Стабильный выпуск | Гремлин 3.3.3 [1] |
Операционные системы | Кроссплатформенность (мультиплатформенность) |
Лицензия | Лицензия Apache 2.0 |
Интернет сайт | Официальный сайт |
Диалекты | |
Gremlin ‑ Java8, Gremlin ‑ Groovy, Gremlin ‑ Python, Gremlin ‑ Scala, Gremlin ‑ Clojure, Gremlin ‑ PHP, Gremlin ‑ JavaScript, Gremlin ‑ Typeset | |
Под влиянием | |
Регулярное выражение , XPath , Ripple, SPARQL , SQL , Java / JVM |
Gremlin - это язык обхода графов и виртуальная машина, разработанная Apache TinkerPop из Apache Software Foundation . Gremlin работает как с графическими базами данных на основе OLTP, так и с графическими процессорами на основе OLAP . Gremlin в автоматах и функциональный языке фундамент позволяют Gremlin естественно поддерживать императивные и декларативную обработку запросов, хост языка агностицизм, определяемого пользователь языки домена специфической , расширяемый компилятор / оптимизатор, одно- и мульти-машинные модели исполнения, гибридные depth- и в ширину оценки , а также полнота по Тьюрингу. [2]
В качестве пояснительной аналогии Apache TinkerPop и Gremlin для графических баз данных представляют собой то же самое, что JDBC и SQL для реляционных баз данных . Точно так же машина обхода Gremlin предназначена для графических вычислений, как виртуальная машина Java для вычислений общего назначения. [3]
История [ править ]
- 2009-10-30 рождается проект, сразу получивший название "TinkerPop"
- 2009-12-25 v0.1 - первый релиз
- 2011-05-21 Выпущена версия 1.0
- 2012-05-24 выпущена версия 2.0
- 2015-01-16 TinkerPop становится проектом Apache Incubator
- 2015-07-09 выпущена v3.0.0-incubating
- 2016-05-23 Apache TinkerPop становится проектом верхнего уровня
- 2016-07-18 v3.1.3 и v3.2.1 - первые выпуски Apache TinkerPop
- 2017-12-17 выпущена v3.3.1
- 2018-05-08 Выпущена версия 3.3.3
- 2019-08-05 Выпущена v3.4.3
- 2020-02-20 Выпущена v3.4.6
Интеграция с поставщиком [ править ]
Gremlin - это лицензированный Apache2 язык обхода графов, который могут использовать поставщики графовых систем. Обычно существует два типа поставщиков графовых систем: графические базы данных OLTP и графические процессоры OLAP. В таблице ниже указаны поставщики графов, которые поддерживают Gremlin.
Продавец | Система графиков |
---|---|
Neo4j | база данных графов |
OrientDB | база данных графов |
DataStax Enterprise (5.0+) | база данных графов |
Hadoop ( Гираф ) | графический процессор |
Hadoop ( Искра ) | графический процессор |
InfiniteGraph | база данных графов |
ЯнусГраф | база данных графов |
Cosmos DB | база данных графов |
Амазонка Нептун | база данных графов |
Примеры обхода [ править ]
Следующие ниже примеры запросов и ответов Gremlin в среде Gremlin-Groovy относятся к графическому представлению набора данных MovieLens . [4] Набор данных включает пользователей, которые оценивают фильмы. У каждого пользователя есть одно занятие, и с каждым фильмом связана одна или несколько категорий. Схема графика MovieLens подробно описана ниже.
пользователей - рейтинг [ звезд : 0 - 5 ] -> фильмпользователь - род занятий -> род занятийфильм - категория -> категория
Простые обходы [ править ]
Для каждой вершины в графе испустите ее метку, затем сгруппируйте и подсчитайте каждую отдельную метку.
гремлин > g . V (). метка (). groupCount () ==> [ занятие: 21 , фильм: 3883 , категория: 18 , пользователь: 6040 ]
В каком году был снят самый старый фильм?
гремлин > g . V (). hasLabel ( 'фильм' ). значения ( "год" ). мин () ==> 1919
Какой средний рейтинг у «Крепкого орешка»?
гремлин > g . V (). имеет ( 'фильм' , 'имя' , 'Крепкий орешек' ). inE ( «оцененный» ). значения ( «звезды» ). среднее () ==> 4.121848739495798
Обходы проекций [ править ]
Для каждой категории создайте карту с ее названием и количеством фильмов, которые она представляет.
гремлин > g . V (). hasLabel ( 'категория' ). как ( 'a' , 'b' ). выберите ( 'a' , 'b' ). автор: ( 'имя' ). по ( INE ( 'категории' .) рассчитывать ()) ==> [ а: Анимация , B: 105 ] ==> [ а: Дети ' s , б: 251 ] ==> [ а: Комедия, b: 1200 ] ==> [ a: Приключение , b: 283 ] ==> [ a: Фантазия , b: 68 ] ==> [ a: Романтика , b: 471 ] ==> [ a: Драма , b : 1603 ] ==> [ a: Действие , b: 503 ] ==> [ a: Преступление , b: 211 ] ==> [ a: Триллер , b: 492 ] ==> [а: Ужасы , б: 343 ] ==> [ а: Sci - Fi , б: 276 ] ==> [ а: Документальный , б: 127 ] ==> [ а: война , б: 143 ] ==> [ a: Мюзикл , b: 114 ] ==> [ a: Тайна , b: 106 ] ==> [ a: Фильм - Нуар , b: 44 ] ==> [ a:Вестерн , р: 68 ]
Для каждого фильма с не менее 11 рейтингами отправьте карту с его названием и средней оценкой. Отсортируйте карты в порядке убывания их среднего рейтинга. Выпустите первые 10 карт (т.е. 10 лучших).
гремлин > g . V (). hasLabel ( 'фильм' ). как ( 'a' , 'b' ). где ( inE ( 'Rated' ). count (). is ( gt ( 10 ))). выберите ( 'a' , 'b' ). автор: ( 'имя' ). by ( inE ( 'Rated' ). values ( 'stars' ). mean ()). заказ ().по ( выберите ( 'b' ), decr ). Ограничение ( 10 ) ==> [ A: Sanjuro , б: 4,608695652173913 ] ==> [ A: Семь самураев ( Великолепные Семь ), б: 4,560509554140127 ] ==> [ A: Shawshank Искупление , , б: 4,554557700942973 ] = => [ a: Крестный отец , The , b: 4.524966261808367 ] ==> [ а: Закрыть бритье , , б: +4,52054794520548 ] ==> [ а: Обычные Подозреваемые , , б: +4,517106001121705 ] ==> [ а: Schindler ' s Список , б: +4,510416666666667 ] ==> [ A: неправильные Брюки , , б: 4,507936507936508 ] ==> [ A: Sunset Blvd . ( . К . а . Sunset Boulevard ), б: +4,491489361702127 ] ==> [ а: Рейдеры из в утраченного ковчега , б: 4,47772 ]
Обходы декларативного сопоставления с образцом [ править ]
Gremlin поддерживает декларативное сопоставление шаблонов графов, аналогичное SPARQL . Например, в следующем ниже запросе используется шаг Match () Gremlin .
Какие боевики 80-х нравятся 30-летним программистам? Группа подсчитывает фильмы по их имени и сортирует карту подсчета групп в порядке убывания по значению. Обрежьте карту до 10 лучших и отправьте записи карты.
гремлин > g . V (). match ( __ . as ( 'a' ). hasLabel ( 'movie' ), __ . as ( 'a' ). out ( 'category' ). has ( 'name' , 'Action' ), __ . as ( ' a ' ). has ( ' год ' , между ( 1980 , 1990 )), __ . as ('а' ). inE ( «оцененный» ). как ( 'b' ), __ . как ( 'b' ). has ( 'stars' , 5 ), __ . как ( 'b' ). outV (). как ( 'c' ), __ . как ( 'c' ). out ( 'занятие' ). has ( 'имя' , 'программист' ), __ .как ( 'c'). has ( 'возраст' , от ( 30 , 40 ))). выберите ( 'а' ). groupCount (). автор: ( 'имя' ). заказ ( местный ). по ( valueDecr ). предельные ( местные , 10 ) ==> рейдовиков из в Потери Ark = 26 ==> Звездные войны Эпизод V - The Empire Strikes Назад = 26 ==> Terminator , = 23 ==> Звездные войны Эпизод VI - Возвращение из в Jedi = 22 ==> Принцесса Брайд , = 19 ==> Чужие = 18 ==> Boat , ( Das загрузки ) = 11 ==> Индиана Джонс и Последний крестовый = 11 ==> Star Trek Аурой из Khan = 10 ==> Бездны , = 9
Обход OLAP [ править ]
Какие фильмы занимают центральное место в неявной 5-звездочной диаграмме?
гремлин > г = граф . traversal ( компьютер ( SparkGraphComputer )) ==> graphtraversalsource [ hadoopgraph [ gryoinputformat -> gryooutputformat ], sparkgraphcomputer ] gremlin > g . V (). repeat ( outE ( 'рейтинг' ). has ( 'stars' , 5 ). inV (). groupCount ( 'm' ). by ('имя' ). inE ( «оцененный» ). имеет ( 'звезды' , 5 ). outV ()). раз ( 4 ). Колпачок ( 'м' ) ==> Star Wars Episode IV - New Hope 35405394353105332 ==> American Beauty 31943228282020585 ==> Налетчики из в Затерянный Ковчег 31224779793238499 ==> Звездные войны Эпизод V - Империя наносит ответный удар Назад 30434677119726223 ==> Godfather , The 30258518523013057 ==> Shawshank Redemption , 28297717387901031 ==> Schindler ' s Список 27539336654199309 ==> Silence из самых ягнят , 26736276376806173 ==> Fargo 26531050311325270 ==> Матрица , 26395118239203191
Машина обхода графа Гремлина [ править ]
Gremlin - это виртуальная машина, состоящая из набора команд и механизма выполнения. Проводится аналогия между Gremlin и Java .
Экосистема Java | Экосистема Гремлин |
---|---|
Язык программирования Apache Groovy | Гремлин-Groovy |
Язык программирования Scala | Гремлин-Скала |
Язык программирования Clojure | Гремлин-Clojure |
... | ... |
Язык программирования Java | Гремлин-Java8 |
Набор инструкций Java | Библиотека шагов Gremlin |
Виртуальная машина Java | Гремлин обходной станок |
Шаги Гремлина (набор инструкций) [ править ]
Следующий обход - это обход Gremlin в диалекте Gremlin-Java8.
г . V (). как ( "а" ). out ( "знает" ). как ( "б" ). выберите ( «а» , «б» ). by ( "имя" ). по ( "возраст" )
Язык Гремлина (то есть свободно-стиль экспрессировать обход графа) может быть представлен на любом языке хоста , который поддерживает композиции функций и функцию вложенности . Из-за этого простого требования существуют различные диалекты Gremlin, включая Gremlin-Groovy, Gremlin-Scala, Gremlin-Clojure и т. Д. Вышеупомянутый обход Gremlin-Java8 в конечном итоге компилируется до последовательности шагов, называемой обходом . Строковое представление обхода выше представлено ниже.
[ GraphStep ( [] , вершина ) @ [ a ] , VertexStep ( OUT , [ знает ] , вершина ) @ [ b ] , SelectStep ( [ a , b ] , [ значение ( имя ), значение ( возраст ) ] ) ]
Эти шаги являются примитивы графа обхода машины Gremlin. Это параметризованные инструкции, которые в конечном итоге выполняет машина. Набор инструкций Gremlin составляет примерно 30 шагов. Этих шагов достаточно для обеспечения вычислений общего назначения и того, что обычно требуется для выражения общих мотивов любого запроса обхода графа.
Учитывая, что Gremlin - это язык, набор инструкций и виртуальная машина, можно разработать другой язык обхода, который компилируется в машину обхода Gremlin (аналогично тому, как Scala компилируется в JVM ). Например, популярный язык сопоставления графовых шаблонов SPARQL может быть скомпилирован для выполнения на машине Gremlin. Следующий запрос SPARQL
ВЫБРАТЬ ? ? Б ? С WHERE { ? Лицо . ? a ex : знает ? b . ? a ex : создано ? c . ? b пример : создано ? c . ? b пример : возраст ? d . ФИЛЬТР ( ? D < 30 ) }
компилируется в
[ GraphStep ( [] , вершина ), MatchStep ( AND , [[ MatchStartStep ( a ), LabelStep , IsStep ( eq ( Person )), MatchEndStep ] , [ MatchStartStep ( a ), VertexStep ( OUT , [ знает ] , вершина ), MatchEndStep ( b ) ] , [ MatchStartStep ( a), VertexStep ( OUT , [ created ] , vertex ), MatchEndStep ( c ) ] , [ MatchStartStep ( b ), VertexStep ( OUT , [ created ] , vertex ), MatchEndStep ( c ) ] , [ MatchStartStep ( b ), PropertiesStep ( [ возраст ] , значение ), MatchEndStep( d ) ] , [ MatchStartStep ( d ), IsStep ( gt ( 30 )), MatchEndStep ]] ), SelectStep ( [ a , b , c ] ) ] .
В Gremlin-Java8 указанный выше запрос SPARQL будет представлен, как показано ниже, и скомпилирован в идентичную последовательность шагов Gremlin (то есть обход).
г . V (). match ( as ( "a" ). label (). is ( "person" ), as ( "a" ). out ( "знает" ). as ( "b" ), as ( "a" ). out ( "created" ). as ( "c" ), as ( "b" ). out ( "created" ). as ( "c" ), как ( "b"). ценности ( «возраст» ). as ( "d" ), as ( "d" ). есть ( gt ( 30 ))). select ( "a" , "b" , "c" )
Gremlin Machine (виртуальная машина) [ править ]
Машина обхода графа Gremlin может выполняться на одной машине или в многомашинном вычислительном кластере. Агностицизм выполнения позволяет Gremlin работать как с графовыми базами данных (OLTP), так и с графовыми процессорами (OLAP).
См. Также [ править ]
- Cypher Query Language , еще один язык запросов к данным графов
- SPARQL , еще один язык запросов к данным графов
Ссылки [ править ]
- ^ "Гремлин 3.3.3" . Проверено 8 мая 2018 года .
- ^ Родригес, Марко А. (2015). «Машина и язык обхода графа Гремлина (приглашенный доклад)». Машина и язык обхода графа Гремлина . С. 1–10. arXiv : 1508.03843 . DOI : 10.1145 / 2815072.2815073 . ISBN 9781450339025.
- ^ "Преимущества машины обхода графа Гремлина" . 2015-09-14 . Проверено 17 сентября 2015 года .
- ^ "Язык обхода графа Гремлина" . 2015-08-19 . Проверено 22 августа 2015 года .
Внешние ссылки [ править ]
- Домашняя страница Apache TinkerPop
- sql2gremlin.com (TinkerPop2)
- Родригес, Массачусетс, " Машина и язык обхода графа Гремлина ", Труды конференции по языкам программирования баз данных ACM, октябрь 2015 г.