Раздел 39 · Neo4j и графовые базы

Что такое Neo4j и как его поставить

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Модель property graph мы разобрали в прошлом уроке. Теперь нужна база, которая её хранит. В этом уроке знакомимся с Neo4j, выбираем редакцию, запускаем сервер в Docker и выполняем первый запрос через консоль.

Что такое Neo4j

Neo4j это графовая СУБД, которую с конца 2000-х развивает одноимённая компания. Она написана на Java и хранит граф в собственном формате на диске: узлы, связи и свойства лежат отдельными записями со ссылками друг на друга. Это и есть то хранение без индексов для переходов, о котором мы говорили в первом уроке.

Важные для начала факты:

  • Транзакции по ACID. Запись либо проходит целиком, либо не проходит вовсе, как в PostgreSQL. Подробно в уроке про транзакции.
  • Язык Cypher. Запросы пишутся на Cypher, мы начнём его учить уже через урок.
  • Версии по календарю. С 2025 года номер версии это год и месяц выпуска: 2025.01, 2026.10 и так далее. Раздел написан на версии 2026.10.1.

Редакции

Neo4j выходит в нескольких вариантах:

  • Community Edition. Бесплатная, с открытым кодом под лицензией GPLv3. Один сервер, одна пользовательская база, все основные возможности: Cypher, транзакции, индексы, ограничения уникальности. Для учёбы и небольших проектов её хватает с запасом.
  • Enterprise Edition. Платная. Добавляет кластер из нескольких серверов, резервное копирование на ходу, разграничение прав по ролям и дополнительные виды ограничений.
  • AuraDB. Облачный сервис от самой Neo4j: базу поднимают за тебя, есть бесплатный тариф для экспериментов.

Мы работаем с Community Edition. Там, где возможность есть только в Enterprise, урок скажет об этом прямо.

Запуск в Docker

Проще всего поставить Neo4j через Docker. Если Docker тебе незнаком, загляни в урок про установку PostgreSQL: там тот же приём с контейнером.

docker run -d --name neo4j \
  -p 7474:7474 -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/secret-password \
  -v neo4j-data:/data \
  neo4j:2026.10.1-community

Разберём строку по частям:

  • -p 7474:7474 открывает HTTP-порт. На нём живёт Neo4j Browser, веб-консоль, о ней следующий урок.
  • -p 7687:7687 открывает порт Bolt, двоичного протокола, по которому с базой говорят консоль и драйверы приложений.
  • NEO4J_AUTH=neo4j/secret-password задаёт пароль пользователя neo4j. Пароль должен быть не короче восьми символов, иначе сервер не стартует.
  • -v neo4j-data:/data кладёт файлы базы в том Docker, чтобы данные пережили пересоздание контейнера.
  • neo4j:2026.10.1-community это образ с точной версией. Тег latest лучше не брать: однажды он молча обновится.

Сервер стартует секунд десять. Проверить, что он поднялся, можно по логу: в выводе docker logs neo4j должна появиться строка Started..

Первое подключение

Внутри образа уже есть cypher-shell, консольный клиент. Подключаемся:

$ docker exec -it neo4j cypher-shell -u neo4j -p secret-password
Connected to Neo4j using Bolt protocol version 6.1 at neo4j://localhost:7687 as user neo4j.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
neo4j@neo4j> RETURN 'Привет, Neo4j' AS greeting;
+-----------------+
| greeting        |
+-----------------+
| "Привет, Neo4j" |
+-----------------+

1 row
ready to start consuming query after 48 ms, results consumed after another 0 ms
neo4j@neo4j> :exit
Bye!

Приглашение neo4j@neo4j> значит «пользователь neo4j, база neo4j». Обрати внимание на точку с запятой: без неё cypher-shell решит, что запрос ещё не закончен, и будет ждать продолжения. Последняя строка ответа сообщает, сколько миллисекунд сервер готовил и отдавал результат.

Узнаем версию и редакцию сервера. Это процедура, её вызывают через CALL:

neo4j@neo4j> CALL dbms.components();
+----------------------------------------------+
| name           | versions      | edition     |
+----------------------------------------------+
| "Neo4j Kernel" | ["2026.10.1"] | "community" |
| "Cypher"       | ["5", "25"]   | ""          |
+----------------------------------------------+

2 rows
ready to start consuming query after 68 ms, results consumed after another 11 ms

Сервер понимает две версии языка: Cypher 5 и Cypher 25. По умолчанию в этой версии работает Cypher 25, его мы и учим.

Песочница в уроках

Ставить Docker для каждого урока не обязательно. В уроках раздела стоит песочница: эмулятор Neo4j, который работает прямо в браузере. Она печатает ответы так же, как cypher-shell из образа neo4j:2026.10.1-community, только без строки со временем: время в браузере ничего не говорит о настоящем сервере. В песочнице уже лежит граф книжного клуба: десять участников, три города и пять книг.

У песочницы есть пределы. Процедуры администрирования вроде dbms.components(), планы запросов и плагины она не исполняет и честно пишет об этом строкой sandbox: .... Для таких тем уроки показывают вывод настоящего сервера, снятый в Docker.

Попробуй сам

Первый запрос в песочнице: приветствие и подсчёт всех узлов графа.

Убери точку с запятой после первого запроса и выполни снова: что изменилось? Потом вызови CALL db.labels();, эту процедуру песочница знает, и посмотри, какие метки есть в графе.

Проверь себя

Задание

Дальше

Консоль хороша для скриптов, но граф хочется видеть. В следующем уроке откроем Neo4j Browser на порту 7474 и посмотрим, как он рисует результаты запросов.

домашка

Домашка