Презентация Neo4j на ADD-3

75
Связи решают все! Евгений Газдовский Animotron.org

description

 

Transcript of Презентация Neo4j на ADD-3

Page 1: Презентация Neo4j на ADD-3

Связи решают все!

Евгений ГаздовскийAnimotron.org

twitter.com/gazdovsky

Page 2: Презентация Neo4j на ADD-3

Если имеем сложные запутанные модели

Page 3: Презентация Neo4j на ADD-3

Гео информационные

системы

Page 4: Презентация Neo4j на ADD-3
Page 5: Презентация Neo4j на ADD-3
Page 6: Презентация Neo4j на ADD-3

Социальныесети

Page 7: Презентация Neo4j на ADD-3

FOAF

Я, друзья, друзья друзей

Page 8: Презентация Neo4j на ADD-3
Page 9: Презентация Neo4j на ADD-3

Онтологии

Page 10: Презентация Neo4j на ADD-3
Page 11: Презентация Neo4j на ADD-3

RDF

Page 12: Презентация Neo4j на ADD-3

Animo

Page 13: Презентация Neo4j на ADD-3

Не хотим головной боли от RDBMS

Page 14: Презентация Neo4j на ADD-3

Моделирование отношений в реляционных СуБД

Page 15: Презентация Neo4j на ADD-3

Уменьшение производительности

во многих случаях

Page 16: Презентация Neo4j на ADD-3

Альтернативыреляционным СуБД

Key/valueDocument

Column Family

Graph

Page 17: Презентация Neo4j на ADD-3

Сложность / размерРазмер

Сложность

Key/Value stores

Column Family

Document

Graph

Большинство систем

109 узлов и связей

RDBMS

Page 18: Презентация Neo4j на ADD-3

Для каждого варианта своё!

Эпоха использования реляционных СУБД для всех задач закончилась.

Page 19: Презентация Neo4j на ADD-3

Графы

Page 20: Презентация Neo4j на ADD-3

Neo4j

GraphData Base

IS

Page 21: Презентация Neo4j на ADD-3

Neo4j — этоNodes, Relationships, RelationshipTypes,Properties

Page 22: Презентация Neo4j на ADD-3

Моделирование гиперграфа

Page 23: Презентация Neo4j на ADD-3

Enhanced Neo4j APIVertexes, Edges

Page 24: Презентация Neo4j на ADD-3

Моделирование упорядоченого графа

Page 25: Презентация Neo4j на ADD-3

Взаимодействие с Neo4jEmbeddedREST API

Page 26: Презентация Neo4j на ADD-3

Взаимодействие с Neo4jJava, Ruby, Python API

Blueprints, GremlinCypher Query

Spring

Page 27: Презентация Neo4j на ADD-3

Embedded Java API

Page 28: Презентация Neo4j на ADD-3

Создание БД

String STORAGE = "/home/foo/data";EmbeddedGraphDatabase graphDb;graphDb = new EmbeddedGraphDatabase(STORAGE);Node root = graphDb.getReferenceNode();

Page 29: Презентация Neo4j на ADD-3
Page 30: Презентация Neo4j на ADD-3

Добавление узловNode neo = graphDb.createNode();neo.setProperty("name", "Thomas Anderson");neo.setProperty("age", 29);Node trinity = graphDb.createNode();trinity.setProperty("name", "Trinity");

Page 31: Презентация Neo4j на ADD-3

Типы связейenum NeoRelType implements RelationshipType {

ROOT, KNOWS, CODED_BY}

Page 32: Презентация Neo4j на ADD-3

Добавление связейroot.createRelationshipTo(neo, ROOT);Relationship r;r = neo.createRelationshipTo(trinity, KNOWS);r.setProperty("age", "3 days")

Page 33: Презентация Neo4j на ADD-3

Начало и конец

Node start = r.getStartNode();Node end = r.getEndNode();Node n = r.getOtherNode(start);

Page 34: Презентация Neo4j на ADD-3

Связи

Relationship x = neo.getSingleRelationship(Direction.OUTGOING);Relationship y = trinyty.getSingleRelationship(Direction.INCOMING);Itreator<Relationship> it = neo.getRelationships(ROOT);

Page 35: Презентация Neo4j на ADD-3

Свойства

boolean hasName = neo.hasPropperty("name")String name = (String)neo.getProperty("name");String age = (String)r.getProperty("age");

Page 36: Презентация Neo4j на ADD-3

Удаление узлов, связей

r.delete(); trinity.delete();

Page 37: Презентация Neo4j на ADD-3

Фреймворк построения индексов

RelationshipNode

Page 38: Презентация Neo4j на ADD-3

Фреймворк построения индексов

