6.37M

Лекция2

1.

Возможности графовой
СУБД Neo4j
Знакомство с Neo4j
Основные реализации
Инструменты Neo4j
Примеры запросов

2.

Знакомство с Neo4j
Neo4j – графовая система управления базами данных (СУБД)
с открытым исходным кодом, реализованная на Java.
Компания: Neo Technology, 2010 г.
Официальный сайт: https://neo4j.com
Собственный язык запросов: Cypher
Также можно делать запросы через Java API и на языке Gremlin
Лицензия: GNU GPL3 и GNU AGPL v3.0
Неориентированный граф
Ориентированный граф

3.

Язык запросов Cypher
СУБД Neo4j предоставляет специальный язык запросов
Cypher для манипуляции с данными.
Cypher Query Language (Cypher) – это декларативный язык
запросов, позволяющий получить выразительный и
эффективный запрос данных графа.
Cypher – это декларативный язык, основанный на SQL, для
визуального описания графов, в которых используется
синтаксис ascii-art.
Большинство ключевых слов, таких как, например, WHERE и
ORDER BY, основаны на SQL

4.

Синтаксис Cypher
Чтение данных: START [MATCH] [WHERE] RETURN [ORDER BY]
[SKIP] [LIMIT]
OPTIONAL MATCH – для дополнительного шаблона поиска
Создание узла: CREATE [UNIQUE]* [SET|DELETE|FOREACH]*
[RETURN [ORDER BY] [SKIP] [LIMIT]]

5.

Синтаксис Cypher
START начальные точки запроса в графе
Пример: START n=node({id1}), m=node({id2}) // Несколько
стартовых точек
MATCH паттерн, удовлетворяющий запросу, ограниченный
начальными точками из оператора START.
Пример: MATCH (p: User {name: 'Lisa'})
WHERE критерий фильтрации
RETURN возвращаемое значение
Примеры:
RETURN n AS columnName //использовать псевдоним
RETURN DISTINCT n //вернуть уникальные строки.
ORDER BY n.property ASC // сортировка по возрастанию

6.

Синтаксис Cypher
SKIP 34 пропустить заданные 34 строки в выдаче
LIMIT 21 выдать не больше 21 строки
DELETE удаление узлов, связей и свойств
Пример: DELETE n, r
SET установка значений свойств
Пример: SET n.hobby = 'design'
FOREACH выполнение операций обновления для каждого
элемента из списка
WITH разбивает запрос на несколько независимых частей

7.

Синтаксис Cypher
MATCH (p:User) WHERE (p.name = 'Bob') and (p.age>20)
RETURN p //чтение данных с условием
CREATE (p:User {name: 'Bob', age: 23}) RETURN p //создания узла
со свойствами name и age
CREATE n = {map} //создание узла со свойством map
CREATE (n:User) – [r:KNOWS] –> (m) //создание связи с
направлением и присвоением идентификатора KNOWS
CREATE (n) – [:LOVES {since: {value}}] –> (m) //создание отношения
из заданного типа, направления и набора свойств
MERGE (n:User {name: 'Bob'}) – [:KNOWS] –> (m: User {name: 'Joe'})
//перед созданием связи узел будет проверен на существование
(MERGE = MATCH + CREATE)

8.

Cypher (вспомогательные функции)
LENGTH(collection) Возвращает длину коллекции.
TYPE(relationship) Строковое представление типа отношения.
COALESCE(n.property?, {defaultValue}) Первое ненулевое
выражение.
HEAD(collection) Первый элемент коллекции.
LAST(collection) Последний элемент коллекции.
TIMESTAMP() Количество прошедших миллисекунд от
полуночи 1 января 1970 года по … .
ID(node_or_relationship) Внутренний идентификатор
отношения или узла.
Использование регулярных выражений:
n.property =~ ‘regex’

9.

Знакомство с Neo4j
Какие данные можно хранить в Neo4j?
Все, что можно представить в виде графа:
• Социальные сети
• Сети дорог, связывающие города
• Авиамаршруты
• Метро
• Компьютерные сети
• Родственные связи
• …

10.

Знакомство с Neo4j
Пример стандартного запроса в Neo4j:
Найти всех друзей Лены, которые дружат со Светой,
но не являются друзьями друзей Васи.

