System Design Space
Граф знанийНастройки

Обновлено: 4 мая 2026 г. в 14:41

Neo4j: графовая база данных и архитектура

средний

Графовая СУБД с моделью графа свойств: Cypher, ограничения и индексы, кластерные пути чтения и записи и сценарии с плотными связями.

Neo4j полезно рассматривать не как красивый способ рисовать связи, а как ответ на запросы, которые в таблицах превращаются в длинные цепочки JOIN и сложную логику обхода графа.

В реальной инженерной работе эта глава помогает трезво оценить, когда графовый подход действительно нужен, как проектировать узлы, связи и свойства под многошаговые обходы и как не скатиться в неуправляемый граф ради самого графа.

На интервью и в архитектурных обсуждениях она особенно ценна, когда нужно показать, почему реляционная или документная модель в данном кейсе ломает читаемость запросов, задержки или сложность продукта.

Практическая польза главы

Критерии пригодности графа

Выбирайте графовую базу данных только там, где обходы графа и запросы по связям критичны для продукта.

Моделирование связей

Проектируйте узлы, связи и свойства так, чтобы упростить запросы по путям и не создавать сверхсвязных хабов.

Кластерные компромиссы

Учитывайте ограничения масштабирования записи и консистентности перед переносом ключевых транзакций в граф.

Формулировка на интервью

Показывайте, почему реляционный или документный подход недостаточен для конкретной графовой задачи.

Источник

Wikipedia: Neo4j

История Neo4j, модель графа свойств и контекст применения графовых баз данных.

Открыть статью

Официальный сайт

Neo4j

Документация, продуктовые возможности и современные сценарии использования графовой платформы.

Открыть сайт

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

В этой главе рассматривается через : , , свойства и становятся частью архитектурного решения. Практически важны , , , , и .

История и контекст

2000-2007

Идея графовой СУБД и первый публичный релиз

Проект Neo4j развивается из практической потребности хранить и обрабатывать связанные данные; первый публичный релиз появляется в 2007 году.

2010-е

Расширение промышленного применения

Neo4j закрепляется в рекомендациях, выявлении мошенничества и графах знаний: там важно быстро проходить несколько шагов по связям.

2020+

Облако и кластерная эксплуатация

Развиваются облачные предложения и практики эксплуатации кластеров, где запись и чтение маршрутизируются по разным ролям узлов.

2023+

Графы и сценарии ИИ

Появляются гибридные графово-векторные сценарии и интеграции с GenAI-контурами для поиска связей, контекста и объяснимых ответов.

Ключевые архитектурные элементы

Модель графа свойств

Данные представлены как узлы, связи и свойства. Связи являются самостоятельными сущностями, а не побочным эффектом таблиц связей.

Cypher и сопоставление шаблонов

Cypher позволяет декларативно описывать графовые шаблоны и запросы с обходом графа на переменную глубину.

Ограничения и индексы

Уникальные ограничения и индексы помогают удерживать целостность данных и ускорять опорные точки обхода графа.

Кластер и роли узлов

Запись проходит через ведущий узел, а чтение можно разгружать на последователей и реплики для чтения.

Cypher, сопоставление графовых шаблонов и реляционная алгебра

Описание графового шаблона в Cypher можно привести к реляционной форме: цепочке JOIN, фильтрации (SELECT) и проекции (PROJECT). Ниже - пошаговая визуализация этого соответствия.

Cypher: сопоставление шаблона и реляционная алгебра

Один и тот же запрос можно читать как обход графа и как цепочку JOIN + SELECT + PROJECT над таблицами.

Обход графа (сопоставление шаблона)

FOLLOWSFOLLOWSAUTHOREDAUTHOREDu-1001Useru-2042Useru-3007Userp-501Postp-777Post

Стартуем с узла пользователя `u-1001` через точечный поиск.

SELECT в `Users` по `user_id = 'u-1001'`.

Эквивалент в таблицах

Users

user_idname
u-1001Alice
u-2042Bob
u-3007Carol

Follows

follower_idfollowee_id
u-1001u-2042
u-1001u-3007

Posts

post_idauthor_idtopic
p-501u-2042graph
p-777u-3007caching

Cypher-запрос

MATCH (u:User {userId: "u-1001"})-[:FOLLOWS]->(f:User)-[:AUTHORED]->(p:Post)
WHERE p.topic = "graph"
RETURN DISTINCT p.postId, p.title;

Эквивалентный SQL

SELECT DISTINCT p.post_id, p.title
FROM users u
JOIN follows f ON u.user_id = f.follower_id
JOIN posts p ON f.followee_id = p.author_id
WHERE u.user_id = 'u-1001'
  AND p.topic = 'graph';

Приведение к реляционной алгебре

PROJECT{p.post_id, p.title} (
  SELECT{u.user_id='u-1001' AND p.topic='graph'} (
    (Users u JOIN_{u.user_id=f.follower_id} Follows f)
      JOIN_{f.followee_id=p.author_id} Posts p
  )
)

