Модель 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 и посмотрим, как он рисует результаты запросов.
домашка