5 популярных языков запросов к графам

графовые базы данных и языки запросов GraphQL Gremlin Cypher SPARQL AOL, графовая аналитика больших данных примеры курсы обучение, Data Science Neo4j обучение курс, анализ графов с Neo4j, Neo4j Cypher Merge примеры курсы обучение, обучение большим данным, Data Analyst Neo4j курсы примеры обучение, Школа Больших Данных Учебный Центр Коммерсант

Для продвижения нашего нового курса по графовым алгоритмам в бизнес-приложениях, сегодня рассмотрим 5 самых известных языков запросов для управления данными графов. Что общего у GraphQL, Gremlin, Cypher, SPARQL и AOL, а также чем они отличаются.

GraphQL

Языки запросов, используемые для управления данными графов (GQL, Graph Query Language), определяют способ извлечения данных, которые были смоделированы в виде графа, определяя возможности манипулирования данными в графовых СУБД. Одним из таких языков можно назвать GraphQL, хотя это не встроенный язык работы с графовой СУБД. Будучи представленным в 2012 году, GraphQL был разработан, чтобы обойти ограничения REST API, связанные с передачей избыточных или недостаточных данных от множества конечных точек. Он через 1 конечную точку получать доступ к другим связанным ресурсам, если взаимосвязь между ними заранее определена в схеме данных через внешние ключи. Являясь декларативным языком запросов для API со встроенной проверкой типов данных и серверной средой выполнения, GraphQL возвращает сложный граф данных (отсюда и слово Graph в названии), снижая количество запросов по сети до одного. CRUD-операции над данными в GraphQL реализуются через разные виды POST-запросов:

  • query — простые запросы на чтение данных, что аналогично GET-запросам в REST API;
  • mutation — создание новых и изменение существующих данных, что аналогично POST, PUT, PATCH и DELETE-запросам в REST API;
  • subscriptions – подписки, чтобы клиент мог получать обновления в базе данных, прослушивая изменения в режиме реального времени. Здесь используются вебсокеты, которые создают интерактивное соединение между клиентом и сервером для обмена сообщениями в реальном времени. Данные передаются от клиента к серверу и от сервера к клиенту в рамках длительного соединения в реальном времени, что характерно для онлайн-бирж, онлайн-игр и других подобных случаев.

Таким образом, GraphQL очень гибкий и экономичный с точки зрения сетевой передачи. Он поддерживается многими языками программирования (JavaScript, Java, Python, Ruby и PHP), позволяет настраивать структуру передаваемых и принимаемых данных, а также включать поля из нескольких ресурсов в один запрос. Однако, он не очень прост в реализации, имеет статичную схему данных, не поддерживает кэширование на клиенте и загрузку файлов. GraphQL работает только с JSON-форматом. Этот язык запросов подходит для приложений с большим количеством клиентов и/или источников данных, когда нужно унифицировать выполнение запросов, снизить число конечных точек и нагрузку на сеть. GraphQL подойдет для баз данных с большим количеством записей, чтобы устранить избыточную выборку результатов и получать только нужные данные в целях повышения производительности системы. Также GraphQL позволяет эволюционно развивать систему, когда заранее неизвестны клиентские API, и невозможно задать строгий контракт данных для взаимодействия систем. Впрочем, обойти это ограничение можно, используя специальные библиотеки, например, Graphene, о которой мы рассказываем здесь.

С точки зрения микросервисной архитектуры GraphQL хорошо обрабатывает связь между несколькими сервисами и отлично синхронизирует документацию с изменениями API за счет тесной связи с кодом: документация автоматически изменяется при изменении запросов, полей или типов. Впрочем, когда клиенты одновременно запрашивают слишком много вложенных полей, производительность запросов GraphQL снижается. Посмотреть практический пример GraphQL-запросов в облачно платформе Hasura, можно в этой статье блога нашей Школы прикладного бизнес-анализа.

Gremlin

Gremlin — это язык обхода графов Apache TinkerPop, принятый во многих графовых базах данных. В свою очередь, Apache TinkerPop — это среда вычислений на основе графов для транзакционных и аналитических графовых СУБД. Gremlin — это функциональный язык потока данных, который позволяет пользователям лаконично выражать сложные обходы (или запросы) графа свойств своего приложения. Каждый обход Gremlin состоит из последовательности (потенциально вложенных) шагов. Gremlin используется для извлечения данных из графа, их изменения и выражения сложных операций мутации. Разработчики могут писать запросы Gremlin на любом языке программирования, который поддерживает композицию функций и вложенность функций, например, Python, Java, Javascript, Scala и Groovy, чтобы выполнить императивные (процедурные) и декларативные (описательные) обходы в графе. Однако, это достаточно низкоуровневый язык обхода графа, который не очень легко читать. Кроме того, запросы, требующие большого количества сопоставлений с образцом, сложны в написании и не очень хорошо работают.

