2. Графовые СУБД.pptx
- Количество слайдов: 33
Графовые базы данных или связи решают все! 1
Что такое граф ? Математическая модель: Граф, или неориентированный граф G — это упорядоченная пара G : = (V, E), где V — это непустое множество вершин или узлов, а E — множество пар (в случае неориентированного графа — неупорядоченных) вершин, называемых рёбрами. Ориентированный граф (сокращённо орграф) G — это упорядоченная пара G : = (V, A), где V — непустое множество вершин или узлов, и A — множество (упорядоченных) пар различных вершин, называемых дугами или ориентированными рёбрами. 2
РБД -> ГБД 3
4
5
время выполнения запроса Уменьшение производительности кол-во данных 6
Сложность/размер 7
Задача: проверить связность Дорожная сеть Москвы 8
Решение задачи 9
Решение на RDMS 1) ● ● ● Закачать весь граф в память быстрый обход графа ограничены памятью после изменения структуры грузим заново 2) Работать непосредственно в СУБД (рекурсивные sql запросы) ● не ограничены памятью ● очень медленный обход графа 10
Обход графа в таблице 11
Решение с Graph. Db (neo 4 j) 12
13
Пионеры ГБД Facebook Graph Search Google Knowledge Graph Twitter 14
Эволюция WEB поиска Web indexing до 1999 Дискретные данные Google Page Rank 1999 -2012 Связанные данные(simple) Google Knowledge Graph, FB Graph 2012 - ? ? Связанные ориентированные данные 15
Социальные сети Facebook, VK, Twitter … Вершины: люди. Ребра: дружу , служу, смотрю, состою… Алгоритмы рекомендации: “Вы дружите с Иваном , Иван с Петром. Не хотите ли вы дружить с Петром ? ” “Ваши друзья обедают в … “ Теория 6 рукопожатии. Twitter 3. 43 Facebook 4. 1 16
17
Полная поддержка ACID Atomicity — Атомарность гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Consistency — Согласованность Каждая успешная транзакция по определению фиксирует только допустимые результаты. Isolation — Изолированность Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её результат. Durability — Надежность Независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу. 18
Недостатки ● ● нет горизонтального масштабирования после удаления нодов не освобождается место на диске не для каждой предметной области нет схемы 19
20
Модель от Neo 4 j Вершины (nodes), отношения (relationships) + типы отношении (relationship. Types) и свойства (properties) 21
Пример создания графа CREATE (matrix 1: Movie { title : 'The Matrix', year : '1999 -03 -31' }) CREATE (matrix 2: Movie { title : 'The Matrix Reloaded', year : '2003 -05 -07' }) CREATE (matrix 3: Movie { title : 'The Matrix Revolutions', year : '2003 -10 -27' }) CREATE (keanu: Actor { name: 'Keanu Reeves' }) CREATE (laurence: Actor { name: 'Laurence Fishburne' }) CREATE (carrieanne: Actor { name: 'Carrie-Anne Moss' }) CREATE (keanu)-[: ACTS_IN { role : 'Neo' }]->(matrix 1) CREATE (keanu)-[: ACTS_IN { role : 'Neo' }]->(matrix 2) CREATE (keanu)-[: ACTS_IN { role : 'Neo' }]->(matrix 3) CREATE (laurence)-[: ACTS_IN { role : 'Morpheus' }]->(matrix 1) CREATE (laurence)-[: ACTS_IN { role : 'Morpheus' }]->(matrix 2) CREATE (laurence)-[: ACTS_IN { role : 'Morpheus' }]->(matrix 3) CREATE (carrieanne)-[: ACTS_IN { role : 'Trinity' }]->(matrix 1) CREATE (carrieanne)-[: ACTS_IN { role : 'Trinity' }]->(matrix 2) CREATE (carrieanne)-[: ACTS_IN { role : 'Trinity' }]->(matrix 3) 22
Cypher 23
Cypher MATCH (john {name: 'John'})-[: friend]->()[: friend]->(fof) RETURN john. name, fof. name Результат: "John" "Maria" "John""Steve" MATCH (user)-[: friend]->(follower) WHERE user. name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower. name =~ 'S. *' RETURN user. name, follower. name Результат: "John" "Sara" "Joe" "Steve" 24
Java(только в монопольном!!!) private static enum Rel. Types implements Relationship. Type { KNOWS } Graph. Database. Service graph. Db; Node first. Node; Node second. Node; Relationship relationship; try ( Transaction tx = graph. Db. begin. Tx() ) { graph. Db = new Graph. Database. Factory(). new. Embedded. Database( DB_PATH ); first. Node = graph. Db. create. Node(); first. Node. set. Property( "message", "Hello, " ); second. Node = graph. Db. create. Node(); second. Node. set. Property( "message", "World!" ); relationship = first. Node. create. Relationship. To( second. Node, Rel. Types. KNOWS ); relationship. set. Property( "message", "brave Neo 4 j " ); tx. success(); } 25
Rest Api (Apache) 26
Rest Api 1) Нет авторизации 2) Только для атомарных задач графовых СУБД 27
Драйвера Все на основе REST API ● Java ● . NET ● Java. Script ● Python ● Ruby ● PHP ● All Neo 4 j Language Drivers 28
Хочешь свои методы в Rest. Api ? Плагины! @Description( "An extension to the Neo 4 j Server for getting all nodes or relationships" ) public class Get. All extends Server. Plugin { @Name( "get_all_nodes" ) @Description( "Get all nodes from the Neo 4 j graph database" ) @Plugin. Target( Graph. Database. Service. class ) public Iterable<Node> get. All. Nodes( @Source Graph. Database. Service graph. Db ) http: //localhost: 7474/db/data/ext/Get. All/graphdb/get_all_nodes 29
Транзакции Индексы FTS Индексы 30
Для чего использовать? Если модель предметной области множество узлов с разнородными данными и большим количеством разнородных связей между ними иначе удобнее RDMS Если все данные физически помещаются на одной машине иначе другое No. Sql Если подойдет лицензия …. 31
У нас где используется: 1) Contacts. webmoney. ru 2) events. webmoney. ru 3) подсчет скоринга… 4) …. 32
Спасибо за внимание! Вопросы ? 33
2. Графовые СУБД.pptx