OrientDB — графовая база данных

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

Создаем базу данных (db-type: graph не является обязательным к указанию и идет по-умолчанию)

orientdb> create database remote:localhost/cities root 643118766B2303BEFA035E4583AFB9BBB042C11F9C0D31ED1E2CD199FBF2E0F5 local graph

Напомню, что синтаксис таков:

create database <database-url> <user> <password> <storage-type> [<db-type>]

Посмотрим информацию о нашей базе данных:

orientdb {cities}> info

и видим, что при создании появляются стандартные классы, кластеры и индексы, но нас сейчас интересует два класса V (vertex - вершины) и E (edge - ребра). Оба они пусты, проверить это можно командой:

orientdb {cities}> select from V

Добавим туда 5 городов (вершин):

create vertex set city="Rome"
create vertex set city="London"
create vertex set city="Berlin"
create vertex set city="Madrid"
create vertex set city="Paris"

Теперь свяжем города указав дистанцию между ними (добавим ребра): 

create edge from #9:0 to #9:4 set distance=1106
create edge from #9:4 to #9:0 set distance=1106
create edge from #9:4 to #9:3 set distance=1054
create edge from #9:3 to #9:4 set distance=1054
create edge from #9:3 to #9:1 set distance=1267
create edge from #9:1 to #9:3 set distance=1267
create edge from #9:1 to #9:2 set distance=930
create edge from #9:2 to #9:1 set distance=930
create edge from #9:2 to #9:0 set distance=1183
create edge from #9:0 to #9:2 set distance=1183

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

orientdb {cities}> select from E                               

----+------+--------+----+----
#   |@RID  |distance|out |in  

----+------+--------+----+----
0   |#10:0 |1106    |#9:0|#9:4
1   |#10:1 |1106    |#9:4|#9:0
2   |#10:2 |1054    |#9:4|#9:3
3   |#10:3 |1054    |#9:3|#9:4
4   |#10:4 |1267    |#9:3|#9:1
5   |#10:5 |1267    |#9:1|#9:3
6   |#10:6 |930     |#9:1|#9:2
7   |#10:7 |930     |#9:2|#9:1
8   |#10:8 |1183    |#9:2|#9:0
9   |#10:9 |1183    |#9:0|#9:2

----+------+--------+----+----

Далее, мы можем все в тот же класс E добавить и другие виды ребер, например укажем дружбу (friend) между Римом и Мадридом:

orientdb {cities}> create edge from #9:0 to #9:4 set friend=1

и посмотрим на результат:

orientdb {cities}> select from E                             

----+------+--------+----+----+------
#   |@RID  |distance|out |in  |friend

----+------+--------+----+----+------
0   |#10:0 |1106    |#9:0|#9:4|null  
1   |#10:1 |1106    |#9:4|#9:0|null  
2   |#10:2 |1054    |#9:4|#9:3|null  
3   |#10:3 |1054    |#9:3|#9:4|null  
4   |#10:4 |1267    |#9:3|#9:1|null  
5   |#10:5 |1267    |#9:1|#9:3|null  
6   |#10:6 |930     |#9:1|#9:2|null  
7   |#10:7 |930     |#9:2|#9:1|null  
8   |#10:8 |1183    |#9:2|#9:0|null  
9   |#10:9 |1183    |#9:0|#9:2|null  
10  |#10:10|null    |#9:0|#9:4|1     

----+------+--------+----+----+------

как видите, под дружбу у нас создался отдельный столбец и добавилась строчка связи #10:10

Все связи которые видите в виде #cluster_id:object_id это ни что иное, как объекты, т.е. с помощью следующего запроса можно посмотреть названия городов:

orientdb {cities}> select in.city from E

----+------+------
#   |@RID  |in    

----+------+------
0   |#-2:1 |Paris 
1   |#-2:2 |Rome  
2   |#-2:3 |Madrid
3   |#-2:4 |Paris 
4   |#-2:5 |London
5   |#-2:6 |Madrid
6   |#-2:7 |Berlin
7   |#-2:8 |London
8   |#-2:9 |Rome  
9   |#-2:10|Berlin
10  |#-2:11|Paris 

----+------+------

И последнее, для простоты понимания, я показал пример создания Vertex (вершины) в классе V, так вот так делать не стоит, т.к. при создании связей в классе V, автоматически создаются поля out_ и in_. А при правильном подходе, эти поля будут именованы по имени класса. Например, если Вы создадите для хранения Vertex (вершин) класс My, то поля связей будут иметь имена out_My и in_My

Для тех, кто хочет потестировать выборку, выкладываю PHP-скрипт

<?php
header('Content-Type: application/json');

error_reporting(E_ERROR | E_PARSE | E_COMPILE_ERROR);

$c = curl_init();

// имя базы данных, к которой подключаемся
$db = 'GratefulDeadConcerts';
$db = 'cities';

curl_setopt($c, CURLOPT_URL, 'http://localhost:2480/connect/'.$db);

curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/4.0');// вразумительный браузер

curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);//говорим что это basic

curl_setopt($c, CURLOPT_USERPWD, 'admin:admin');

$return = curl_exec($c);// посылаем запрос и получаем ответ

if( $return !== true ){
    echo 'curl_exec problems'; exit;
}

$info = curl_getinfo($c);

$sql = 'select from V';// SQL-запрос

// http://:[]/command//[/][/limit][/]

curl_setopt($c, CURLOPT_URL, 'http://localhost:2480/query/'.$db.'/sql/'.rawurlencode($sql).'/12/*:3');

curl_setopt($c, CURLOPT_POST, 0);

curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);

$json = curl_exec($c);// посылаем запрос и получаем ответ

$json_decode = json_decode($json, true);

$info2 = curl_getinfo($c);

curl_close($c);

print_r($json_decode);

Комментарии приветствуются и удачи в изучении.

Оцени публикацию:
  • 2,9
Оценили человек: 2
Теги : OrientDB

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » MySQL »