Cypher - это декларативный язык запросов для графов, который позволяет выразительно и эффективно запрашивать данные в графе свойств. [1]
Cypher был в значительной степени изобретением Андреса Тейлора, когда он работал в Neo4j, Inc. (ранее Neo Technology) в 2011 году. [2] Cypher изначально предназначался для использования с графической базой данных Neo4j , но был открыт в рамках проекта openCypher в октябре 2015 года. . [3]
Язык был разработан с учетом мощности и возможностей SQL (стандартный язык запросов для модели реляционной базы данных ), но Cypher был основан на компонентах и потребностях базы данных, построенной на концепциях теории графов . В модели графа данные структурированы как узлы ( вершины в математике и сетевых науках) и отношения (ребра в математике и сетевых науках), чтобы сосредоточиться на том, как объекты в данных связаны и связаны друг с другом.
Графическая модель
Cypher основан на модели графа свойств , которая организует данные в узлы и края (в Cypher называемые «отношениями»). В дополнение к этим стандартным графическим элементам узлов и отношений модель графа свойств добавляет метки и свойства для описания более точных категорий и атрибутов данных.
Узлы - это объекты на графике. Они могут содержать любое количество атрибутов (пар ключ-значение), называемых свойствами. Узлы могут быть помечены нулевым или большим количеством меток (например, тегов или категорий), представляющих их различные роли в домене. Отношения обеспечивают направленные, именованные, семантически релевантные связи между двумя сущностями узла. У отношения всегда есть направление, начальный узел, конечный узел и ровно один тип отношения. Как и узлы, отношения могут иметь свойства. [4]
Метки могут группировать похожие узлы вместе, назначая ноль или более меток узлов. Ярлыки похожи на теги и позволяют указывать определенные типы объектов для поиска или создания. Свойства - это пары ключ-значение с привязкой строкового ключа и некоторого значения из системы типов Cypher. Запросы Cypher собираются с шаблонами узлов и отношений с любой указанной фильтрацией по меткам и свойствам для создания, чтения, обновления и удаления данных, найденных в указанном шаблоне.
Система типов
Система типов Cypher включает в себя многие из общих типов, используемых в других языках программирования и запросов. Поддерживаемые типы включают типы скалярных значений, такие как логические, строковые, числовые, целые числа и числа с плавающей запятой. Он также поддерживает временные типы, такие как datetime, localdatetime, date, time, localtime и duration. Доступны типы контейнеров для карт и списков, а также типы графиков для узла, отношения и пути, а также тип void. [5]
Синтаксис
Язык запросов Cypher отображает шаблоны узлов и отношений и фильтрует эти шаблоны на основе меток и свойств. Синтаксис Cypher основан на искусстве ASCII , которое представляет собой текстовое визуальное искусство для компьютеров. Это делает язык очень наглядным и легким для чтения, поскольку он как визуально, так и структурно представляет данные, указанные в запросе. Например, узлы представлены в круглых скобках вокруг атрибутов и информации, относящейся к объекту. Отношения обозначены стрелкой (направленной или ненаправленной) с типом связи в скобках.
// узел ( переменная : метка { propertyKey : ' propertyValue ' }) // отношение - [ переменная : RELATIONSHIP_TYPE ] ->// Шаблон шифра ( node1 : LabelA ) - [ rel1 : RELATIONSHIP_TYPE ] -> ( node2 : LabelB )
Ключевые слова
Подобно другим языкам запросов, Cypher содержит множество ключевых слов для определения шаблонов, шаблонов фильтрации и возврата результатов. Среди наиболее распространенных - MATCH, WHERE и RETURN. Они работают немного иначе, чем SELECT и WHERE в SQL ; однако у них схожие цели.
ПОИСКПОЗ используется перед описанием шаблона поиска для поиска узлов, взаимосвязей или комбинаций узлов и взаимосвязей вместе. [6] WHERE в Cypher используется для добавления дополнительных ограничений к шаблонам и фильтрации любых нежелательных шаблонов. [7] Cypher RETURN форматирует и организует вывод результатов. Как и в случае с другими языками запросов, вы можете возвращать результаты с определенными свойствами, списками, порядком и т. Д. [8]
Используя ключевые слова с синтаксисом шаблона, показанным выше, приведенный ниже пример запроса будет искать шаблон узла (метка участника и свойство с именем name со значением «Николь Кидман»), связанных отношениями (тип ACTED_IN и исходящее направление от первый узел) к другому узлу (метка фильма). Предложение WHERE затем фильтрует только шаблоны, в которых узел Movie в предложении match имеет свойство года, которое меньше значения переданного параметра. В возвращении запрос указывает выводить узлы фильма, которые соответствуют шаблону и фильтрация по совпадениям и предложениям where.
MATCH ( Nicole : Актер { имя : ' Николь Кидман ' }) - [ : ACTED_IN ] -> ( фильм : фильм ) ГДЕ фильм . год < $ yearParameter ВОЗВРАТ фильм
Cypher также содержит ключевые слова для определения пунктов для записи, обновления и удаления данных. CREATE и DELETE используются для создания и удаления узлов и отношений. SET и REMOVE используются для установки значений свойств и добавления меток на узлах. MERGE используется для уникального создания узлов без дубликатов. Узлы могут быть удалены только тогда, когда у них нет других связей. Например: [9]
MATCH ( startContent : Content ) - [ отношение : IS_RELATED_TO ] -> ( endContent : Content ) ГДЕ endContent . источник = ' пользователь ' ДОПОЛНИТЕЛЬНЫЙ МАТЧ ( 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) и модель графа свойств. Модель RDF стандартизирована W3C в ряде спецификаций. Модель Property Graph, с другой стороны, имеет множество реализаций в графовых базах данных, алгоритмах графов и средствах обработки графов. Однако общий стандартизированный язык запросов для графов свойств (например, SQL для систем реляционных баз данных) отсутствует. GQL предлагается заполнить этот пробел. [13]
Смотрите также
- Neo4j , популярная база данных графов для языка запросов Cypher
- База данных графиков , фон, модели данных, компоненты и поставщики для этой категории баз данных
- SPARQL , еще один декларативный язык запросов для запроса данных графа
- Гремлин , еще один способ запроса данных графа
- GQL ( язык запросов графиков )
Рекомендации
- ^ "Cypher Introduction" . Neo4j . Проверено 8 ноября 2019 .
- ^ «Cypher: развивающийся язык запросов для графов свойств» (PDF) . Материалы Международной конференции по управлению данными 2018 г. ACM . Проверено 27 июня 2018 .
- ^ «Встречайте openCypher: SQL для графов - база данных графов Neo4j» . База данных Neo4j Graph . 2015-10-21 . Проверено 8 ноября 2019 .
- ^ «Модель графа свойств» . GitHub . Проверено 8 ноября 2019 .
- ^ «Система типа Cypher» . GitHub . Проверено 8 ноября 2019 .
- ^ «Руководство по шифрованию - условие MATCH» . Neo4j . Проверено 8 ноября 2019 .
- ^ «Руководство по шифрованию - пункт WHERE» . Neo4j . Проверено 8 ноября 2019 .
- ^ «Руководство по шифрованию - пункт ВОЗВРАТ» . Neo4j . Проверено 8 ноября 2019 .
- ^ «Статьи руководства Cypher» . Neo4j . Проверено 8 ноября 2019 .
- ^ https://www.opencypher.org/events
- ^ "Семинар W3C по веб-стандартизации графических данных. Создание мостов: RDF, граф свойств и SQL" . W3C . Проверено 29 сентября 2019 года .
- ^ "ISO / IEC WD 39075 Информационные технологии - Языки баз данных - GQL" . ISO . Проверено 29 сентября 2019 года .
- ^ «ISO / IEC JTC 1 / SC 32 N 3007 - ISO / IEC NP 39075 Информационные технологии - Языки баз данных - GQL» . Британский институт стандартов . Проверено 29 сентября 2019 года .