stringtranslate.com

Шифр (язык запросов)

Cypher — это декларативный язык запросов к графам, который позволяет выполнять выразительные и эффективные запросы к данным в графе свойств. [1]

Cypher во многом был изобретением Андреса Тейлора, когда он работал в Neo4j, Inc. (ранее Neo Technology) в 2011 году. [2] Первоначально Cypher предназначался для использования с графовой базой данных Neo4j , но был открыт в рамках проекта openCypher в октябре 2015 года. . [3]

Язык был разработан с учетом мощи и возможностей SQL (стандартного языка запросов для модели реляционной базы данных ), но Cypher был основан на компонентах и ​​потребностях базы данных, построенных на концепциях теории графов . В графовой модели данные структурированы как узлы ( вершины в математике и сетевых науках) и отношения (ребра в математике и сетевых науках), чтобы сосредоточиться на том, как сущности в данных связаны и связаны друг с другом.

Графовая модель

Cypher основан на модели графа свойств , которая организует данные в узлы и ребра (в Cypher они называются «отношениями»). В дополнение к этим стандартным элементам графа, состоящим из узлов и связей, модель графа свойств добавляет метки и свойства для описания более тонких категорий и атрибутов данных.

Узлы — это объекты в графе. Они могут содержать любое количество атрибутов (пар ключ-значение), называемых свойствами. Узлы могут быть помечены нулем или более метками (например, тегами или категориями), представляющими их различные роли в домене. Отношения обеспечивают направленные, именованные, семантически релевантные связи между двумя узлами. Отношения всегда имеют направление, начальный узел, конечный узел и ровно один тип отношений. Как и узлы, отношения также могут иметь свойства. [4]

Метки могут группировать похожие узлы вместе, назначая ноль или более меток узлам. Метки похожи на теги и позволяют указывать определенные типы объектов для поиска или создания. Свойства представляют собой пары ключ-значение с привязкой строкового ключа и некоторого значения из системы типов Cypher. Запросы Cypher собираются с шаблонами узлов и отношений с любой заданной фильтрацией по меткам и свойствам для создания, чтения, обновления и удаления данных, найденных в указанном шаблоне.

Типовая система

Система типов Cypher включает в себя множество распространенных типов, используемых в других языках программирования и запросов. Поддерживаемые типы включают типы скалярных значений, такие как логические, строковые, числовые, целые числа и числа с плавающей запятой. Он также поддерживает временные типы, такие как datetime, localdatetime, дата, время, местное время и продолжительность. Доступны типы контейнеров для карт и списков, а также типы графов для узла, связи и пути, а также тип void. [5]

Синтаксис

Язык запросов Cypher отображает шаблоны узлов и отношений и фильтрует эти шаблоны на основе меток и свойств. Синтаксис Cypher основан на ASCII art , который представляет собой текстовое визуальное искусство для компьютеров. Это делает язык очень наглядным и простым для чтения, поскольку он как визуально, так и структурно представляет данные, указанные в запросе. Например, узлы представлены в круглых скобках вокруг атрибутов и информации, касающейся объекта. Отношения изображаются стрелкой (направленной или ненаправленной) с типом связи в скобках.

//узел ( переменная : Label { propertyKey : 'propertyValue' })  //отношения -[ переменная : RELATIONSHIP_TYPE ]->//Шаблон шифрования ( node1 : LabelA ) -[ rel1 : RELATIONSHIP_TYPE ]-> ( node2 : LabelB )

Ключевые слова

Подобно другим языкам запросов, Cypher содержит множество ключевых слов для определения шаблонов, шаблонов фильтрации и возврата результатов. Среди них наиболее распространены: MATCH, WHERE и RETURN. Они действуют немного иначе, чем SELECT и WHERE в SQL ; однако у них схожие цели.

ПОИСКПОЗ используется перед описанием шаблона поиска для поиска узлов, связей или комбинаций узлов и связей вместе. [6] WHERE в Cypher используется для добавления дополнительных ограничений к шаблонам и фильтрации любых нежелательных шаблонов. [7] RETURN в Cypher форматирует и организует вывод результатов. Как и в случае с другими языками запросов, вы можете возвращать результаты с определенными свойствами, списками, порядком и т. д. [8]

Используя ключевые слова с синтаксисом шаблона, показанным выше, приведенный ниже пример запроса будет искать шаблон узла (метка актера и имя свойства со значением «Николь Кидман»), соединенного отношением (тип ACTED_IN и исходящее направление от узла). первый узел) на другой узел (метка фильма). Затем предложение WHERE фильтрует так, чтобы сохранять только шаблоны, в которых узел Movie в предложении match имеет свойство года, меньшее значения переданного параметра. В возврате запрос указывает на вывод узлов фильма, которые соответствуют шаблону и фильтрация по совпадению и предложениямwhere.

СОВПАДЕНИЕ ( Николь : Актер { имя : 'Николь Кидман' }) -[ : ACTED_IN ]-> ( фильм : Фильм ) ГДЕ фильм . год < $ годПараметр ВОЗВРАТ фильм       

Cypher также содержит ключевые слова для указания условий записи, обновления и удаления данных. CREATE и DELETE используются для создания и удаления узлов и связей. SET и REMOVE используются для установки значений свойств и добавления меток к узлам. MERGE используется для создания уникальных узлов без дубликатов. Узлы можно удалить только в том случае, если у них не осталось других связей. Например: [9]

