Статьи

Взгляд на OrientDB: Граф-документ NoSQL

orient_sun_logo В этом посте я собираюсь дать вам краткое введение в OrientDB . В следующих статьях этой серии я расскажу вам об использовании OrientDB с Ruby.

Возможно, вы слышали о базах данных документов, таких как MongoDB , и, возможно, вы слышали о базах данных графов, таких как Neo4j . Готов поспорить, что вы не слышали о очень многих, если таковые имеются, базах данных Graph-Document.

Это верно. OrientDB рекламирует себя как «Граф-документ NoSQL». С веб-сайта:

OrientDB — это GraphDB с открытым исходным кодом, представляющая собой набор функций, взятых из баз данных документов и объектной ориентации.

Звучит интересно? Или сумасшедший? Или оба?

Мы нашли OrientDB, пройдя довольно далеко по пути с Neo4j [ 1 ], только чтобы выяснить, что цены Neo4j на его «корпоративные» функции (а именно HA) были за пределами нашего ограниченного запуска. OrientDB имеет лицензию Apache2, которая является более разрешительной, чем Neo4j. [ 2 ]

Мне нравятся концепции GraphDB, такие как ориентированные отношения свойств, а также гибкость, которая приходит с графическим подходом. Если вы не знакомы с концепциями графовой базы данных, ознакомьтесь с этими двумя постами ( один и два ) от Thiago Jackiw.

Если вам нужен учебник по базам документов, ознакомьтесь с этим постом из 10gen.

По сути, OrientDB обещает гибкую схему из своих корней Document DB, а также взаимоотношения с первоклассными гражданами, такие как графовая база данных. Хорошим примером обоих миров является то, как OrientDB поддерживает встроенные и ссылочные отношения. Первые содержатся внутри записи и доступны только через этот контейнер. Связанные отношения похожи на ребра из мира Graph DB, доступные как первоклассные объекты с начальной вершиной, конечной вершиной и свойствами.

У Orient есть несколько впечатляющих требований, таких как более 150 000 вставок в секунду, и он уже имеет облачный сервис в Nuvolabase . На самом деле, Nuvolabase предлагает демо «студийного» приложения, которое поставляется с OrientDB, которое вы можете увидеть здесь .

Не сделано в Америке

Если вы посмотрите на цены Nuvolabase, вы, вероятно, заметили, что это не в хороших мериканских долларах. В настоящее время кажется, что подавляющее большинство клиентов OrientDB находятся в Европе. Кроме того, компания OrientDB, Orient Technologies , находится в Лондоне. Я упоминаю об этом только потому, что 1) я нахожусь в Штатах, и 2) я не много слышал о OrientDB, прежде чем наткнулся на него. Кроме этого, я не вижу в этом проблемы.

Установка

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

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

big_green

Распакуйте этот файл в каталог, который, как я предполагаю, называется orientdb Структура каталогов OrientDB довольно типична:

каталоги

Сегодня я коснусь только каталогов config , bin и database .

конфиг

В каталоге config есть несколько файлов. Мы просто хотим запустить «стандартный» сервер, поэтому откройте файл orientdb-server-config.xml .

конфиг

Помните XML? Это все еще XML, и он все еще доминирует в конфигурации Java. Несмотря на это, здесь есть множество настроек, которые вы можете исследовать самостоятельно (или я опубликую их позже, возможно). На данный момент прокрутите вниз, пока не увидите раздел <users>

Этот раздел определяет (как вы уже догадались) пользователей, которые могут получить доступ к серверу. По умолчанию OrientDB предоставляет «root» и «guest» пользователь. Мне нравится добавлять своего пользователя с гораздо более разумным паролем, поэтому не стесняйтесь добавлять:

 <user resources="*" password="password" name="user"/>

Атрибут resources Значение * В вики OrientDB есть некоторая документация, но она еще не закончена.

Сохраните файл конфигурации и закройте его.

Базы данных