Как маппится модель

  • Метка узла -> таблица сущности (`User`, `Post`).
  • Тип связи -> таблица связей (`Follows`) или FK-колонка.
  • Расширение шаблона `()-[:REL]->()` -> `JOIN` по ключам.
  • `WHERE` в Cypher -> операция `SELECT`, `RETURN` -> `PROJECT` (и `DISTINCT` при необходимости).

Архитектура Neo4j по слоям

Ниже общий контур Neo4j в продуктовой системе: слой приложений, путь выполнения Cypher-запроса, графовое хранение с индексами и кластерные механики для чтения и записи.

Клиенты и API
BoltHTTP APICypherNeo4j Browser
Переход между слоями
Маршрутизация и планирование
Разбор запросаПланировщикСреда выполненияОптимизация по стоимости
Переход между слоями
Графовая модель
УзлыСвязиСвойстваМетки и типы связей
Переход между слоями
Хранение и индексы
Страничный кэшНативное хранениеB-tree/RANGE-индексыПолнотекстовые индексы
Переход между слоями
Кластер и репликация
RaftВедущий/последовательРеплики для чтенияПереключение на резерв
Переход между слоями
Эксплуатация
Резервные копииБезопасностьМониторингОграничения схемы

Системный взгляд

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

Графовые паттерны

Многошаговые обходыСопоставление шаблоновМоделирование от связей

Целостность и гарантии

ACID-транзакцииУникальные ограниченияИндексы схемы

Где полезно в дизайне

РекомендацииГрафы риска и мошенничестваГраф знаний / GraphRAG

Пути записи и чтения через компоненты

Диаграмма объединяет путь записи и путь чтения: как Cypher-запросы маршрутизируются, выполняются и становятся видимыми клиенту в кластере Neo4j.

Пути записи и чтения

Интерактивный разбор прохождения Cypher-запросов через компоненты Neo4j.

1
Запрос клиента
CREATE MERGE SET
2
Маршрутизатор
ведущий узел
3
Среда выполнения Cypher
план + выполнение
4
Фиксация через Raft
журнал транзакций
5
Видимое состояние
индексы + кэш
Путь записи: транзакция идёт через ведущий узел, фиксируется в журнале и реплицируется в кластер перед подтверждением.

Путь записи

  1. Приложение отправляет Cypher-команду записи через Bolt или HTTP.
  2. Маршрутизатор кластера направляет запись на ведущий узел, чтобы сохранить сериализуемый порядок коммитов.
  3. Ведущий узел выполняет запрос, пишет журнал транзакций и реплицирует изменения через Raft.
  4. После подтверждения кворума транзакция фиксируется, а индексы и кэш отражают новое состояние.

Когда выбирать Neo4j

Хорошо подходит

  • Системы с высокой плотностью связей: социальные графы, рекомендации, выявление мошенничества и анализ риска.
  • Графы знаний и GraphRAG-сценарии, где важны связи, контекст и объяснимость результата.
  • Запросы с многошаговым обходом графа, которые дорого выражать через длинные цепочки JOIN.
  • Домены, где модель связей часто эволюционирует и нужна гибкость схемы.

Стоит избегать

  • Простые CRUD-сценарии без сложных связей и графовых обходов.
  • Чисто аналитические нагрузки на огромных колоночных наборах данных.
  • Системы, где команда не готова к графовому моделированию и профилированию обходов графа.
  • Сценарии, где главное ограничение - массовые журналы с данными только для добавления, а не связи между сущностями.

Практика: DDL и DML

Ниже практические примеры Cypher-команд: от ограничений и индексов (DDL) до MERGE/MATCH-запросов для обхода графа (DML).

Примеры DDL и DML в Neo4j

DDL управляет ограничениями и индексами, DML моделирует граф и выполняет запросы с обходом связей.

DDL в Neo4j задаёт структурные гарантии и ускоряет чтение: уникальные ограничения, диапазонные и полнотекстовые индексы.

Уникальность бизнес-ключа для User

Cypher: CREATE CONSTRAINT

Гарантирует целостность графа и предотвращает дубли для userId.

CREATE CONSTRAINT user_id_unique IF NOT EXISTS
FOR (u:User)
REQUIRE u.userId IS UNIQUE;

Диапазонный индекс для частых фильтров по дате

Cypher: CREATE RANGE INDEX

Ускоряет фильтрацию и сортировку по createdAt.

CREATE RANGE INDEX post_created_at_idx IF NOT EXISTS
FOR (p:Post)
ON (p.createdAt);

Полнотекстовый индекс для контентного поиска

Cypher: CREATE FULLTEXT INDEX

Комбинирует обход графа с полнотекстовым поиском по title/body.

CREATE FULLTEXT INDEX post_content_ft IF NOT EXISTS
FOR (p:Post)
ON EACH [p.title, p.body];

Источники

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки