Пробуем графовую базу данных OrientDb

Сегодня хотел бы с вами присмотреться к графововым базам данных. Я уже посмотрел несколько, и OrientDB показалась самой простой для старта.

Для начала зайдем на официальный сайт orientdb.org, где можно посмотреть примеры того как это все выглядит.
Далее кликаем на кнопку «Загрузить» и скачиваем подходящий вам вариант. Но я предпочитаю запускать все через докер. Поэтому воспользуюсь вторым вариантом, и просто выполню команду

$ docker run -d --name orientdb -p 2424:2424 -p 2480:2480 -e ORIENTDB_ROOT_PASSWORD=root orientdb:latest

Так как мы просто исследуем возможности данной графовой базы, мы не будем заморачиваться с названиями, портами, и паролями.

После того как контейнер стартанул, заходим по адресу http://0.0.0.0:2480 и видим интерфейс.

Здесь есть интересная возможность, можно создать ее из заготовки с уже загруженными тестовыми данными. Кликаем на кнопку Просто выбираем понравившуюся вам базу, вводим логин root и пароль root (вы указывали пароль при запуске докера).

После загрузки базы просто входим внутрь с тем же логином и паролем. Но я предпочту создать новую базу с нуля.

Я указал название graph логин root и пароль root, вы можете использовать свои данные.

Внутри мы видим несколько вкладок

BROWSE — панель где можно выполнять запросы и видеть результаты выборок. История запросов сохраняется и это очень удобно.

SCHEMA — раздел для создания и редактирования структуры вашей базы данных.

SECURITY — раздел для управления пользователями и их доступами

GRAPH — раздел визуализации графа

FUNCTIONS — раздел для создания функций для работы с графами

DB — раздел для технических настроек базы данных

SCHEMA

Давайте начнем с этого раздела. Как видим у нас есть Vertex Classes (Вершины) и Edge Classes (Ребра)(С остальным пока не будем разбираться)

По умолчанию уже созданы классы вершин и ребер. Это значит что если мы хотим создать какой-то граф, нам нужно создавать вершины принадлежащие классу вершин, и ребра принадлежащие классу ребер. А класс регулирует то, какими свойствами обладает вершина или ребро.

Я через интерфейс захожу в дефолтные классы и добавляю и ребрам и вершинам свойство label типа string. Мы же хотим где-то хранить названия этих сущностей.

BROWSE

Дальше переходим в раздел просмотра, и можем попробовать создать что нибудь.

INSERT INTO V (label) VALUES('first Vertex'), VALUES('second Vertex');

После выполнения запроса видим табличку с добавленными данным. У меня получились такие ID: #10:0,#11:0

Давайте сразу создадим и ребро, и пойдем смотреть что у нас получилось.

CREATE EDGE FROM #10:0 TO #11:0 SET label = 'name'

Так мы создали связь между двумя вершинами.

GRAPH

Вершины созданы, ребра созданы, пойдемте посмотрим как это выглядит. Открываем нужный раздел и выполняем запрос

SELECT FROM V;

И видим результат в виде двух кружков и связи между ними. Если кликнуть на кружок или на ребро, то появляется возможность редактировать их отображение. В первую очередь можно заменить отображение ID на Label что бы было понятнее. Примерно так это может выглядеть

Но вообще для отображения я использую рекомендованный Gephi

FUNCTIONS

Заглянем в этот раздел. Здесь мы можем создавать какие то скрипты на JavaScript или на SQL запросах, что бы автоматизировать какие-то вещи, или сделать кастомную фильтрацию.

Лично мне этот раздел очень пригодился когда понадобилось пачкой создать сотни ребер. Я загрузил их в скрипт, и не было никаких проблем.

Послесловие

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