Каталог баз данных содержит (как вы уже догадались) базы данных, обслуживаемые этим сервером. Любые базы данных в этом каталоге видны серверу без конфигурации. Когда вы создаете новую базу данных, в этом каталоге будет создана новая папка с тем же именем, что и ваша база данных. Мы сделаем это немного позже.

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

OrientDB поддерживает три «движка» хранения: память, локальный и локальный. Память говорит сама за себя.

Локальные и локальные типы хранения используют файловую систему. По-видимому, локальный — это «старый способ», и сейчас он наиболее богат. Plocal — это «новый путь», но в нем отсутствуют некоторые важные функции, такие как транзакции. Вы можете прочитать больше здесь .

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

Бен: Зажги это

В каталоге bin , как это часто бывает, есть забавные вещи. А именно, он содержит скрипты для запуска различных типов серверов и консолей. Сегодня мы просто запустим автономный сервер vanilla, используя server.sh (или server.bat, если вы используете Windows).

Примечание: мне пришлось выполнить chmod +x *.sh

После запуска сервера вы увидите что-то вроде:

сервер

Аааа … ты не любишь искусство ASCII? Я делаю. Пока вы не видите ошибок, все готово к работе. OrientDB поставляется с удобным веб-приложением, где вы можете просматривать базу данных, создавать классы, записи, индексы и т. Д. По умолчанию оно находится по адресу http: // localhost: 2480 . Когда вы посещаете эту страницу, она попросит вас войти. Обязательно используйте имя пользователя и пароль, которые мы определили в конфигурации выше. Вы должны иметь только базу данных tinkerpop в раскрывающемся списке базы данных прямо сейчас.

После входа в систему вы должны увидеть:

студия

Приложение Studio запускает вас на вкладке «Схема» в разделе «База данных». Здесь показаны доступные классы и некоторые другие метаданные. Важными из них являются V и E , обозначающие Vertex и Edge соответственно. Это базовые классы вашей графовой базы данных, и когда вы создаете новый класс (также известный как «тип вершины» или «тип ребра»), он наследует один из этих классов.

База данных tinkerpop не имеет подклассов вершин, но у нее есть три подкласса ребер: follow_by , sung_by и writ_by . Указанием на то, что они являются подклассом ребра, является значение ‘E’ в столбце суперкласса . Подклассы вершин, как вы, наверное, догадались, имеют в этом столбце букву «V». О, и вы можете создавать подклассы подклассов.

Вы можете думать о классах так же, как о классах в объектно-ориентированном мире. Они определяют «тип записи». В качестве краткой демонстрации выберите класс «V» в таблице и нажмите кнопку «Запрос». Вы попадете на страницу запроса, которая выглядит следующим образом:

v

