Учебник Графовые базы данных (Neo4j) для начинающих
Этот курс — глубокое погружение в графовые базы данных на примере Neo4j, самой популярной графовой СУБД. Вы поймёте, когда реляционная модель мучается со связями (рекомендации, друзья друзей, антифрод), как устроена модель property graph, и научитесь писать запросы на Cypher — языке, где запрос выглядит как нарисованный граф. Разберём создание и чтение данных, обходы и пути переменной длины, агрегации, индексы и ограничения, моделирование схемы, типовые задачи, алгоритмы Graph Data Science, импорт и работу из приложения, транзакции и масштабирование. Все примеры — на понятных доменах: соцсеть и фильмы. Отдельно честно обсудим, когда граф не нужен.
Курс «Графовые базы данных (Neo4j)» состоит из 8 разделов и 27 уроков: Зачем нужна графовая база данных, Знакомство с Neo4j и Cypher, Cypher: паттерны и создание данных, Чтение данных: MATCH, WHERE, RETURN, Обходы, пути и агрегации, Изменение данных, индексы и ограничения, Моделирование, типовые задачи и алгоритмы и Интеграция, эксплуатация и границы. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Зачем нужна графовая база данных
- Когда таблицы перестают справляться
Реляционная модель отлично хранит данные, но мучается на глубоких связях. Разбираем, где JOIN-ы превращаются в кошмар.
- Задачи, рождённые для графа
Рекомендации, антифрод, графы знаний, маршруты, IT-инфраструктура — обзор задач, где графовая модель естественна и побеждает.
- Граф как модель данных: property graph
Property graph: узлы, связи, метки и свойства. Базовый словарь графовой модели, на котором строится весь Neo4j и язык Cypher.
- Когда таблицы перестают справляться
2 Знакомство с Neo4j и Cypher
- Что такое Neo4j и как его поставить
Neo4j — самая популярная графовая СУБД. Архитектура, редакции, установка через Neo4j Desktop, Docker и Aura, первый запуск.
- Neo4j Browser: ваша первая графовая консоль
Neo4j Browser — веб-консоль для Cypher: панель запросов, граф-визуализация, команды :play и :help. Запускаем встроенную базу Movies.
- Модель данных Neo4j: метки, типы, направление
Как Neo4j организует данные: метки узлов, типы связей, направленность рёбер, свойства и идентификаторы. Соглашения именования.
- Что такое Neo4j и как его поставить
3 Cypher: паттерны и создание данных
- Паттерны Cypher: запрос как рисунок графа
Главная идея Cypher: ASCII-паттерн (a)-[:REL]->(b) описывает форму графа. Узлы в круглых скобках, связи — в квадратных.
- CREATE: создаём узлы и связи
Команда CREATE в Cypher: добавление узлов с метками и свойствами, создание связей между ними, возврат созданного.
- MERGE: идемпотентность и «создать, если нет»
MERGE в Cypher: найти существующий паттерн или создать новый. ON CREATE / ON MATCH, идемпотентные загрузки и роль ограничений.
- Паттерны Cypher: запрос как рисунок графа
4 Чтение данных: MATCH, WHERE, RETURN
- MATCH и RETURN: находим и возвращаем
MATCH находит паттерны в графе, RETURN формирует ответ. Возврат узлов, свойств, псевдонимы AS, сортировка ORDER BY и LIMIT.
- WHERE: фильтрация совпадений
WHERE в Cypher: фильтры по свойствам, сравнения, IN, диапазоны, проверка существования связей через EXISTS и паттерны.
- OPTIONAL MATCH и работа с отсутствием
OPTIONAL MATCH — графовый аналог LEFT JOIN: вернуть узел, даже если у него нет искомой связи. Обработка null и coalesce.
- MATCH и RETURN: находим и возвращаем
5 Обходы, пути и агрегации
- Многошаговые обходы по связям
Переходы по рёбрам в Cypher: цепочки паттернов, обход в обе стороны, многошаговые маршруты «друзья друзей» и коллеги по фильмам.
- Пути переменной длины: *1..3
Обход неизвестной глубины в Cypher: синтаксис *1..3, *, shortestPath. Поиск связей на N шагов, защита от взрыва обхода.
- Агрегации: count, collect и неявная группировка
Агрегатные функции Cypher: count, collect, avg, sum. Неявная группировка без GROUP BY, сбор связанных узлов в список.
- Многошаговые обходы по связям
6 Изменение данных, индексы и ограничения
- SET и REMOVE: меняем свойства и метки
Обновление в Cypher: SET для свойств и меток, += для слияния, REMOVE для удаления свойства или метки. Безопасные апдейты через MATCH.
- DELETE и DETACH DELETE: удаляем безопасно
Удаление в Cypher: DELETE для узлов и связей, почему нельзя удалить узел со связями и зачем нужен DETACH DELETE. Очистка базы.
- Индексы и ограничения
Производительность Neo4j: индексы по свойствам для быстрого старта обхода, ограничения уникальности и существования, роль для MERGE.
- SET и REMOVE: меняем свойства и метки
7 Моделирование, типовые задачи и алгоритмы
- Проектирование графовой схемы
Как спроектировать граф: что делать узлом, что связью, что свойством. Направленность, свойства на рёбрах, моделирование под запросы.
- Типовые задачи: рекомендации, путь, сообщества
Рабочие рецепты Cypher: рекомендации через общих соседей, кратчайший путь, друзья друзей, заготовка под обнаружение сообществ.
- Алгоритмы на графах: обзор Graph Data Science
Библиотека Graph Data Science в Neo4j: PageRank, центральности, community detection, кратчайшие пути. Проекции графа и как их запускать.
- Cypher против SQL: те же задачи, разный путь
Сравнение Cypher и SQL на одинаковых задачах: друзья друзей, рекомендации, иерархии. Почему граф проще для связей и где SQL уместнее.
- Проектирование графовой схемы
8 Интеграция, эксплуатация и границы
- Импорт данных через LOAD CSV
Загрузка данных в Neo4j: LOAD CSV с заголовками, создание узлов и связей из строк, идемпотентность через MERGE, батчи и параметры.
- Работа из приложения: драйверы Python и JS
Драйверы Neo4j для Python и JavaScript: подключение по Bolt, параметризованные запросы, сессии и транзакции, защита от инъекций.
- Транзакции и ACID в Neo4j
Neo4j — ACID-СУБД: атомарность, согласованность, изоляция и долговечность для графа. Явные транзакции, откат, блокировки и целостность.
- Масштабирование, кластеры и применения
Как масштабируют Neo4j: кластеры с лидером и репликами, маршрутизация чтения/записи, шардирование. Где граф применяют на практике.
- Другие графовые БД и когда граф не нужен
Обзор графовых БД помимо Neo4j (RDF/SPARQL, Gremlin, ArangoDB) и честный разбор задач, где графовая модель не оправдана.
- Импорт данных через LOAD CSV