Cypher

Cypher — это язык запросов популярной графовой базы данных Neo4j, который немного похож на SQL. Однако, он основан на шаблонах и предоставляет визуальный способ сопоставления отношений и шаблонов. Cypher позволяет использовать средства отображения графов объектов (OGM) для сопоставления отношений и узлов в графах со ссылками и объектами в модели предметной области. OGM, встроенный в Neo4j, использует операторы запроса Cypher вместе с драйвером Java и сопоставляет существующие объекты домена с объектами этой графовой СУБД (узлами и ребрами графа). Neo4j-OGM поддерживает быстрое сканирование метаданных класса и оптимизированное управление загрузкой данных.

Также есть подключаемый Object Graph Mapper под названием GQLAlchemy, который представляет собой отдельную библиотеку Python с открытым исходным кодом для связи объектов Python с объектами графовой базы данных. Он обеспечивает удобный для разработчиков рабочий процесс для разработки объектно-ориентированного кода, автоматически транслирует его в запросы Cypher.

Язык запросов Cypher компактен и прост в освоении, он нагляден, логичен, содержит много операторов, безопасен и хорошо подходит для разработки приложений. Однако, Cypher в Neo4j не имеет внутренней поддержки типа данных дата, не очень хорошо масштабируется при высоких нагрузках записи и не дает большого преимущества в производительности для простой модели данных без множества соединений или агрегации. Практический пример сравнения SQL и Cypher можно посмотреть в этой статье блога нашей Школы прикладного бизнес-анализа.

SPARQL

SPARQL (SPARQL Protocol and RDF Query Language) — это язык запросов, который позволяет пользователям запрашивать информацию из баз данных, которые могут быть сопоставлены с RDF (Resource Description Framework). RDF — это абстрактная модель представления знаний, которая не отличает данные от метаданных, чтобы избежать расширения существующей модели с помощью аннотаций метаданных на уровне оператора, таких как показатели достоверности, веса, временные ограничения и информация о происхождении, например, если бы это была аннотация, измененная вручную. RDF использует IRI (интернационализированные идентификаторы ресурсов) для идентификации ресурсов, свойств и значений, чтобы обеспечить однозначное представление и интеграцию данных из разных источников. Можно сказать, что RDF — это стандартизированная графовая модель данных семантической паутины, а SPARQL — ее язык запросов и обновлений.

SPARQL немного похож на стандартный SQL, но данные в запросе SPARQL внутренне выражаются в виде троек из субъекта, предиката и объекта. SPARQL может объединять запросы из разных репозиториев, обращаясь как RDF, так и к реляционным СУБД, а также интегрировать данные в пересекающихся доменах. Однако, SPARQL нелегко читать и понимать. Еще этот язык не допускает несвязанных рекурсивных запросов. Кроме того, изначально этот язык был создан специально для RDF, что поддерживается не в каждой базе данных.

AQL

AQL (ArangoDB Query Language) — это язык запросов для извлечения и изменения данных, хранящихся в ArangoDB — мультимодельной БД, поддерживающей графовую и документную модели, а также ключ-значение.

По своему назначению декларативный AQL подобен языку SQL, он поддерживает чтение и изменение данных коллекции. Однако, AOL не поддерживает операции определения данных, такие как создание и удаление баз данных, коллекций и индексов. AOL — это чистый язык манипулирования данными (DML), а не язык их определения (DDL) или управления (DCL). Синтаксис запросов AQL отличается от SQL, несмотря на использование некоторых одинаковых ключевых слов.

AQL поддерживает различные функции, такие как ANALYZER(), BOOST(), EXISTS() и пр., позволяющие выполнять сложные вычисления. Он помогает разработчикам разрабатывать надежные приложения и напрямую отображать данные в базу данных. Это достаточно гибкий язык, который упрощает масштабирование и адаптацию архитектуры ИС к изменениям. Но в начальном плане выполнения AOL не может быть более 4 000 узлов выполнения и он не может использовать более 1000 регистров результатов.

Про еще один SQL-подобный язык запросов к графам , поддерживаемый в графовой MPP-СУБД TigerGraph, читайте в нашей новой статье.

Познакомиться с современными средствами графовых алгоритмов и лучшими практиками их применения в реальных проектах аналитики больших данных вам помогут специализированные курсы нашего лицензированного учебного центра обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://medium.com/memgraph/graph-database-query-languages-you-should-try-9f3974e4f7f5
  2. https://tinkerpop.apache.org/docs/3.6.2/reference/
  3. https://graphdb.ontotext.com/documentation/9.2/free/devhub/rdf-sparql-star.html
  4. https://www.arangodb.com/docs/stable/aql/index.html
Поиск по сайту