Здесь вы можете увидеть записи и свойства V класса. Любой атрибут, начинающийся с ‘@’ (то есть @rid@version@class Остальные либо определяются пользователем, либо определяются как часть отношений. Свойства отношений начинаются с in_out_

Ваш первый взгляд на OrientDB может быть дезориентирующим. Свойства отношений и нечетные идентификаторы (например, «# 11: 0») могут вывести вас из зоны комфорта. Может помочь быстрый чат о том, как данные структурированы в OrientDB.

Структура

Как упоминалось ранее, OrientDB разбивает данные на OO-подобные классы. Эти классы имеют наследование и в мире графов могут быть (V) ertex или (E) dge подклассом. Каждый класс имеет один или несколько кластеров , которые являются «универсальным способом группировки записей». Вы можете сгруппировать класс в кластеры на основе атрибуции.

Например, если у вас есть класс Invoice , вы можете сгруппировать счета-фактуры 2012 в кластер Invoice2012, а счета-фактуры 2013 — в кластер Invoice2013 . Вы указываете, какой кластер использовать для данной записи при создании этой записи. Каждый класс имеет по крайней мере один физический кластер по умолчанию, который используется, если ни один не указан при создании записи.

Задача кластеров — группировать данные, которые вы хотите запросить вместе. Мы еще мало с ними поработали, но планируем широко их использовать по мере роста с OrientDB.

Записи — это то, что вы ожидаете: экземпляр класса. Это документы в смысле БД документов, а также узлы в смысле БД графов. Записи живут в кластере и имеют схему, определенную классом. Классы, кластеры и записи — это львиная доля структуры данных OrientDB.

Отношения, как я уже говорил, являются «краями» графа свойств и являются первоклассными гражданами. Они имеют направление (то есть вершина «в» и «вершина») и могут иметь свойства. Большая часть скорости работы с графической базой данных обусловлена ​​простотой перемещения графа от вершины к ребру к вершине и т. Д., Именно поэтому графы являются выбором большинства сайтов социальных сетей. Эти виды отношений предназначены для того, чтобы избежать «боли при соединении» традиционных СУБД, где вес миллионов соединений вызывает серьезные проблемы с производительностью.

Игра с данными

В каталоге bin также есть консольный скрипт (либо .sh, либо .bat, в зависимости от вашей ОС). Откройте новый терминал и запустите консоль.

приставка

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

Создать базу данных

 create database plocal:databases/sitepoint-test user pass plocal graph

( Примечание: я запустил console.shбазами данных указан выше. Если вы запустили консоль из каталога bin , вам нужно будет указать относительный или абсолютный путь к базе данных, которая будет создана в нужном месте.)

децибел

Обратите внимание, что консоль сделала эту новую базу данных «текущей». Это означает, что команды и запросы будут выполняться к этой базе данных.

Создать тип вершины и вершину

Давайте создадим тип вершины «Человек» и сделаем двух человек.

 create class Person extends V
=> Class created successfully. Total classes in database now: 11

Помните, что тип вершины — это просто подкласс вершины.

Теперь мы можем добавить свойство .

 create property Person.name string
=> Property created successfully with id=1

А теперь создайте наших любовников.

 create vertex Person set name='Joanie'
=> Created vertex 'Person#11:0{name:Joanie} v0' in 0.076000 sec(s).

create vertex Person set name='Joanie'
=> Created vertex 'Person#11:1{name:Chachie} v0' in 0.001000 sec(s).

Создать тип ребра и ребро

Создание нашего ребра / отношения очень похоже на создание нашего типа вершин и вершин. Однако вам не нужно создавать тип ребра, если ваши отношения не будут иметь никаких свойств. Сегодня мы будем простыми и подражаем тому, что мы сделали с вершинами.

 create class loves extends E
=> Class created successfully. Total classes in database now: 12

create edge loves from #11:1 to #11:0
=> Created edge '[loves{in:#11:0,out:#11:1}]' in 0.003000 sec(s).

Запросы

 select from Person

----+-----+-------
#   |@RID |name
----+-----+-------
0   |#11:0|Joanie
1   |#11:1|Chachie
----+-----+-------

select name as subject, out_loves.name as loves from person

----+-----+-------+------
#   |@RID |subject|loves
----+-----+-------+------
0   |#-2:1|Joanie |null
1   |#-2:2|Chachie|Joanie
----+-----+-------+------

Вы заметите, что у OrientDB очень синтаксис SQL, что хорошо, когда вы пытаетесь переварить все новые концепции

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

Вывод

Это так далеко, как я хочу пойти с OrientDB сегодня. В следующем посте я расскажу о самоцвете orientdb-jruby, а также о новом самоцвете (кодовое название: «ориентированный»), который мы пишем как часть нашей работы. А пока изучите консольное и студийное приложение OrientDB и посмотрите группу Google (ссылка ниже).

Ресурсы


1: Что действительно, действительно здорово. На самом деле, если бы не бюджетные вопросы, я бы, наверное, не смотрел за пределы Neo4j.

2: Чтобы быть справедливым, Neo4j лицензирует свои коммерческие и корпоративные предложения. По моему мнению, вы бы не смогли развернуть производственное приложение без их корпоративных функций. OrientDB также взимает плату за свои «корпоративные» предложения, как показано здесь , но не удаляет ни одну из функций, позволяющих масштабировать. Это не пост о Neo4j vs OrientDB, так что это все, что я хочу сказать по этому поводу.