PropertyПроизвольный ключ

Page 39: Презентация Neo4j на ADD-3

Фреймворк построения индексов

LuceneBerkeley Database

Page 40: Презентация Neo4j на ADD-3

Полнотекстовый поисксоздание индекса Lucene

IndexManager index = graphDb.index();Index<Node> fulltextMovies = index.forNodes( "movies­fulltext",    MapUtil.stringMap( IndexManager.PROVIDER,      "lucene", "type", "fulltext" ) );

Page 41: Презентация Neo4j на ADD-3

Полнотекстовый поискдобавление

fulltextMovies.add( theMatrix, "title", "The Matrix" );

fulltextMovies.add( theMatrixReloaded, "title", "The Matrix Reloaded" );

Page 42: Презентация Neo4j на ADD-3

Собственно поиск

Node found = fulltextMovies.query( "title", "reloaded" ).getSingle();

Page 43: Презентация Neo4j на ADD-3

Все возможности Lucene

сортировка

числовые диапазонымаски

составные запросы

Page 44: Презентация Neo4j на ADD-3

Автоматическое индексирование

через имена и значениясвойств

Page 45: Презентация Neo4j на ADD-3

Запросы в Neo4j — этоПоиск узлов и связей по индексу

Траверс графа

Page 46: Презентация Neo4j на ADD-3

Траверс графа — этопоиск множества путейпо заданным условиям

Page 47: Презентация Neo4j на ADD-3

Траверс графа

TraversalDescription td_KNOWS = Traversal.description().

breadthFirst().relationships(KNOWS, OUTGOING);

Page 48: Презентация Neo4j на ADD-3

Траверс графа

Traverce t = td_KNOWS.traverce(neo);

Page 49: Презентация Neo4j на ADD-3

Траверс графа

Iteraterable<Nodes> nodes = t.nodes();for (Node n : nodes) {

…}

Page 50: Презентация Neo4j на ADD-3

Траверс графаIteratrable<Relationship> relationships; relationships = t.relationships();for (Relationship n : relationships) {

…}

Page 51: Презентация Neo4j на ADD-3

Траверс графа

Path p;Iterator<Path> paths = t.iterator();while (paths.hasNext()) {

//…p = paths.next();//…

}

Page 52: Презентация Neo4j на ADD-3

Все алгоритмы ленивые

и могут бытьраспараллелены

Page 53: Презентация Neo4j на ADD-3

Встроенные алгоритмы обхода графа

в глубину и ширину

Page 54: Презентация Neo4j на ADD-3

Коллекция алгоритмов поиска путей

Дейкстры, А*,всех путей

Page 55: Презентация Neo4j на ADD-3

ТранзакцииACID

Многопоточность

Page 56: Презентация Neo4j на ADD-3

Транзакциипривязаны к thread

Page 57: Презентация Neo4j на ADD-3

Транзакциитолько на запись

Page 58: Презентация Neo4j на ADD-3

ТранзакцииTransaction tx = graphDb.beginTx();try {

Node n = graphDb.createNode();//…tx.success();

} finally {tx.finish()

}

Page 59: Презентация Neo4j на ADD-3

Транзакциимогут быть вложенными

Page 60: Презентация Neo4j на ADD-3

Транзакцииоптимальный размер

до 50К изменений

Page 61: Презентация Neo4j на ADD-3

Инструменты

Page 62: Презентация Neo4j на ADD-3

Neo4j Webadmin

Page 63: Презентация Neo4j на ADD-3

Neoclipse

Page 64: Презентация Neo4j на ADD-3

Gephi

Page 65: Презентация Neo4j на ADD-3

Gephi

Page 66: Презентация Neo4j на ADD-3

Gephi

Page 67: Презентация Neo4j на ADD-3

КластерCA, AGPL

Page 68: Презентация Neo4j на ADD-3

Проекты

Page 69: Презентация Neo4j на ADD-3

Neo4j Spatial

Page 70: Презентация Neo4j на ADD-3

Structur CMS

Page 71: Презентация Neo4j на ADD-3

Animotron

Page 72: Презентация Neo4j на ADD-3

Neo4j — этоВстраиваемая Java СуБД Полностью ACIDФреймворк построения индексовПоддержка 24/7 с 2003 годаВысоко доступная кластеризация (CA)Большое комьюнити

Page 73: Презентация Neo4j на ADD-3

GPL, AGPLneo4j.org

Page 74: Презентация Neo4j на ADD-3

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

Евгений ГаздовскийAnimotron.org

[email protected]/gazdovsky

Page 75: Презентация Neo4j на ADD-3

Пожалуйста, поставьте оценку моему докладу.

Ваше мнение очень важно.

Спасибо!