31
Скажите, граф… Или об использовании Neo4J в веб-проекте

Devconf 2014

Embed Size (px)

DESCRIPTION

Доклад Александра Новикова на коференции DevConf 2014 о базе данных Neo4J и проекте http://vangraph.info

Citation preview

Page 1: Devconf 2014

Скажите, граф…

Или об использовании Neo4J в веб-проекте

Page 2: Devconf 2014

Когда информации на сайте становится слишком много…

Page 3: Devconf 2014

…привычных средств поиска уже недостаточно.

Page 4: Devconf 2014

Информацию нужно готовить, используя:

историю просмотров

местоположение

сведения в профиле

известные предпочтения

Page 5: Devconf 2014
Page 6: Devconf 2014
Page 7: Devconf 2014

magic

Page 8: Devconf 2014

magic

Page 9: Devconf 2014

чтен

ие за

пи

сь

Page 10: Devconf 2014

пользователей: 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

Page 11: Devconf 2014

«Мы обнаружили, что Neo4J буквально в тысячи раз быстрее предыдущего SQL-решения, а текст запросов меньше в 10-100 раз. Сегодня Neo4J позволяет Ebay предоставить функционал, который до этого был немыслим.»

Фолкер Патчер, ведущий разработчик, Ebay

Page 12: Devconf 2014

clip

word

film

clip

word

next_clip

film_cl

ip

clip_word

next_word

clip_word

film_clip

Page 13: Devconf 2014

JavaScript PHP/Node.js Cypher

JSON JSON

HTTP HTTP

Page 14: Devconf 2014

Браузер отправляет значения параметров

http://vangraph.info/server/fetch/clips/of/word/you/limit/height/40/

{ “word”: “you” }

Page 15: Devconf 2014

Сервер подставляет их в запрос

MATCH (c:clip)-[:clip_word]->(:word {string:”you”})RETURN c;

Page 16: Devconf 2014

clip_word

wordclip

string: you

Page 17: Devconf 2014

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) { … }

Page 18: Devconf 2014

База возвращает результат

{ “data”: { “collection”: [ { “file”: “mov5.mpg”, … } { “file”: “mov96705.mpg”, … } { “file”: “mov803.mpg”, … } ] }}

Page 19: Devconf 2014

neo4j.org/develop/drivers

Другие способы подключения к базе

Page 20: Devconf 2014

console.neo4j.org

Попробуйте писать запросы на Cypher сами!

Page 21: Devconf 2014

MATCH ()-[r]-()DELETE r;

MATCH (n)DELETE n;

Page 22: Devconf 2014

CREATE (:word { string: "you" });

CREATE (:clip { file: "mov34.mpg" });

Page 23: Devconf 2014

MATCH (w:word { string: "you" }), (c:clip { file: "mov34.mpg" })MERGE (c)-[:clip_word]->(w);

Page 24: Devconf 2014

docs.neo4j.org/refcard/2.1/

Page 25: Devconf 2014

Персональная

лицензия

Программа для

стартапов

Программа для бизнеса

и предприяти

й

Бесплатно $ 12 тыс/годИндивидуаль

но

Сотрудников < 4Доход < 100 тыс

Доход < 5 млнФонды < 10 млн

Поддержка 10х5Поддержка 24х7Срочные доработки

Page 26: Devconf 2014

собственное

соб

ств

енн

ая

об

раб

отк

а

граф

а

хранение графа

опосредованн

о

Page 27: Devconf 2014

АтомарностьПри ошибке в любой части транзакции, база данных не меняется.

Согласованность

Каждая успешная транзакция по определению фиксирует только допустимые результаты

Изолированность

Изменяемые в ходе транзакции данные недоступны другим операциям.

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

ACID - транзакции

Page 28: Devconf 2014

Начать 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 - интерфейс

Page 29: Devconf 2014

узлы ~ 34 млрд.

связи ~ 34 млрд.

свойства ~ 68 – 274 млрд.

типы связей ~ 32 тыс.

Объём данных ограничен только размером адресного пространства

Page 30: Devconf 2014

Высокая доступность (HA)

Page 31: Devconf 2014

Спасибо за внимание!