Графовые базы данных: на примере творчества Beatles
Графовые базы данных — удобный инструмент, когда проект требует хранить данные с высокой степенью связности и часто их изменять. Разбираемся, в чем плюсы такой системы, и представляем творчество «Битлов» в виде графа
256 открытий2К показов
Представляем творчество Beatles в виде графа вместе с тестировщиками Noveo!
Что такое графовые базы данных и зачем они нужны
Проблема хранения данных со сложными связями между объектами остро стоит во множестве проектов. Реляционные базы данных оказываются неподходящим решением, поскольку не обеспечивают оптимальный поиск и взаимодействие с данными.
В этом случае на помощь приходят графовые базы данных. Они основаны на графовой модели, где граф состоит из вершин (узлов) и соединяющих их ребер.
В графовой базе узлы — это сущности, из которых состоит база, а ребра — это типы отношений между сущностями. У узлов и ребер могут быть свойства, дающие дополнительную информацию о сущностях и отношениях между ними. Свойство — своего рода аналог ключа, который используется в реляционной базе данных.
Графовую базу данных можно изобразить как социальную сеть, в которой люди, относящиеся к различным группам, связаны друг с другом. Человека можно представить в виде узла c маркером «Person». У таких узлов есть свойства «Name», «Gender», «Location» и «Email». Типом отношений в такой базе выступает статус дружбы между людьми — «:FRIENDS_WITH», у которого также есть свойство «YearsOfFriendship» (продолжительность дружбы). Человек (узел «Person») связан со своим местом нахождения (узел «Location») через отношение «:LIVES_IN».
Преимущество подобной системы в том, что можно легко модифицировать список свойств того или иного узла: это делает систему более гибкой по сравнению с реляционной, где в таблицу пришлось бы добавлять или удалять столбец, соответствующий тому или иному атрибуту.
Для того чтобы определиться, подходит ли графовая база именно под задачи вашего текущего проекта, полезно будет ответить на следующие вопросы:
- Являются ли данные в системе высоко связанными? Графовые базы удобны в тех случаях, когда данные имеют высокую степень связности и требуют значительного анализа внутренних отношений.
- Является ли извлечение данных более приоритетным по сравнению с их хранением? Графовые базы оптимизированы для извлечения данных. Если вам часто нужно это действие, графовые базы для вас предпочтительны.
- Насколько часто меняется модель данных? Если модель данных неустойчива и требует частых изменений, удобно использовать графовые базы – они ориентированы на сами данные, что делает их достаточно гибкими.
Еще одним важным термином, связанным с графовыми базами данных, является RDF (Resource Description Framework, среда описания ресурса) — модель представления данных в виде, пригодном для машинной обработки.
Ресурсом в RDF может быть любая сущность — как информационная (веб-сайт или изображение), так и неинформационная (человек, город и т.д.). Утверждение, высказываемое о ресурсе, является триплетом «Субъект — Предикат — Объект». Множество таких триплетов образуют ориентированный граф, в котором вершинами (узлами) являются субъекты и объекты, а ребрами (отношениями) — предикаты.
Для работы с 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:
Схематическое представление является наглядным и визуально понятным, но, если мы имеем дело с большим объемом данных и выполняем над ними некоторые действия (обмен, загрузка), оно может оказаться непригодным, поэтому существует несколько вариантов синтаксиса представления 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К показов