Язык графовых запросов
Из Википедии, бесплатной энциклопедии
Язык графовых запросов | |
---|---|
Разработчик | ISO/IEC JTC 1/SC 32: Data management and interchange[вд][1] |
Испытал влияние | SQL, Cypher (язык запросов) и GSQL |
Сайт | gqlstandards.org (англ.) |
Язык графовых запросов (англ. Graph Query Language, GQL) — стандартизированный язык запросов для графов свойств, впервые описанный в стандарте ISO/IEC 76120, выпущенном ISO/IEC в апреле 2024.
История
[править | править код]Проект языка графовых запросов является итогом различных инициатив, начатых в 2016 году, в том числе предложения от разработчиков СУБД Neo4j другим поставщикам баз данных в июле 2016 года[2] и предложения от технических специалистов компании Oracle в рамках процесса стандартизации ISO/IEC JTC 1, поступившего позднее в том же году[3].
Предложение проекта GQL 2019
[править | править код]В сентябре 2019 года предложение о проекте по созданию нового стандартного языка графовых запросов (ISO/IEC 39075 Информационные технологии — Языки баз данных — GQL)[4] было одобрено голосованием национальных органов по стандартизации, являющихся членами Объединённого технического комитета ISO/IEC 1 (ISO/IEC JTC 1). JTC 1 отвечает за международные стандарты информационных технологий. GQL задуман как декларативный язык запросов к базам данных наподобие SQL.
В предложении проекта GQL 2019 года говорится:
"Использование графа в качестве фундаментального представления для моделирования данных является новым подходом в управлении данными. В этом подходе набор данных моделируется как граф, представляющий каждую сущность данных как вершину (также называемую узлом) графа, а каждую связь между двумя сущностями как ребро между соответствующими вершинами. Графовая модель данных привлекает внимание своими уникальными преимуществами.
Во-первых, графовая модель может быть естественным образом подходящей для наборов данных, которые имеют иерархическую, сложную или даже произвольную структуру. Такие структуры можно легко закодировать в графовой модели как рёбра. Это может быть удобнее, чем реляционная модель, которая требует нормализации набора данных в набор таблиц с фиксированными типами строк.
Во-вторых, графовая модель обеспечивает эффективное выполнение дорогостоящих запросов или аналитических функций данных, которые должны учитывать многоступенчатые взаимосвязи между сущностями данных, такими как запросы достижимости[англ.], запросы кратчайшего или самого дешёвого пути или поиск центральности. В настоящее время используются две графовые модели: модель Resource Description Framework (RDF) и модель Property graph[англ.]. Модель RDF была стандартизирована W3C в ряде спецификаций. Модель Property Graph, с другой стороны, имеет множество реализаций в графовых базах данных, графовых алгоритмах и средствах обработки графов. Однако общий стандартизированный язык запросов для свойств графов (как, например, SQL для реляционных баз данных) отсутствует. Для заполнения этого пробела предлагается использовать GQL"[5].
Официальный стандарт ISO
[править | править код]Стандарт GQL, ISO/IEC 39075:2024 «Информационные технологии — Языки баз данных — GQL», был официально опубликован ISO 12 апреля 2024 года[6].
Организация проекта GQL
[править | править код]Проект GQL возглавляют Стефан Плантиков (нем. Stefan Plantikow) (который был первым ведущим инженером проекта Cypher для Apache Spark, который реализовали разработчики Neo4j) и Стивен Кэннан (англ. Stephen Cannan) (технический редактор опечаток SQL). Они также являются редакторами первоначальных ранних рабочих проектов спецификации GQL[7].
The Existing Languages and the Property Graph Schema working groups formed in late 2018 and early 2019 respectively. A working group to define formal denotational semantics for GQL was proposed at the third GQL Community Update in October 2019.
По первоначальной задумке[3] целью проект GQL было дополнение работы по созданию осуществимой нормативной спецификации естественного языка с помощью усилий сообщества, которые позволяют вносить вклад тем, кто не может или не заинтересован в участии в формальном процессе определения международного стандарта JTC 1[8][9]. В июле 2019 года Совет по контрольным показателям связанных данных (англ. Linked Data Benchmark Council, LDBC) согласился стать зонтичной организацией для объединения усилий сообщества технических рабочих групп. Рабочие группы по существующим языкам и схеме Property Graph были сформированы в конце 2018 и начале 2019 года соответственно. Рабочая группа для определения формальной денотационной семантики[англ.] для GQL была создана на третьем собрании сообщества GQL в октябре 2019 года[10].
ISO/IEC JTC 1/SC 32 WG3
[править | править код]Семь национальных органов по стандартизации (США, Китая, Кореи, Нидерландов, Великобритании, Дании и Швеции) назначили национальных экспертов по предметной области для работы над проектом, который реализуется Рабочей группой 3 (Языки баз данных) Подкомитета 32 (Управление данными и обмен ими) ISO/IEC JTC 1, для которого используется аббревиатура ISO/IEC JTC 1/SC 32 WG3 или просто WG3 для краткости. WG3 (и его прямые предшественники — комитеты в составе JTC 1) отвечает за стандарт SQL с 1987 года[11][12].
Этапы ИСО
[править | править код]- 10 сентября 2019: 10.99 Одобрен новый проект
- 10 сентября 2019: 20.00 Новый проект зарегистрирован в рабочей программе TC/SC
- 22 ноября 2021: 30.00 Зарегистрирован проектный комитет (ПК)
- 23 ноября 2021: 30.20 ПК начал исследования
- 25 февраля 2022: 30.60 Закрытие периода комментариев
- 29 августа 2022: 30.92 ПК возвращен в Рабочую группу
- 29 августа 2022: 30.00 Зарегистрирован проектный комитет (ПК)
- 30 августа 2022: 30.20 ПК начал исследования
- 26 октября 2022: 30.60 Закрытие периода комментариев
- 22 марта 2023: 30.99 ПК одобрен для регистрации в качестве черновика международного стандарта
- 24 марта 2023: 40.00 Черновик международного стандарта зарегистрирован
- 24 мая 2023: 40.20 Голосование по черновику международного стандарта инициировано: 12 недель
- 17 августа 2023: 40.60 Закрытие голосования
- 28 ноября 2023: 40.99 Полный отчет распространён: черновик международного стандарта одобрен для регистрации в качестве окончательного черновика международного стандарта
- 11 декабря 2023: 50.00 Окончательный текст получен или окончательный черновик международного стандарта зарегистрирован для официального утверждения
- 26 января 2024: 50.20 Подтверждение отправлено в секретариат или голосование по окончательному черновику международного стандарта инициировано: 8 недель
- 23 марта 2024: 50.60 Закрытие голосования. Подтверждение возвращено секретариатом
- 23 марта 2024: 60.00 Международный стандарт в стадии публикации
- 12 апреля 2024: 60.60 Международный стандарт опубликован
Модель данных графа свойств в GQL
[править | править код]GQL — это язык запросов, специально предназначенный для графов свойств. Граф свойств очень похож на концептуальную модель данных, выраженную в модели «сущность-связь» или в диаграмме классов UML (хотя он не включает n-арные связи, связывающие более двух сущностей). Сущности моделируются как узлы, а связи как рёбра в графе. Графы свойств являются мультиграфами: между одной и той же парой узлов может быть много рёбер. Графы GQL могут быть смешанными: они могут содержать направленные рёбра, где один из конечных узлов ребра является хвостом (или источником), а другой узел — головой (или целью, или назначением), но они также могут содержать ненаправленные (двунаправленные или рефлексивные) рёбра.
Узлы и рёбра, совместно известные как элементы, имеют атрибуты. Эти атрибуты могут быть значениями данных или метками (тегами). Значения свойств не могут быть элементами графов, и они не могут быть целыми графами: эти ограничения намеренно заставляют четко разделять топологию графа и атрибуты, содержащие значения данных в контексте топологии графа. Таким образом, модель данных графа свойств намеренно предотвращает вложение графов или обработку узлов в одном графе как рёбер в другом. Каждый граф свойств может иметь набор меток и набор свойств, которые связаны с графом в целом.
Текущие графовые базы данных и проекты таких баз часто поддерживают ограниченную версию модели, описанной здесь. Например, Apache Tinkerpop[14] заставляет каждый узел и каждое ребро иметь одну метку; Cypher позволяет узлам иметь от нуля до многих меток, но отношения имеют только одну метку (называемую reltype). База данных Neo4j поддерживает недокументированные свойства всего графа, Tinkerpop имеет значения графа, которые играют ту же роль, а также поддерживает «метасвойства» или свойства свойств. PGQL от компании Oracle поддерживает от нуля до многих меток на узлах и на рёбрах, тогда как SQL/PGQ поддерживает одну ко многим меток для каждого типа элемента. Информационная модель NGSI-LD, определённая ETSI, представляет собой попытку формального определения графов свойств с типами узлов и связей (рёбер), которые могут играть роль меток в ранее упомянутых моделях и поддерживать семантическую ссылку путём наследования классов, определённых в общих онтологиях.
Проект GQL определит стандартную модель данных, которая, скорее всего, будет надмножеством этих вариантов, и, по крайней мере, первая версия GQL, скорее всего, позволит поставщикам принимать решения о мощностях меток в каждой реализации, как это делает SQL/PGQ, и выбирать, поддерживать ли ненаправленные связи.
Дополнительные аспекты моделей ERM или UML (например, обобщение или подтипирование, или мощности сущностей или связей) могут быть охвачены схемами или типами GQL, которые описывают возможные экземпляры общей модели данных.
Реализации
[править | править код]Первая резидентная графовая база данных, которая может интерпретировать GQL, появилась 15.09.2021[15][16]. Помимо реализации, можно также найти формализацию и прочитать синтаксис определённого подмножества GQL[17].
Расширение существующих языков графовых запросов
[править | править код]Проект GQL опирается на несколько источников, в частности, на существующие промышленные языки и новый раздел стандарта SQL. В подготовительных обсуждениях в WG3 были представлены обзоры истории[18] и сравнительного содержания некоторых из этих источников — Cypher, PGQL и G-Core[19]. GQL — декларативный язык со своим собственным особым синтаксисом, играющим аналогичную SQL роль в построении приложений базы данных. Также существуют и другие языки графовых запросов, которые предлагают прямые процедурные функции, такие как ветвление и зацикливание (Gremlin от Apache Tinkerpop[20]), и GSQL[21], что позволяет итеративно проходить граф для выполнения класса графовых алгоритмов, но GQL напрямую не включает такие функции[22][23]. Однако GQL рассматривается как частный случай более общего класса графовых языков, которые будут совместно использовать систему типов графов и интерфейс вызова для процедур, обрабатывающих графы.
См. также
[править | править код]Примечания
[править | править код]- ↑ 1 2 ISO/IEC 39075:2024 (англ.)
- ↑ Green, Alastair. Creating an Open Industry Standard for a Declarative Property Graph Query Language (англ.). opencypher.org (июль 2016). Дата обращения: 12 ноября 2019. Архивировано 10 июля 2021 года.
- ↑ 1 2 Green, Alastair. Working towards a New Work Item for GQL, to complement SQL PGQ, ANSI INCITS DM32.2 submission DM32.2-2018-00128r1 (англ.). opencypher.org (июль 2018). Дата обращения: 12 ноября 2019. Архивировано 10 июля 2021 года.
- ↑ ISO/IEC 39075 Information Technology — Database Languages — GQL (англ.). ISO. Дата обращения: 7 января 2022. Архивировано 20 февраля 2022 года.
- ↑ SC32 WG3 N282 "SC32 N3002 Draft NWIP Form4 Information Technology – Database Languages - GQL" (англ.). ISO. Дата обращения: 9 декабря 2019.
- ↑ ISO/IEC 39075:2024 Information technology — Database languages — GQL (англ.). ISO. Дата обращения: 25 мая 2024. Архивировано 17 мая 2024 года.
- ↑ Eds. Plantikow, Stefan; Cannan, Stephen. GQL Early Working Draft v2.2. (англ.). ISO (октябрь 2019). Дата обращения: 9 ноября 2019.
- ↑ GQL Standard (англ.). Дата обращения: 12 ноября 2019. Архивировано 14 ноября 2019 года.
- ↑ GQL Community Updates (англ.). Дата обращения: 12 ноября 2019. Архивировано 20 сентября 2019 года.
- ↑ Libkin, Leonid. Formal Semantics Working Group (англ.). Дата обращения: 12 ноября 2019.
- ↑ JTC 1/SC 32 Data Management and Interchange (англ.). ISO/IEC JTC1. Дата обращения: 6 октября 2019. Архивировано 6 октября 2019 года.
- ↑ Scope from the original standard, ISO 9075-1987, Database Language SQL (англ.). ISO/IEC JTC1. Дата обращения: 9 ноября 2019.
- ↑ ISO/IEC 39075:2024 (англ.). ISO. Дата обращения: 2 ноября 2024. Архивировано 13 ноября 2024 года.
- ↑ Apache TinkerPop: Home (англ.). tinkerpop.apache.org. Apache Software Foundation. Дата обращения: 5 ноября 2024. Архивировано 29 августа 2018 года.
- ↑ GQL Parser (англ.). GitHub. Дата обращения: 18 января 2021. Архивировано 12 сентября 2021 года.
- ↑ First GQL research implementation from Olof Morra at TU Eindhoven! (англ.). Alastair Green. Дата обращения: 18 января 2021. Архивировано 18 января 2022 года.
- ↑ A Semantics of GQL; a New Query Language for Property Graphs Formalized (англ.). https://github.com. Olof Morra. Дата обращения: 18 января 2021. Архивировано 18 января 2022 года.
- ↑ Lindaaker, Tobias. An overview of the recent history of Graph Query Languages (англ.). opencypher.org (май 2018). Дата обращения: 6 октября 2019. Архивировано 10 июля 2021 года.
- ↑ Plantikow, Stefan. Summary Chart of Cypher, PGQL, and G-Core (англ.). opencypher.org (май 2018). Дата обращения: 3 ноября 2019. Архивировано 10 июля 2021 года.
- ↑ Rodriguez, Marko A. The Gremlin graph traversal machine and language (Invited talk) // Proceedings of the 15th Symposium on Database Programming Languages : [англ.]. — ACM, 2015. — P. 1–10. — ISBN 9781450339025. — doi:10.1145/2815072.2815073.
- ↑ Wu, Mingxi; Deutsch, Alin. GSQL: An SQL-Inspired Graph Query Language (англ.). Дата обращения: 9 ноября 2019. Архивировано 10 ноября 2019 года.
- ↑ Wood, Peter T. (2012-04-25). Query languages for graph databases. ACM SIGMOD Record. 41 (1). ACM: 50–60. doi:10.1145/2206869.2206879. S2CID 13537601. Дата обращения: 2019-10-25.
- ↑ Angles, Renzo; et al. (September 2017). Foundations of Modern Query Languages for Graph Databases. ACM Computing Surveys (англ.). 50 (5). ACM: 68:1–40. arXiv:1610.06264. doi:10.1145/3104031. S2CID 13526884. Дата обращения: 2019-11-12.