ПОИСКПОЗ ( startContent : Content ) -[ отношение : IS_RELATED_TO ]-> ( endContent : Content ) ГДЕ endContent . source = 'user' НЕОБЯЗАТЕЛЬНОЕ ПОИСКПОЗ ( endContent ) -[ r ]- () УДАЛИТЬ отношение , endContent        

Стандартизация

С проектом openCypher началась попытка стандартизировать Cypher как язык запросов для обработки графов. В рамках этого процесса было проведено пять очных встреч разработчиков openCypher (oCIM). Первая встреча состоялась в феврале 2017 года в штаб-квартире SAP в Вальдорфе, Германия, и совпала с заседанием Совета по сравнительному анализу связанных данных. Последний OCIM состоялся в Берлине [10] и совпал с семинаром W3C по веб-стандартам управления графовыми данными в марте 2019 года. [11]

На этой встрече был достигнут консенсус в отношении того, чтобы Cypher стал важным вкладом в более широкий проект международного стандартизированного языка запросов к графам под названием GQL. В сентябре 2019 года предложение о проекте стандарта GQL было одобрено голосованием национальных органов по стандартизации, которые являются членами Объединенного технического комитета 1 ISO/IEC (отвечающего за стандарты информационных технологий). [12] В проектном предложении GQL говорится следующее:

Использование графика в качестве фундаментального представления для моделирования данных — это новый подход к управлению данными. В этом подходе набор данных моделируется как граф, представляющий каждый объект данных как вершину (также называемую узлом) графа, а каждую связь между двумя объектами — как ребро между соответствующими вершинами. Графическая модель данных привлекла внимание своими уникальными преимуществами. Во-первых, графовая модель может естественным образом подходить для наборов данных, имеющих иерархическую, сложную или даже произвольную структуру. Такие структуры можно легко закодировать в графовой модели как ребра. Это может быть удобнее, чем реляционная модель, которая требует нормализации набора данных в набор таблиц с фиксированными типами строк. Во-вторых, графовая модель обеспечивает эффективное выполнение дорогостоящих запросов или функций анализа данных, которым необходимо наблюдать многопереходные отношения между объектами данных, таких как запросы достижимости, запросы кратчайшего или самого дешевого пути или анализ центральности. В настоящее время используются две графовые модели: модель Resource Description Framework (RDF) и модель Property Graph. Модель RDF стандартизирована W3C в ряде спецификаций. С другой стороны, модель Property Graph имеет множество реализаций в графовых базах данных, графовых алгоритмах и средствах обработки графов. Однако общий стандартизированный язык запросов для графов свойств (например, SQL для систем реляционных баз данных) отсутствует. GQL предлагается заполнить этот пробел. [13]

С 2024 года стандарт GQL был опубликован как стандартный язык запросов к графам в соответствии с ISO/IEC 39075:2024. [14] Первая реализация подмножества языка с открытым исходным кодом уже доступна. [15] [16] Помимо реализации, можно также найти формализацию и прочитать синтаксис конкретного подмножества GQL. [17]

Смотрите также

Рекомендации

  1. ^ "Введение в шифр" . Нео4дж . Проверено 08.11.2019 .
  2. ^ «Cypher: развивающийся язык запросов для графов свойств» (PDF) . Материалы Международной конференции по управлению данными 2018 г. АКМ . Проверено 27 июня 2018 г.
  3. ^ «Знакомьтесь, openCypher: SQL для графов - база данных графов Neo4j» . База данных графов Neo4j . 21 октября 2015 г. Проверено 8 ноября 2019 г.
  4. ^ «Модель графа свойств» . Гитхаб . Проверено 08.11.2019 .
  5. ^ «Система типов шифрования». Гитхаб . Проверено 08.11.2019 .
  6. ^ «Руководство по шифрам - предложение MATCH» . Нео4дж . Проверено 08.11.2019 .
  7. ^ «Руководство по шифрам - пункт WHERE» . Нео4дж . Проверено 08.11.2019 .
  8. ^ «Руководство по шифрованию - предложение RETURN» . Нео4дж . Проверено 08.11.2019 .
  9. ^ "Пункты руководства по шифрованию" . Нео4дж . Проверено 08.11.2019 .
  10. ^ «События · openCypher» .
  11. ^ «Семинар W3C по веб-стандартизации данных графов. Создание мостов: RDF, график свойств и SQL» . W3C . Проверено 29 сентября 2019 г.
  12. ^ «ISO/IEC WD 39075 Информационные технологии — Языки баз данных — GQL» . ИСО . Проверено 29 сентября 2019 г.
  13. ^ «ISO/IEC JTC 1/SC 32 N 3007 — ISO/IEC NP 39075 Информационные технологии — Языки баз данных — GQL» . Британский институт стандартов . Проверено 29 сентября 2019 г.
  14. ^ https://www.iso.org/standard/76120.html .
  15. ^ "Парсер GQL" . Гитхаб . Проверено 18 января 2021 г.
  16. ^ «Первая реализация исследования GQL от Олофа Морры в ТУ Эйндховена!». Аластер Грин . Проверено 18 января 2021 г.
  17. ^ «Семантика GQL; формализованный новый язык запросов для графов свойств» (PDF) . Олоф Морра . Проверено 18 января 2021 г.