11.

Знакомство с Neo4j
Вот (пёс без хвоста),
Который за шиворот [треплет] (кота),
Который [пугает и ловит] (синицу),
Которая часто [ворует] (пшеницу),
Которая в тёмном чулане (хранится)
(В доме), который [построил] (Джек).
Задача: Вывести все события и участников событий,
описанных в стихотворении.
Решение задачи в Neo4j:
a, b – объекты, участники событий
REL – отношения, которые связывают объекты

12.

Знакомство с Neo4j
Результат:
Nodes – объекты (сущности) в базе данных, узлы графа.
Количество узлов ограниченно 2 в степени 35 ~ 34 биллиона.
Relationships – отношения (связи) между объектами.
Количество связей ограниченно 2 в степени 35 ~ 34 биллиона.
Properties – свойства объектов и отношений.

13.

Графовый анализ
Поиск и обход путей – кратчайший путь, поиск в ширину, в
глубину, случайный обход.
Центральность – выявление центров по весу или влиянию на
другие узлы.
Обнаружение сообществ – кластеризация, система
рекомендаций, выявление групп по признакам сходства.
Эвристика (предсказание связей) – вероятность или наличие
связи при ее отсутствии на графе (система рекомендаций).
Сходство – релевантность запросов при поиске
(направленная реклама, выявление поддельных учетных
записей).

14.

Neo4j for Data Science
https://neo4j.com/use-cases/graph-data-science-artificial-intelligence/

15.

Neo4j Bloom
https://neo4j.com/docs/bloom-user-guide/current/about-bloom/

16.

Разработки на основе Neo4j

17.

Разработки на основе Neo4j
SberCloud – провайдер облачных технологий.
Предоставляет облачные инфраструктурные сервисы,
платформенные сервисы, облачную платформу для
разработки и эксплуатации моделей машинного обучения на
базе двух суперкомпьютеров – Christofari и Christofari Neo, а
также сервис хранения файлов «СберДиск».
«Neo4j Virtual Appliance – высокопроизводительная база
данных на основе графов с удобным языком запросов и
поддержкой ACID-транзакций»
https://sbercloud.ru/ru/products/neo4j-virtual-appliance

18.

Разработки на основе Neo4j
Внутреннее приложение 2GIS
«С его помощью, картографы рисуют карту. В числе прочего,
рисуют и дорожный граф, который нужно обходить и
проверять» (конференция HighLoad, 2015).
http://www.devconf.ru

19.

Визуализация графа
Vis.js

20.

yWorks
Визуализация графа

21.

Визуализация и анализ данных
Neo4j Labs

22.

Обнаружение мошенничества

23.

Визуализация и анализ данных
Neovis.js

24.

Графовые сверточные нейронные сети (GCN)
https://arxiv.org/pdf/2204.07697.pdf
Theoretical Foundations of Graph Neural Networks
https://www.youtube.com/watch?v=uF53xsT7mjc&t=238s

25.

Графовые сверточные нейронные сети (GCN)
https://cs.stanford.edu/~danfei/scene-graph/

26.

Причинно-следственные связи
Как именно количество волков может повлиять на стабильность
рек в Йеллоустоне?
Вывод: добавление всего 98 волков может повлиять на
поведение рек.
https://neo4j.com/graphgists/trophic-cascade-a-wolfs-role-in-the-ecosystem-of-yellowstone/

27.

Причинно-следственные связи
Если охота на медведя возрастает и погибает больше медведей,
будет ли экосистема Йеллоустона разрушаться в геометрической
прогрессии?
Ответ: если количество медведей уменьшается, это может
нарушить систему и привести к экспоненциальному сокращению
популяции медведей.
https://neo4j.com/graphgists/trophic-cascade-a-wolfs-role-in-the-ecosystem-of-yellowstone/

28.

Учебная база данных «The Movie Graph»
Узлы: Person (name, born), Movie (title, released, tagline)
Связи: ACTED_IN, DIRECTED, PRODUCED, WROTE, REVIEWED

29.

