Установка и использование OrientDB в Ubuntu 12.04

Традиционно для хранения данных используются реляционные системы управления базами данных (сокращённо СУБД); наиболее популярными среди них являются MySQL, PostgreSQL и MariaDB. Эти системы производительны и надёжны,  однако в некоторых ситуациях они не подходят.

Сегодня становятся популярными нереляционные базы данных, NoSQL. Они, как правило, легче, налагают меньше ограничений и масштабируются без особого труда; популярными представителями СУБД NoSQL являются MongoDB, Riak, Cassandra. Такие СУБД управляют данными при помощи легковесных хранилищ «ключ-значение» или гибких документов.

Менее распространённым решением являются графовые базы данных; они представляют данные в виде графов и их обобщений.

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

Данное руководство охватывает установку и основы работы с OrientDB на сервере Ubuntu 12.04.

Установка OrientDB

Пакеты OrientDB недоступны в стандартных репозиториях системы, но их можно скачать с GitHub.

Но сначала необходимо обновить список пакетов системы и загрузить дополнительные пакеты:

sudo apt-get update
sudo apt-get install openjdk-7-jdk git ant

После этого можно клонировать последнюю версию пакета с GitHub в домашний каталог:

cd
git clone https://github.com/orientechnologies/orientdb.git

В домашнем каталоге появится подкаталог orientdb. Откройте этот каталог и используйте ранее установленный инструмент Apache по имени ant, чтобы собрать программу:

cd orientdb
ant clean install

После окончания сборки OrientDB в домашнем каталоге появится новый каталог по имени releases. В нём хранится система баз данных.

cd ../releases/orientdb*

Откройте каталог bin и запустите сервер:

cd bin
./server.sh &

Сервер будет запущен в фоновом режиме. Чтобы остановить сервер, найдите его pid и используйте команду kill:

ps aux | grep server.sh | grep -v grep | awk '{ print $2; }' | xargs kill

При запуске сервер открывает два отдельных порта, которые можно использовать в зависимости от протокола:

  • 2424: этот порт используется для двоичного доступа. Это позволяет использовать клиенты и драйверы, которые работают с двоичными сетевыми протоколами или консолями базы данных.
  • 2480: этот порт используется для взаимодействий HTTP через RESTful API. Этот порт открывает доступ к веб-интерфейсу сервера в браузере.

Подключение к БД

Чтобы ознакомиться с работой OrientDB, подключитесь к БД в терминале. Это можно сделать в каталоге bin.

Но для начала нужно получить стандартный пароль.

nano ../config/orientdb-server-config.xml

В этом файле найдите раздел users; в этом разделе хранится запись для пользователя root. Пароль для этой записи очень длинный; скопируйте и вставьте его в отдельный документ (или просто выпишите его) – он понадобится в дальнейшем.

Закройте файл.

Вернитесь в каталог bin и запустите консоль OrientDB:

./console.sh

Это откроет командную строку OrientDB, при помощи которой можно взаимодействовать с программой.

Подключитесь к запущенному ранее серверу.

connect remote:localhost root copied_password

Чтобы проверить доступ к серверу, запросите список БД:

list databases

Если подключение к серверу создано успешно, на экране появится GratefulDeadConcerts; это образец БД для OrientDB. Если подключиться к серверу не удалось, на экране появится предупреждение:

Not connected to the Server instance. You’ve to connect to the Server using server’s credentials (look at orientdb-*server-config.xml file)

Подключившись к серверу, OrientDB сможет выполнять команды.

Для подключения к БД используется синтаксис, похожий на команду подключения к серверу; имя для подключения к стандартной БД – admin, пароль – admin.

connect remote:localhost/GratefulDeadConcerts admin admin

Классы, кластеры, графы и документы

OrientDB может систематизировать информацию несколькими методами на различных иерархических уровнях.

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

Документы, по большей части, не отличаются от документов других систем NoSQL; это простые блоки данных без предопределенного набора полей, которые в случае необходимости можно изменять и трансформировать.

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

Из объектно-ориентированных языков программирования OrientDB заимствует метод организации документов в классы. Класс в OrientDB – это способ систематизации наборов данных при помощи определенных ограничений и правил; в широком смысле класс определяет формат документа.

Кластеры – это способ систематизации и хранения групп записей. Кластеры похожи на таблицы в реляционных БД. Возможно, кластер проще воспринимать как пул данных, потому что кластеры могут содержать документы различных типов.

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

Работа с документами

Для начала ознакомимся с документами OrientDB; это, пожалуй, самый распространённый способ работы с данными в этой СУБД.

Но прежде всего нужно рассмотреть структуры классов и кластеров.

Чтобы просмотреть существующие классы, введите:

classes
CLASSES:
----------------------------------------------+------------------------------------+------------+----------------+
NAME                                         | SUPERCLASS                         | CLUSTERS   | RECORDS        |
----------------------------------------------+------------------------------------+------------+----------------+
E                                            |                                    | 10         |              0 |
Eat                                          | E                                  | 14         |              0 |
Friend                                       | E                                  | 15         |              0 |
. . .

