Upload
alexander-novikov
View
309
Download
4
Embed Size (px)
DESCRIPTION
Доклад Александра Новикова на коференции DevConf 2014 о базе данных Neo4J и проекте http://vangraph.info
Citation preview
Скажите, граф…
Или об использовании Neo4J в веб-проекте
Когда информации на сайте становится слишком много…
…привычных средств поиска уже недостаточно.
Информацию нужно готовить, используя:
историю просмотров
местоположение
сведения в профиле
известные предпочтения
magic
magic
чтен
ие за
пи
сь
пользователей: 1 000 000друзей у пользователя: около 50
найти общих друзей у двух случайно выбранных пользователей
Глубина Реляционная база, сек. Neo4J, сек. Найдено
записей
2 0,016 0,010 ~2 500
3 30,267 0,168 ~100 000
4 1543,505 1,359 ~600 000
5Не
завершено2,132
~800 000
«Мы обнаружили, что Neo4J буквально в тысячи раз быстрее предыдущего SQL-решения, а текст запросов меньше в 10-100 раз. Сегодня Neo4J позволяет Ebay предоставить функционал, который до этого был немыслим.»
Фолкер Патчер, ведущий разработчик, Ebay
clip
word
film
clip
word
next_clip
film_cl
ip
clip_word
next_word
clip_word
film_clip
JavaScript PHP/Node.js Cypher
JSON JSON
HTTP HTTP
Браузер отправляет значения параметров
http://vangraph.info/server/fetch/clips/of/word/you/limit/height/40/
{ “word”: “you” }
Сервер подставляет их в запрос
MATCH (c:clip)-[:clip_word]->(:word {string:”you”})RETURN c;
clip_word
wordclip
string: you
var http = require('http');
var req = http.request(…);
req.write(JSON.stringify({ query: 'MATCH…', params: { word: 'you’ }}));
req.end();
$r = new HttpRequest(…);
$r->addPostFields(array( 'query' => 'MATCH…', 'params' => array( 'word' => 'you' )));
try { $r->send()->getBody();} catch (HttpException $e) { … }
База возвращает результат
{ “data”: { “collection”: [ { “file”: “mov5.mpg”, … } { “file”: “mov96705.mpg”, … } { “file”: “mov803.mpg”, … } ] }}
neo4j.org/develop/drivers
Другие способы подключения к базе
console.neo4j.org
Попробуйте писать запросы на Cypher сами!
MATCH ()-[r]-()DELETE r;
MATCH (n)DELETE n;
CREATE (:word { string: "you" });
CREATE (:clip { file: "mov34.mpg" });
MATCH (w:word { string: "you" }), (c:clip { file: "mov34.mpg" })MERGE (c)-[:clip_word]->(w);
docs.neo4j.org/refcard/2.1/
Персональная
лицензия
Программа для
стартапов
Программа для бизнеса
и предприяти
й
Бесплатно $ 12 тыс/годИндивидуаль
но
Сотрудников < 4Доход < 100 тыс
Доход < 5 млнФонды < 10 млн
Поддержка 10х5Поддержка 24х7Срочные доработки
собственное
соб
ств
енн
ая
об
раб
отк
а
граф
а
хранение графа
опосредованн
о
АтомарностьПри ошибке в любой части транзакции, база данных не меняется.
Согласованность
Каждая успешная транзакция по определению фиксирует только допустимые результаты
Изолированность
Изменяемые в ходе транзакции данные недоступны другим операциям.
НадежностьПо окончании транзакции возможные сбои оборудования не влияют на результаты транзакции.
ACID - транзакции
Начать POST http://localhost:7474/db/data/transaction
{"commit":
"http://localhost:7474/db/data/transaction/7/commit","results“: [ … ]}
Продолжить
POST http://localhost:7474/db/data/transaction/7
Завершить
POST http://localhost:7474/db/data/transaction/7/commit
Откатить
DELETE http://localhost:7474/db/data/transaction/7
REST - интерфейс
узлы ~ 34 млрд.
связи ~ 34 млрд.
свойства ~ 68 – 274 млрд.
типы связей ~ 32 тыс.
Объём данных ограничен только размером адресного пространства
Высокая доступность (HA)
Спасибо за внимание!