Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

Графовые базы данных: на примере творчества Beatles

Графовые базы данных — удобный инструмент, когда проект требует хранить данные с высокой степенью связности и часто их изменять. Разбираемся, в чем плюсы такой системы, и представляем творчество «Битлов» в виде графа

256 открытий2К показов
Графовые базы данных: на примере творчества Beatles

Представляем творчество Beatles в виде графа вместе с тестировщиками Noveo!

Что такое графовые базы данных и зачем они нужны

Проблема хранения данных со сложными связями между объектами остро стоит во множестве проектов. Реляционные базы данных оказываются неподходящим решением, поскольку не обеспечивают оптимальный поиск и взаимодействие с данными.

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

Графовые базы данных: на примере творчества Beatles 1

В графовой базе узлы — это сущности, из которых состоит база, а ребра — это типы отношений между сущностями. У узлов и ребер могут быть свойства, дающие дополнительную информацию о сущностях и отношениях между ними. Свойство — своего рода аналог ключа, который используется в реляционной базе данных.

Графовую базу данных можно изобразить как социальную сеть, в которой люди, относящиеся к различным группам, связаны друг с другом. Человека можно представить в виде узла c маркером «Person». У таких узлов есть свойства «Name», «Gender», «Location» и «Email». Типом отношений в такой базе выступает статус дружбы между людьми — «:FRIENDS_WITH», у которого также есть свойство «YearsOfFriendship» (продолжительность дружбы). Человек (узел «Person») связан со своим местом нахождения (узел «Location») через отношение «:LIVES_IN».

Графовые базы данных: на примере творчества Beatles 2

Преимущество подобной системы в том, что можно легко модифицировать список свойств того или иного узла: это делает систему более гибкой по сравнению с реляционной, где в таблицу пришлось бы добавлять или удалять столбец, соответствующий тому или иному атрибуту.

Графовые базы данных: на примере творчества Beatles 3

Для того чтобы определиться, подходит ли графовая база именно под задачи вашего текущего проекта, полезно будет ответить на следующие вопросы:

  • Являются ли данные в системе высоко связанными? Графовые базы удобны в тех случаях, когда данные имеют высокую степень связности и требуют значительного анализа внутренних отношений.
  • Является ли извлечение данных более приоритетным по сравнению с их хранением? Графовые базы оптимизированы для извлечения данных. Если вам часто нужно это действие, графовые базы для вас предпочтительны.
  • Насколько часто меняется модель данных? Если модель данных неустойчива и требует частых изменений, удобно использовать графовые базы – они ориентированы на сами данные, что делает их достаточно гибкими.

Еще одним важным термином, связанным с графовыми базами данных, является RDF (Resource Description Framework, среда описания ресурса) — модель представления данных в виде, пригодном для машинной обработки.

Ресурсом в RDF может быть любая сущность — как информационная (веб-сайт или изображение), так и неинформационная (человек, город и т.д.). Утверждение, высказываемое о ресурсе, является триплетом «Субъект — Предикат — Объект». Множество таких триплетов образуют ориентированный граф, в котором вершинами (узлами) являются субъекты и объекты, а ребрами (отношениями) — предикаты.

Графовые базы данных: на примере творчества Beatles 4

Для работы с RDF-данными существуют специальные языки. Один из самых распространенных — SPARQL (Simple Protocol and RDF Query Language).

Основные запросы для данного языка:

  • SELECT (извлечение необработанных значений и их представление в виде таблицы),
  • CONSTRUCT (извлечение информации в формате RDF и преобразование результатов к определенной форме),
  • ASK (формирование запроса типа Истина/Ложь),
  • DESCRIBE (получение описания RDF-ресурса).

Существует несколько ключевых терминов, относящихся к типам узлов и ребер в RDF-графе:

  • IRI (Internationalized Resource Identifier) — строка, однозначно идентифицирующая тот или иной узел и ребро. Использование IRI позволяет избежать повторения имен и возможных коллизий на этой почве.
  • Blank node (bnode, Пустой узел) — этот узел используется, когда нет необходимости прямой ссылки на него. Он может быть достигнут через направленное ребро от других узлов.
  • Literals (Литералы) — определенные значения, используемые для представления данных разных типов (строки, числа и даты). В отличии от IRIs и Blank Nodes, в триплете литералы могут быть только объектами. Примером литерала может служить обозначение даты: “YYYY-MM-DD”^^xsd:date, или указание языка строки: “some string”@en. В некоторых случаях литерал может опускаться. Например, для записи целочисленного значения полная запись с литералом выглядит следующим образом: 100^^xsd:integer. Без явного обозначения литерала будет записано лишь само число — 100.

Творчество The Beatles в виде графа

На рисунке изображен фрагмент графа, относящегося к творчеству группы The Beatles:

Графовые базы данных: на примере творчества Beatles 5

Схематическое представление является наглядным и визуально понятным, но, если мы имеем дело с большим объемом данных и выполняем над ними некоторые действия (обмен, загрузка), оно может оказаться непригодным, поэтому существует несколько вариантов синтаксиса представления RDF-графа в текстовом формате. Описанный фрагмент в так называемом Turtle формате будет иметь вид списка, в котором на отдельной строке перечислены все триплеты, отделенные друг от друга символом «.».

PREFIX :

PREFIX rdf:

PREFIX xsd:

:The_Beatles rdf:type :Band .

:The_Beatles :name “The Beatles” .

:The_Beatles :member :John_Lennon .

:The_Beatles :member :Paul_McCartney .

:The_Beatles :member :Ringo_Starr .

:The_Beatles :member :George_Harrison .

:John_Lennon rdf:type :SoloArtist .

:Paul_McCartney rdf:type :SoloArtist .

:Ringo_Starr rdf:type :SoloArtist .

:George_Harrison rdf:type :SoloArtist .

:Please_Please_Me rdf:type :Album .

:Please_Please_Me :name “Please Please Me” .

:Please_Please_Me :date “1963-03-22″^^xsd:date .

:Please_Please_Me :artist :The_Beatles .

:Please_Please_Me :track :Love_Me_Do .

:Love_Me_Do rdf:type :Song .

:Love_Me_Do :name “Love Me Do” .

:Love_Me_Do :length 125 .

:Love_Me_Do :writer :John_Lennon .

:Love_Me_Do :writer :Paul_McCartney .

Список PREFIX в начале записи определяет общую часть IRIs для сущностей в данном графе. Указав ее один раз, мы избавляемся от необходимости каждый раз добавлять эту запись. Например, полная запись IRI, соответствующая сущности «группа “The Beatles”» выглядела бы следующим образом: <http://stardog.com/tutorial/The_Beatles>, однако замена общей части <http://stardog.com/tutorial/> на символ «:» делает обозначение данной сущности значительно более компактным и удобным для восприятия — «:The_Beatles».

Графовые базы данных являются удобным инструментом для тех случаев, когда данные имеют высокую степень связности, а модель данных неустойчива и требует частых изменений. А с помощью удобного языка запросов SPARQL можно с легкостью извлекать необходимые данные.
Следите за новыми постами
Следите за новыми постами по любимым темам
256 открытий2К показов