На экране появится множество разных классов. Классы, перед которыми стоит символ О, являются внутренними классами OrientDB, при помощи которых можно получить сведения о БД и системе. Другие важные классы обозначаются символами V (vertex, вершина) и Е (edge, ребро); такие классы нужны для построения графов.

Чтобы создать новый класс, наберите:

create class New_class

После этого можно добавить поля документа:

create property New_class.field_name data_type

К примеру, чтобы создать класс vegetables и определить его основные параметры, введите:

create class Vegetable
create property Vegetable.name string
create property Vegetable.color string
create property Vegetable.quantity integer
create property Vegetable.good_on_pizza boolean

Чтобы просмотреть информацию и свойства класса Vegetable, введите:

info class Vegetable

Чтобы просмотреть список членов этого класса, наберите:

browse class class_name

Чтобы просмотреть кластеры, наберите:

clusters

Как видите, этот список похож на список классов, потому что OrientDB по умолчанию создаёт кластер для каждого нового класса. Если же классы отличаются от кластеров, можно просмотреть кластеры при помощи команды:

browse cluster cluster_name

Чтобы получить подробную информацию о конкретной записи, сошлитесь на её RecordID.

Каждая запись, хранящаяся в системе, имеет свой RecordID. Это значение указывает кластер, в котором хранятся данные, а затем порядковый номер записи. К примеру, RecordID первых двух записей кластера 9 будут выглядеть так:

#9:0
#9:1

Чтобы просмотреть записи, используйте синтаксис:

display record record_number

Примечание: В данной команде можно использовать не весь RecordID, а только порядковый номер записи.

Чтобы загрузить запись, введите:

load record recordID

Работа с документами при помощи синтаксиса SQL

В OrientDB можно взаимодействовать с документами аналогично реляционным базам данных. Такая функция внедрена в OrientDB для того, чтобы уменьшить время обучения общим взаимодействиям с БД.

К примеру, чтобы запросить данные, можно использовать оператор select. Чтобы получить полную запись, запустите оператор без параметров:

select from class_name

Чтобы запросить данные из кластера, введите:

select from cluster:cluster_name

Также можно создать запрос по recordID:

select from recordID

Для ограничения и сортировки вывода используются параметры where и order:

select from OIdentity where name = 'admin' order by rules

Существует ещё много способов запроса данных, большинство из которых соответствует синтаксису SQL.

Работа с графами

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

OrientDB может создавать записи в контексте графов. Точки данных используются в качестве вершин, или узлов; это независимые объекты, соединяемые при помощи ребер, или дуг. Ребро графа – это ссылка, которая демонстрирует связи между двумя несвязанными вершинами.

Чтобы создать класс вершин, нужно расширить стандартный класс V:

create class Animal extends V

Эта команда создаёт новый класс вершин по имени Animal. Каждый член этого класса представляет собой вершину, которую можно связать с другими членами этого класса.

Создайте классы Food и Environment, чтобы попробовать создать связи между ними:

create class Food extends V
create class Environment extends V

Итак, теперь у вас есть три класса. Также нужно создать несколько ребер, которые описывают связи двух вершин.

create class Eat extends E
create class Live extends E

Создайте членов классов:

create vertex Animal set name = 'Rabbit'
create vertex Food set name = 'Carrot'
create vertex Environment set name = 'Forest'

Теперь нужно применить рёбра к вершинам, чтобы связать вершины между собой:

create edge Eat from (select from Animal where name = 'Rabbit') to (select from Food where name = 'Carrot')

Поскольку в каждом классе хранится по одной записи, оператор where можно опустить:

create edge Live from (select from Animal) to (select from Environment)

Эти рёбра создадут строки in и out, которые указывают на присоединённую запись. К примеру, запись Rabbit имеет две строки out, которые соединяют её с другими вершинами. Вершины food и environment, в свою очередь, имеют строки in, что значит, что они принимают входящее соединение от другой вершины.

Просмотреть эти отношения можно при помощи комбинации стандартных запросов select и функции expand, которая предоставляет более подробную информацию. В этой команде можно указать соединения in или out, а можно указать оба соединения.

select expand( out() ) from Animal
----+-----+------+------+-------
#   |@RID |name  |in_Eat|in_Live
----+-----+------+------+-------
0   |#18:0|Carrot|#17:0 |null
1   |#19:0|Forest|null  |#17:0
----+-----+------+------+-------

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

Заключение

Данное руководство даёт базовое представление о работе СУБД OrientDB.

Как видите, OrientDB сочетает в себе множество элементов из разных систем. Она поддерживает синтаксис запросов SQL, используя при этом традиционные методы хранения документов NoSQL, и может строить графы.

Более подробную информацию о работе OrientDB можно найти в официальной документации.

Tags: , ,

Добавить комментарий