Задача 1
1) Выведите актеров, задействованных в фильмах, которые
продюссировал Joel Silver между 2000 и 2008 годами
включительно.
2) Выведите (из задания 1) имена актеров вместе с названиями
фильмов и датой их выхода.
Разбор задачи
Узлы:
• актеры (Person)
• фильмы (Movie)
• продюссер (Person), имя: Joel Silver
Связи:
• играли в фильмах (ACTED_IN)
• продюссировал (PRODUCED)
Условие: между 2000 и 2008 годами включительно.

30.

Решение задачи 1
1) Все актеры, игравшие в фильмах, которые продюссировал
Joel Silver между 2000 и 2008 годами включительно:

31.

Решение задачи 1

32.

Задача 2 Обход графа
Отобразите граф, связывающий Jessica Thompson
отношением FOLLOWS с другими персонами. Достаточно
отобразить связь до 2 уровня.
Разбор задачи
Узлы:
• персона (Person) с именем (name) Jessica Thompson
• персоны (Person)
Связи:
• отношение FOLLOWS
Условие: связь до 2 уровня.

33.

Решение задачи 2

34.

Задача 3 Обход графа
Отобразите граф, ведущий от Danny DeVito до Helen Hunt
кратчайшим путем.
Разбор задачи
Узлы:
• персона (Person), name Danny DeVito
• персона (Person), name Helen Hunt
Условие: кратчайший путь.

35.

Решение задачи 3

36.

Задача 4 Обход графа
Отобразите граф, ведущий от Danny DeVito до Helen Hunt
кратчайшими путями.

37.

Задача 5 Логистика
Вывести оптимальный маршрут от пункта A до пункта D:
a) по стоимости проезда;
b) по протяженности пути.
Вывести по два возможных решения.

38.

Решение задачи 5
a) Два оптимальных маршрута от A до D по стоимости проезда:

39.

Решение задачи 5
b) Два оптимальных маршрута от A до D по протяженности:

40.

Задача 6 Центральность
Определить самый посещаемый город:

41.

Задача 7 Центральность
Вывести города, через которые проходит наибольшее
количество дорог:

42.

Заключение
• Neo4j решает свои задачи: социальные сети, логистика,
транспорт, системы рекомендаций, обнаружение
мошенничества, анализ отношений.
• Благодаря тому, что визуализация графа позволяет видеть
картину «в целом», анализ данных в Neo4j проходит
эффективнее.
• Открытость Neo4j и его инструментов, легкость в
изучении Cypher предоставляют любому пользователю
использовать его в своих исследованиях и программных
разработках.

43.

Установка и запуск neo4j
1. Установите Neo4j локально, используя
neo4j-community_windows-x64_2_1_0-RC2.exe или
neo4j-community_windows_2_1_0-RC2.exe
2. Запустите сервер:
3. Запустите в браузере: http://localhost:7474/

44.

Лабораторная работа 3
Для выполнения заданий 1-3 загрузите базу данных
«The Movie Graph» из примера:
Выполните запросы к БД «The Movie Graph»:
1. Выведите названия фильмов, в которых сыграл Keanu
Reeves.
2. Выведите имена актеров, отсортированные по имени,
которые были задействованы в фильмах, вышедших до
2012 года.
3. Выведите имена и годы рождения всех актеров,
сыгравших в фильмах, которые продюссировал Joel Silver
между 1967 и 2008 годами включительно.

45.

Для заданий 4-10 создайте узлы с типом User со свойствами: name, age,
city. Создайте узлы с типом SocialNet, с атрибутом name (ВКонтакте,
Ватсап и т.п.) Создайте различные связи между персонами – дружеские
отношения Friendship и принадлежность к социальным сетям Belong.
Должно быть не менее 5 персон.
4. Отобразите упорядоченный список персон выбранной социальной
сети.
5. Отобразите упорядоченный список соц.сетей персоны с заданным
именем.
6. Отобразите количество персон по каждой социальной сети.
7. Выведите список имен персон, в котором для каждой персоны
указано количество групп соц.сетей, в которые она входит.
Упорядочить список по убыванию количества групп.
8. Выведите общее количество групп, в которых состоят друзья друзей
выбранной персоны.
9. Добавьте свойство like всем друзьям выбранной персоны.
10. Добавьте свойство manyFriends персонам, имеющим больше 3
друзей, свойство fewFriends – персонам, у которых меньше 2 друзей.
English     Русский Rules