Базы данных

Граф базы данных

Google Knowledge Graph содержит 500 миллиардов фактов о 5 миллиардах сущностей. Когда ищешь "Barack Obama" - Google мгновенно показывает связи: образование, должности, семья. Это граф. Neo4j хранит similar граф в eBay для 800+ миллионов товаров и их атрибутов.

  • **PayPal**: Neo4j для fraud detection - анализ связей между аккаунтами, IP, устройствами выявляет rings в реальном времени
  • **LinkedIn**: граф 900+ млн пользователей для "People You May Know" и степеней связи
  • **NASA**: граф зависимостей компонентов для impact analysis - как изменение одной системы влияет на миссию

Граф модель данных

Graph database хранит данные как узлы (nodes) с properties и рёбра (relationships/edges) с типами и properties. Каждое ребро направлено и типизировано: (:User)-[:FOLLOWS]->(:User), (:User)-[:PURCHASED]->(:Product). Ключевое преимущество: рёбра - first-class граждане, не просто foreign keys.

Native graph storage: Neo4j хранит узлы и рёбра в специальных файлах с direct pointers. Traversal = follow the pointer, не index lookup. При обходе 1 миллиона рёбер - Neo4j не медленнее чем при 1000. В SQL JOIN замедляется пропорционально размеру таблиц.

Почему graph DB эффективнее SQL для запроса "друзья друзей пользователя" при большом количестве пользователей?

Cypher Query Language

Cypher - декларативный query language для Neo4j. ASCII art синтаксис: (:Label) - узел, -[:TYPE]-> - ребро. Pattern matching: MATCH описывает структуру которую нужно найти. WHERE добавляет условия. RETURN определяет результат.

OpenCypher - открытый стандарт, поддерживается не только Neo4j но и Amazon Neptune, ArangoDB, Redis Graph. GQL (Graph Query Language) - ISO стандарт 2024 года, унифицирует синтаксис graph queries.

Cypher запрос: MATCH (a)-[:KNOWS*2..4]-(b) WHERE a.name = "Alice". Что делает *2..4?

Алгоритмы обхода графа

Neo4j Graph Data Science library предоставляет готовые алгоритмы: PageRank (влиятельность узла), Community Detection (Louvain, Label Propagation), Shortest Path (Dijkstra, A*), Centrality. Используются для рекомендаций, fraud detection, network analysis.

Twitter в 2022 году использовал Neo4j для анализа сети ботов перед приобретением Маском. Graph algorithms позволили выявить координированные сети аккаунтов через community detection и temporal patterns.

LinkedIn показывает "2nd degree connections" - друзья друзей. Какой алгоритм используется?

Граф vs SQL

Граф БД выигрывает при: связанных данных с variable depth traversal, когда структура связей сама по себе важна, динамических схемах. SQL выигрывает при: агрегациях больших объёмов, транзакционных операциях, хранении данных.

ЗадачаSQL (PostgreSQL)Graph (Neo4j)
Найти друзей пользователяJOIN friends f WHERE f.user_id=123MATCH (u)-[:KNOWS]->(f) WHERE u.id=123
Друзья друзейDouble JOINMATCH (u)-[:KNOWS*2]->(foaf)
Кратчайший путьRecursive CTE (медленно)Built-in Dijkstra (быстро)
SUM продаж за месяцБыстро (GROUP BY)Медленно (не оптимизировано)
Fraud detection ringОчень медленно (N JOINs)Быстро (graph traversal)

AGE (Apache Graph Extension) добавляет граф возможности прямо в PostgreSQL. Используется когда есть существующая PostgreSQL инфраструктура и не хочется отдельный Neo4j. Производительность ниже нативного Neo4j, но интеграция проще.

Финансовое приложение нужно: хранить транзакции (ACID) И находить паттерны мошенничества через сеть аккаунтов. Что выбрать?

Use Cases и когда использовать

Graph DB реально применяется: knowledge graphs (Google, Amazon), recommendation engines (Netflix, Amazon), fraud detection (PayPal, Mastercard), network/IT operations, identity access management, drug discovery (связи молекул и белков).

  • Рекомендации: "купили вместе", "похожие пользователи" - связи между сущностями
  • Fraud detection: координированные сети аккаунтов, money laundering rings
  • Knowledge graph: семантические связи между сущностями (Google Knowledge Graph)
  • IAM: кто имеет доступ к чему через иерархию ролей
  • Network operations: зависимости сервисов, impact analysis при падении

Amazon Neptune - managed graph БД поддерживающий два graph query languages: Gremlin и SPARQL. Используется NASA для управления зависимостями компонентов миссий, 84.51° (аналитика Kroger) для персонализации покупок.

Graph DB заменяет реляционную - всё можно хранить в графе

Graph DB - специализированный инструмент для связанных данных. Плохо подходит для bulk analytics, ACID транзакций, хранения больших объёмов неструктурированных данных. Используется как дополнение к основной СУБД.

На SQL собеседованиях часто спрашивают про граф БД. Правильный ответ: это специализированный инструмент для специфических задач с traversal, не universal replacement.

Какой use case НЕ подходит для graph database?

Итоги

  • **Traversal**: graph следует pointer-ам, SQL делает JOIN; при глубоком traversal разница в скорости экспоненциальная
  • **Cypher pattern matching**: (:Label)-[:TYPE]->(node) - интуитивный ASCII art синтаксис для описания паттернов
  • **Специализация**: граф для связанных данных и traversal, SQL для агрегаций и транзакций - не взаимозаменяемы

Связанные темы

Graph DB часто используется в polyglot архитектурах:

  • Polyglot Persistence — Neo4j как специализированный layer поверх PostgreSQL как источника истины
  • Vector Databases — Graph + Vector: knowledge graph с semantic embeddings для AI приложений
  • Дизайн платёжной системы — Граф для fraud detection - важная часть платёжных систем

Вопросы для размышления

  • Как бы ты смоделировал граф для рекомендательной системы Netflix (фильмы, пользователи, жанры, актёры)?
  • В каком случае recursive CTE в PostgreSQL может заменить graph DB?
  • Почему социальная сеть на 1+ млрд пользователей не хранит весь граф в Neo4j?

Связанные уроки

  • ds-16-graphs-intro
Граф базы данных

0

1

Войти