openCypher
openCypher — это открытая спецификация языка запросов к графовым базам данных, основанная на языке Cypher, разработанном компанией Neo4j. OpenCypher представляет собой попытку стандартизировать Cypher как декларативный язык запросов для работы с графовыми моделями данных, сделав его доступным для реализации в различных системах управления базами данных (СУБД), не ограничиваясь проприетарной экосистемой Neo4j. Проект был запущен в 2015 году и поддерживается сообществом разработчиков и компаний, заинтересованных в создании единого стандарта для графовых запросов.
История
Предпосылки создания
Язык Cypher был разработан компанией Neo4j (США) в 2011 году для собственной одноимённой графовой базы данных. Cypher стал популярным благодаря своей интуитивно понятной, визуально-ориентированной синтаксической конструкции, напоминающей ASCII-арт. Однако его использование было ограничено экосистемой Neo4j, что создавало препятствия для интеграции с другими графовыми СУБД и инструментами.
Запуск проекта openCypher
В 2015 году компания Neo4j объявила о создании проекта openCypher, целью которого была разработка открытой спецификации языка, а также набора сопутствующих материалов (тестов, документации, эталонных реализаций). Первая версия спецификации (openCypher 1.0) была выпущена в 2016 году. Она описывала основные конструкции языка: сопоставление с образцом (MATCH), создание (CREATE), обновление (SET), удаление (DELETE) и фильтрацию (WHERE).
Дальнейшее развитие
В 2017 году проект openCypher был передан под управление некоммерческой организации Neo4j, Inc. (США). В 2018 году вышла версия openCypher 1.1, которая добавила поддержку подзапросов и более сложных операций с путями. В 2019 году проект был включён в инициативу по стандартизации графовых языков запросов в рамках ISO/IEC. На основе openCypher был разработан язык Graph Query Language (GQL), который в 2024 году был принят как международный стандарт ISO/IEC 39075:2024.
Архитектура и компоненты
Спецификация языка
OpenCypher определяет синтаксис и семантику языка запросов. Основные элементы:
- Сопоставление с образцом:
MATCH (n:Person)-[:KNOWS]->(m:Person)— поиск узлов и связей по заданным шаблонам. - Фильтрация:
WHERE n.age > 30— ограничение результатов. - Создание и модификация:
CREATE,MERGE,SET,DELETE— операции с данными. - Агрегация:
COUNT,SUM,AVG— вычисление статистических показателей. - Управление путями:
SHORTEST_PATH,ALL_SHORTEST_PATHS— поиск кратчайших маршрутов.
Тестовый набор (Technology Compatibility Kit, TCK)
OpenCypher включает в себя набор тестов (TCK), который позволяет разработчикам СУБД проверять корректность реализации языка. TCK содержит сотни сценариев, охватывающих все основные конструкции Cypher. Тесты написаны на языке Gherkin и могут быть выполнены в любой среде, поддерживающей этот формат.
Эталонная реализация (Reference Implementation)
В рамках проекта openCypher была разработана эталонная реализация на языке Scala, которая демонстрирует, как должна работать спецификация. Эта реализация не предназначена для промышленного использования, но служит образцом для других разработчиков.
Применение
Графовые базы данных
OpenCypher используется в ряде графовых СУБД, как коммерческих, так и с открытым исходным кодом:
- Neo4j (США) — оригинальная реализация, поддерживающая openCypher начиная с версии 3.0.
- Amazon Neptune (США) — облачная графовая база данных от Amazon Web Services, поддерживающая openCypher с 2018 года.
- Memgraph (Хорватия) — графовая база данных в памяти, реализующая openCypher.
- RedisGraph (США) — модуль для Redis, поддерживающий openCypher (проект приостановлен в 2023 году).
- Cypher for Apache Spark (США) — библиотека для выполнения запросов Cypher в среде Apache Spark.
Инструменты анализа данных
OpenCypher используется в аналитических платформах для работы с графовыми данными, например, в инструментах визуализации графов (Cytoscape, Gephi) и в библиотеках машинного обучения (например, PyTorch Geometric).
Образовательные цели
Спецификация openCypher применяется в учебных курсах по базам данных и анализу данных, так как язык Cypher считается одним из наиболее доступных для изучения.
Сравнение с другими языками запросов
Отличия от SQL
В отличие от реляционного SQL, openCypher ориентирован на работу с графами, где данные представлены в виде узлов и рёбер. SQL оперирует таблицами и строками, а Cypher — паттернами и путями. Например, запрос на поиск друзей друга в SQL требует нескольких JOIN, тогда как в Cypher это делается одной строкой: MATCH (a:Person)-[:FRIEND]->(b)-[:FRIEND]->(c) RETURN c.
Отличия от SPARQL
SPARQL — язык запросов к RDF-графам (Resource Description Framework), используемый в семантическом вебе. OpenCypher работает с графами свойств (property graphs), где узлы и рёбра могут иметь произвольные атрибуты. SPARQL использует триплетную модель (субъект-предикат-объект), что делает его менее гибким для некоторых задач.
Отличия от Gremlin
Gremlin — язык запросов для графовых баз данных, реализованный в Apache TinkerPop. В отличие от декларативного Cypher, Gremlin является императивным (шаг за шагом) и требует от разработчика более глубокого понимания структуры графа. OpenCypher считается более простым для изучения и использования.
Критика и ограничения
Отсутствие полной стандартизации
Несмотря на открытость спецификации, openCypher не является официальным международным стандартом (в отличие от GQL). Разные реализации могут иметь незначительные отличия в синтаксисе и поведении, что создаёт проблемы при переносе запросов между системами.
Ограниченная поддержка сложных запросов
OpenCypher плохо подходит для задач, требующих рекурсивных обходов графа или работы с временными рядами. Для таких случаев разработчики часто используют расширения языка или переходят на Gremlin.
Производительность
В некоторых реализациях openCypher может уступать по производительности специализированным языкам (например, Gremlin) при работе с большими графами (миллиарды узлов). Это связано с декларативной природой языка, которая требует оптимизации запросов на стороне СУБД.
Интересные факты
- Название «Cypher» происходит от слова «cipher» (шифр), что отражает визуальный синтаксис языка, напоминающий шифрование.
- Проект openCypher был одним из первых, кто предложил открытую спецификацию для графовых запросов, что стимулировало развитие всей индустрии.
- В 2024 году на основе openCypher был принят стандарт GQL, который должен стать единым языком запросов для всех графовых баз данных.
Источники
- Neo4j. «openCypher: The Open Graph Query Language Standard». Neo4j Documentation, 2023.
- ISO/IEC 39075:2024. «Information technology — Database languages — GQL». International Organization for Standardization, 2024.
- Robinson, I., Webber, J., Eifrem, E. «Graph Databases: New Opportunities for Connected Data». O'Reilly Media, 2015.
- Apache TinkerPop. «Gremlin Query Language». Apache Software Foundation, 2023.
- Amazon Web Services. «Using openCypher in Amazon Neptune». AWS Documentation, 2023.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →