Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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 предлагается заполнить этот пробел.или анализ центральности. В настоящее время используются две модели графов: модель Resource Description Framework (RDF) и модель графа свойств. Модель RDF стандартизирована W3C в ряде спецификаций. Модель Property Graph, с другой стороны, имеет множество реализаций в графовых базах данных, алгоритмах графов и средствах обработки графов. Однако общий стандартизированный язык запросов для графов свойств (например, SQL для систем реляционных баз данных) отсутствует. GQL предлагается заполнить этот пробел.или анализ центральности. В настоящее время используются две модели графов: модель Resource Description Framework (RDF) и модель графа свойств. Модель RDF стандартизирована W3C в ряде спецификаций. Модель Property Graph, с другой стороны, имеет множество реализаций в графовых базах данных, алгоритмах графов и средствах обработки графов. Однако общий стандартизированный язык запросов для графов свойств (например, SQL для систем реляционных баз данных) отсутствует. GQL предлагается заполнить этот пробел.и средства обработки графиков. Однако общий стандартизированный язык запросов для графов свойств (например, SQL для систем реляционных баз данных) отсутствует. GQL предлагается заполнить этот пробел.и средства обработки графиков. Однако общий стандартизированный язык запросов для графов свойств (например, SQL для систем реляционных баз данных) отсутствует. GQL предлагается заполнить этот пробел.[13]

См. Также [ править ]

  • Neo4j , популярная база данных графов для языка запросов Cypher
  • База данных графиков , фон, модели данных, компоненты и поставщики для этой категории баз данных
  • SPARQL , еще один декларативный язык запросов для запроса данных графа
  • Гремлин , еще один способ запроса данных графа
  • GQL ( язык запросов графиков )

Ссылки [ править ]

  1. ^ "Cypher Introduction" . Neo4j . Проверено 8 ноября 2019 . CS1 maint: обескураженный параметр ( ссылка )
  2. ^ "Cypher: развивающийся язык запросов для графов свойств" (PDF) . Материалы Международной конференции по управлению данными 2018 г. ACM . Проверено 27 июня 2018 . CS1 maint: обескураженный параметр ( ссылка )
  3. ^ «Встречайте openCypher: SQL для графов - база данных графов Neo4j» . База данных Neo4j Graph . 2015-10-21 . Проверено 8 ноября 2019 .
  4. ^ "Модель графа свойств" . GitHub . Проверено 8 ноября 2019 .
  5. ^ "Система типа Cypher" . GitHub . Проверено 8 ноября 2019 .
  6. ^ "Руководство Cypher - условие MATCH" . Neo4j . Проверено 8 ноября 2019 . CS1 maint: обескураженный параметр ( ссылка )
  7. ^ "Руководство Cypher - пункт WHERE" . Neo4j . Проверено 8 ноября 2019 . CS1 maint: обескураженный параметр ( ссылка )
  8. ^ "Руководство Cypher - пункт RETURN" . Neo4j . Проверено 8 ноября 2019 . CS1 maint: обескураженный параметр ( ссылка )
  9. ^ "Статьи руководства Cypher" . Neo4j . Проверено 8 ноября 2019 . CS1 maint: обескураженный параметр ( ссылка )
  10. ^ https://www.opencypher.org/events
  11. ^ «Семинар W3C по веб-стандартизации данных графиков. Создание мостов: RDF, граф свойств и SQL» . W3C . Проверено 29 сентября 2019 года . CS1 maint: обескураженный параметр ( ссылка )
  12. ^ "ISO / IEC WD 39075 Информационные технологии - Языки баз данных - GQL" . ISO . Проверено 29 сентября 2019 года . CS1 maint: обескураженный параметр ( ссылка )
  13. ^ "ISO / IEC JTC 1 / SC 32 N 3007 - ISO / IEC NP 39075 Информационные технологии - Языки баз данных - GQL" . Британский институт стандартов . Проверено 29 сентября 2019 года . CS1 maint: обескураженный параметр ( ссылка )