<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Yuriy Gavrilov: posts tagged Graph</title>
<link>https://gavrilov.info/tags/graph/</link>
<description>Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov</description>
<author></author>
<language>en</language>
<generator>Aegea 11.4 (v4171e)</generator>

<itunes:owner>
<itunes:name></itunes:name>
<itunes:email>yvgavrilov@gmail.com</itunes:email>
</itunes:owner>
<itunes:subtitle>Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov</itunes:subtitle>
<itunes:image href="https://gavrilov.info/pictures/userpic/userpic-square@2x.jpg?1643451008" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Рейтинг Open Source Графовых СУБД для AdTech</title>
<guid isPermaLink="false">305</guid>
<link>https://gavrilov.info/all/reyting-open-source-grafovyh-subd-dlya-adtech/</link>
<pubDate>Sun, 14 Dec 2025 14:24:45 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/reyting-open-source-grafovyh-subd-dlya-adtech/</comments>
<description>
&lt;p&gt;Для задач &lt;b&gt;AdTech сегментации&lt;/b&gt; (профилирование пользователей, identity resolution, поиск look-alike аудиторий) набор требований к графовой базе данных специфичен: нужна высокая скорость операций чтения/записи (real-time bidding/serving) и горизонтальная масштабируемость (миллиарды событий и связей).&lt;/p&gt;
&lt;p&gt;Учитывая популярность текущего стека (&lt;b&gt;ClickHouse, Trino, Qdrant&lt;/b&gt;), идеальная графовая база должна уметь интегрироваться в аналитический контур (через Trino или прямые коннекторы) и дополнять ClickHouse (который хранит логи событий), взяв на себя хранение топологии связей.&lt;/p&gt;
&lt;p&gt;Ниже представлен небольшой обзор и рейтинг Open Source решений на 2024-2025 год с фокусом на масштабируемость.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;Рейтинг Open Source Графовых СУБД для AdTech&lt;/h4&gt;
&lt;p&gt;Разделим 12 решений на 3 эшелона по пригодности для высоконагруженной сегментации.&lt;/p&gt;
&lt;h5&gt;1 эшелон: Лидеры производительности и масштабирования (Native Distributed)&lt;/h5&gt;
&lt;p&gt;Эти базы изначально создавались для кластеров и больших объемов данных.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. NebulaGraph&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Тип:&lt;/b&gt; Native Distributed Graph Database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Язык запросов:&lt;/b&gt; nGQL (SQL-подобный).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Архитектура:&lt;/b&gt; Разделение Compute (GraphD) и Storage (StorageD). Shared-nothing.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы для вас:&lt;/b&gt; Это топ-1 выбор для AdTech масштаба Tencent или Meituan. Спокойно переваривает сотни миллиардов вершин и триллионы ребер. Обеспечивает миллисекундный отклик при обходе графа (hops) на большую глубину.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt; Более крутая кривая обучения, чем у Neo4j. Сообщество меньше, но растет.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Связь со стеком:&lt;/b&gt; Отлично дополнит ClickHouse (CH хранит атрибуты, Nebula — связи). Есть коннекторы для Spark/Flink. А через Spark можно дойти до Trino.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;2. Dgraph&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Тип:&lt;/b&gt; Native Distributed Graph.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Язык запросов:&lt;/b&gt; GraphQL (модифицированный DQL).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Архитектура:&lt;/b&gt; Распределенная, использует BadgerDB (KV store) под капотом. Поддерживает шардинг и репликацию “из коробки” в open source версии.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt; Горизонтальное масштабирование. Очень удобна для фронтенд-разработчиков благодаря GraphQL. Высокая пропускная способность.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt; Специфичный язык запросов, если вы привыкли к SQL/Cypher. В последние годы темпы разработки ядра немного снизились относительно конкурентов.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;3. Memgraph&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Тип:&lt;/b&gt; In-Memory Graph Database (написана на C++).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Язык запросов:&lt;/b&gt; Cypher (совместим с Neo4j).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Архитектура:&lt;/b&gt; Работает в оперативной памяти (с возможностью сброса на диск).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt; &lt;b&gt;Самая быстрая&lt;/b&gt; для задач реального времени (вычисление фичей для RTB). Полная совместимость с экосистемой Neo4j (драйверы, протокол Bolt). Поддерживает Python/Rust процедуры. Отличная работа с Streaming данными (Kafka).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt; Ограничена объемом RAM (хотя есть disk-spill, это снижает скорость).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Связь со стеком:&lt;/b&gt; Отлично стыкуется с моделями AI (Qdrant), так как позиционируется для “Graph AI”.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2 эшелон: Классика и Универсалы&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;4. Neo4j (Community Edition)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Тип:&lt;/b&gt; Native Graph.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Язык:&lt;/b&gt; Cypher (стандарт индустрии).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt; Огромное сообщество, лучшая документация, куча плагинов (APOC).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Главный минус для AdTech:&lt;/b&gt; Open Source версия (Community) ограничена &lt;b&gt;одним узлом&lt;/b&gt;. Нет встроенного кластеризации и шардинга (доступно только в Enterprise за большие деньги). Для “технического задела на вырост” в Open Source варианте — это бутылочное горлышко.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;5. ArangoDB&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Тип:&lt;/b&gt; Multi-model (Graph, Document, Key/Value).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Язык:&lt;/b&gt; AQL (похож на SQL).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt; Гибкость. Можно хранить сложные JSON-документы (как в Mongo) и связывать их.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt; При глубоких обходах графа (“друзья друзей друзей”) проигрывает специализированным Native Graph базам по скорости. Это компромиссное решение.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;6. JanusGraph&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Тип:&lt;/b&gt; Layered Graph Database.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt; Работает поверх мощных бэкендов (Cassandra, HBase, ScyllaDB) и использует Elasticsearch для индексации. Масштабируемость ограничена только бэкендом.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt; Очень “тяжелая” инфраструктура (JVM based). Сложна в настройке и эксплуатации. Медленнее на простых запросах из-за сетевых хопов между слоями. Часто считается “устаревающей” архитектурой по сравнению с Nebula/Dgraph.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;7. Apache AGE (PostgreSQL Extension)&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Тип:&lt;/b&gt; Extension.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Суть:&lt;/b&gt; Превращает PostgreSQL в графовую БД с поддержкой Cypher.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt; Если вы знаете Postgres, вы знаете AGE. Не нужно новой инфраструктуры.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt; Производительность ограничена движком Postgres. Сложно масштабировать горизонтально на запись (проблема шардинга PG).&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3 эшелон: Нишевые и Новые игроки&lt;/h5&gt;
&lt;p&gt;&lt;b&gt;8. HugeGraph&lt;/b&gt; (Baidu) — аналог JanusGraph, популярен в Китае, очень мощный, но документация местами страдает.&lt;br /&gt;
&lt;b&gt;9. OrientDB&lt;/b&gt; — мультимодельная, была популярна, но сейчас развитие замедлилось.&lt;br /&gt;
&lt;b&gt;10. FalkorDB&lt;/b&gt; — форк закрывшегося RedisGraph (Redis module). Очень быстрый, использует разреженные матрицы. Интересен, если уже есть Redis.&lt;br /&gt;
&lt;b&gt;11. Cayley&lt;/b&gt; — написана на Go (Google), простая, работает с триплетами (Linked Data), но для сложной AdTech логики может не хватить функционала.&lt;br /&gt;
&lt;b&gt;12. TerminusDB&lt;/b&gt; — интересная база с концепцией “Git для данных”, но специфична для версионирования знаний, а не высоконагруженной сегментации.&lt;/p&gt;
&lt;h4&gt;Сравнительная таблица (ТОП-7 для выбора)&lt;/h4&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;СУБД&lt;/td&gt;
&lt;td style="text-align: center"&gt;Язык запросов&lt;/td&gt;
&lt;td style="text-align: center"&gt;Архитектура&lt;/td&gt;
&lt;td style="text-align: center"&gt;Масштабирование (Open Source)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Скорость (Read/Traverse)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Сложность эксплуатации&lt;/td&gt;
&lt;td style="text-align: center"&gt;Идеально для&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;NebulaGraph&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;nGQL (SQL-like)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Distributed Native&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Отличное&lt;/b&gt; (Sharding+Replication)&lt;/td&gt;
&lt;td style="text-align: center"&gt;🔥 Очень высокая&lt;/td&gt;
&lt;td style="text-align: center"&gt;Средняя/Высокая&lt;/td&gt;
&lt;td style="text-align: center"&gt;Big Data, AdTech, Fraud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Memgraph&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Cypher&lt;/td&gt;
&lt;td style="text-align: center"&gt;In-Memory (C++)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Вертикальное / Репликация&lt;/td&gt;
&lt;td style="text-align: center"&gt;🚀 &lt;b&gt;Топ-1 (Low Latency)&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Низкая (как Docker)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Real-time features, Streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Dgraph&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;GraphQL&lt;/td&gt;
&lt;td style="text-align: center"&gt;Distributed Native&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Отличное&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Высокая&lt;/td&gt;
&lt;td style="text-align: center"&gt;Средняя&lt;/td&gt;
&lt;td style="text-align: center"&gt;App Backend, 360 Customer View&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Neo4j (CE)&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Cypher&lt;/td&gt;
&lt;td style="text-align: center"&gt;Native&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Нет&lt;/b&gt; (только 1 нода)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Высокая (локально)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Низкая&lt;/td&gt;
&lt;td style="text-align: center"&gt;R&amp;D, малые проекты&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;ArangoDB&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;AQL&lt;/td&gt;
&lt;td style="text-align: center"&gt;Multi-model&lt;/td&gt;
&lt;td style="text-align: center"&gt;Хорошее (Cluster mode)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Средняя&lt;/td&gt;
&lt;td style="text-align: center"&gt;Средняя&lt;/td&gt;
&lt;td style="text-align: center"&gt;Гибридные данные (Docs+Graph)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;JanusGraph&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Gremlin&lt;/td&gt;
&lt;td style="text-align: center"&gt;Layered (over NoSQL)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Бесконечное (зависит от Backend)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Низкая/Средняя&lt;/td&gt;
&lt;td style="text-align: center"&gt;☠️ Высокая&lt;/td&gt;
&lt;td style="text-align: center"&gt;Если уже есть HBase/Cassandra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Apache AGE&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Cypher&lt;/td&gt;
&lt;td style="text-align: center"&gt;Postgres Ext&lt;/td&gt;
&lt;td style="text-align: center"&gt;Только Read Replicas&lt;/td&gt;
&lt;td style="text-align: center"&gt;Средняя&lt;/td&gt;
&lt;td style="text-align: center"&gt;Низкая (если знают PG)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Гибрид SQL + Graph&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h4&gt;Интеграция с текущим стеком (Qdrant, Trino или ClickHouse)&lt;/h4&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Qdrant + Graph DB = GraphRAG / Semantic Search:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Сегментация пользователей часто требует поиска не только по связям (“кто кликал то же, что и я”), но и по похожести векторов (“чей профиль похож на мой”).&lt;/li&gt;
  &lt;li&gt;Memgraph&lt;b&gt; и **Neo4j&lt;/b&gt; имеют встроенные модули для работы с векторами, но так как у вас уже есть &lt;b&gt;Qdrant&lt;/b&gt;, вам нужна база, которая *не пытается заменить Qdrant*, а позволяет хранить ID векторов в узлах графа.&lt;/li&gt;
  &lt;li&gt;NebulaGraph** позволяет хранить embedding в свойствах узла, но поиск лучше делегировать Qdrant.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;b&gt;Trino:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Вам захочется делать SQL-запросы сразу к ClickHouse (события) и Графу (профиль).&lt;/li&gt;
  &lt;li&gt;У &lt;b&gt;Neo4j&lt;/b&gt; и &lt;b&gt;NebulaGraph&lt;/b&gt; есть коннекторы, позволяющие Trino (через JDBC или нативные коннекторы) запрашивать данные. Это мощнейшая связка для аналитиков. Отдельно нативного конектора к Trino пока не найти, но скоро может появится поддержка iceberg &lt;a href="https://github.com/vesoft-inc/nebula/discussions/5902"&gt;https://github.com/vesoft-inc/nebula/discussions/5902&lt;/a&gt; или пока можно использоваться связку через Spark.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;b&gt;ClickHouse:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Паттерн: ClickHouse хранит “сырые” логи (миллиарды строк). Агрегаты и связи (User Graph) пересчитываются и заливаются в Графовую БД для быстрого lookup.&lt;/li&gt;
  &lt;li&gt;NebulaGraph** имеет Exchange (инструмент на основе Spark) для массовой заливки данных из Warehouse.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h4&gt;Итоговая рекомендация&lt;/h4&gt;
&lt;p&gt;Учитывая, что вы хотите &lt;b&gt;Open Source&lt;/b&gt; и вам нужен &lt;b&gt;технический задел (масштабирование)&lt;/b&gt; для AdTech:&lt;/p&gt;
&lt;h5&gt;🏆 Выбор №1: NebulaGraph&lt;/h5&gt;
&lt;p&gt;Это наиболее близкий аналог “ClickHouse в мире графов”.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Почему:** Он создан для хранения миллиардов вершин (пользователей/устройств) и работы в кластере. У него shared-nothing архитектура, которая необходима для роста. Язык nGQL будет понятен вашим аналитикам, знающим SQL (ClickHouse/Trino).&lt;/li&gt;
&lt;li&gt;Для AdTech:** Идеально решает проблемы *Identity Resolution* (склеивание cookie, device_id, user_id и других атрибутов в единый граф) на больших объемах.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;🥈 Выбор №2: Memgraph&lt;/h5&gt;
&lt;p&gt;Если ваши графы помещаются в память (сотни миллионов узлов, но не десятки миллиардов) и критична задержка (latency) менее 10 мс для *real-time* принятия решений.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Почему:** Он безумно быстр. Он совместим с Cypher (легко нанимать людей или переезжать с Neo4j). Написан на C++, очень эффективен.&lt;/li&gt;
&lt;li&gt;Интеграция:** Идеально, если вы планируете стримить данные из Kafka, обновлять граф и сразу выдавать сегменты.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;🥉 Выбор №3: Apache AGE (или ArangoDB)&lt;/h5&gt;
&lt;p&gt;Только если объем графа невелик, и вы хотите минимизировать зоопарк технологий, оставаясь в рамках “почти SQL” решений. Но для серьезного AdTech они не рекомендуется как *основное* хранилище графа пользователей.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Совет:&lt;/b&gt; Начните пилот (PoC) с &lt;b&gt;NebulaGraph&lt;/b&gt;. Попробуйте загрузить туда выгрузку из ClickHouse и сравнить скорость выполнения запросов “найти всех пользователей, связанных через устройство X на глубину 3 шага” с тем, как это делается сейчас (вероятно, через JOINs в реляционке или CH). Если сложность эксплуатации Nebula покажется высокой, можно посмотреть в сторону &lt;b&gt;Memgraph&lt;/b&gt; как более легкой альтернативы и применять их не на одном большом графе например, а на нескольких малых в реальном времени, а готовые расчеты уже хранить в привычных местах.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Еще можно почитать:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bigdataschool.ru/blog/memgraph-vs-neo4j/"&gt;Сравнение Memgraph и Neo4j bigdataschool.ru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bigdataschool.ru/blog/neo4j-vs-tigergraph-what-to-choose.html"&gt;Сравнение Neo4j и TigerGraph (для понимания коммерческого рынка bigdataschool.ru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.merionet.ru/articles/10-lucsix-resenii-dlia-raboty-s-grafovymi-bazami-dannyx"&gt;Обзор графовых БД wiki.merionet.ru&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вот еще мысль и про языки немного. Если проект большой с единым графом для разных нужд, то NebulaGraph выглядит лучшим решением, но архитектурно можно выбрать много средних и малых графов. Для второго подхода хорошо Memgraph с его языком Cypher&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;1. Семейство Cypher (OpenCypher / ISO GQL)&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;Базы:&lt;/b&gt; *Neo4j, Memgraph, FalkorDB, Apache AGE.*&lt;/p&gt;
&lt;p&gt;Cypher — это «SQL для графов». Это декларативный язык, использующий ASCII-арт для визуализации связей в коде (например, `(User)-[:CLICKS]-&gt;(Ad)`).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Функциональность:&lt;/b&gt; Очень богатая. Поддерживает сложные паттерны (Pattern Matching), агрегации, пути переменной длины. В апреле 2024 года ISO утвердила стандарт &lt;b&gt;GQL&lt;/b&gt; (Graph Query Language), который во многом основан на Cypher.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Интуитивность:&lt;/b&gt; Код читается как предложение на английском. Самая низкая кривая входа.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Экосистема:&lt;/b&gt; Стандарт де-факто. Если вы знаете Cypher, вы можете переключаться между Neo4j, Memgraph и AGE без переобучения.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Выразительность:&lt;/b&gt; Идеален для глубокой аналитики и поиска сложных паттернов (Fraud Detection).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;Изначально создавался для одноузловых систем. В распределенных системах (шардинг) некоторые конструкции Cypher могут быть сложны для оптимизации движком.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Оценка для стека:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Memgraph/Neo4j:&lt;/b&gt; Работает идеально.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Apache AGE:&lt;/b&gt; Cypher оборачивается внутри SQL запросов Postgres, что немного громоздко, но функционально.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;FalkorDB:&lt;/b&gt; Реализует подмножество Cypher, очень быстро благодаря Redis, но функционал беднее, чем у Neo4j.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2. Семейство Gremlin (Apache TinkerPop)&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;Базы:&lt;/b&gt; *JanusGraph, HugeGraph, OrientDB (частично), Azure CosmosDB.*&lt;/p&gt;
&lt;p&gt;Gremlin — это императивный язык обхода графа (Traversals). Вы пишете не «что найти» (как в SQL/Cypher), а «куда идти» шаг за шагом.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Функциональность:&lt;/b&gt; Тьюринговская полнота. Можно написать алгоритм любой сложности прямо внутри запроса. Это скорее язык программирования потоков данных, чем язык запросов.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Контроль:&lt;/b&gt; Вы точно указываете базе, как обходить граф. Это важно для сверхбольших графов (как в JanusGraph/HugeGraph), где неверный план запроса может “положить” кластер.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Абстракция:&lt;/b&gt; Работает поверх любой БД, поддерживающей TinkerPop.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Сложность:&lt;/b&gt; Кривая обучения очень крутая. Код получается вербозным и сложным для отладки («write once, read never»).&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Устаревание:&lt;/b&gt; С появлением стандарта ISO GQL популярность Gremlin падает. Для новых проектов в 2025 году его выбирают редко, если только не привязаны к JanusGraph.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Пример AdTech:&lt;/b&gt; «Найти всех пользователей, кликнувших на этот баннер» на Gremlin будет длинной цепочкой вызовов методов (`g.V().has(‘Banner’...).out(‘CLICKS’)...`).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3. nGQL (NebulaGraph Query Language)&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;Базы:&lt;/b&gt; *NebulaGraph.*&lt;/p&gt;
&lt;p&gt;Собственный язык Nebula, который синтаксически мимикрирует под SQL, но логически работает с графами.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Функциональность:&lt;/b&gt; Заточена под распределенный Massive Parallel Processing (MPP).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;SQL-подход:&lt;/b&gt; Разработчикам, привыкшим к MySQL/ClickHouse, синтаксис `GO FROM ... OVER ...` будет понятнее, чем Gremlin.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Скорость:&lt;/b&gt; Спроектирован так, чтобы не позволять писать «плохие» запросы, которые убивают распределенный кластер. Вынуждает думать о том, где лежат данные (VID).&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Пайпы:&lt;/b&gt; Удобный синтаксис передачи результата одного шага в другой через `|` (как в Bash).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Vendor Lock-in:&lt;/b&gt; Это не стандарт. Переехать с Nebula на другую базу потребует переписывания всех запросов.&lt;/li&gt;
  &lt;li&gt;Не поддерживает полную гибкость Pattern Matching, как Cypher (хотя добавили поддержку `MATCH`, она менее производительна, чем нативный `GO`).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4. DQL (ранее GraphQL+-)&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;Базы:&lt;/b&gt; *Dgraph.*&lt;/p&gt;
&lt;p&gt;Это модифицированный GraphQL.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Функциональность:&lt;/b&gt; Идеальна для API. Вы запрашиваете данные в формате JSON-дерева, и база возвращает JSON.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Frontend-first:&lt;/b&gt; Фронтендерам не нужен бэкенд-прослойка, они могут (теоретически) ходить в базу почти напрямую.&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Работа с атрибутами:&lt;/b&gt; Поскольку Dgraph — это по сути распределенный Key-Value, DQL очень быстро достает атрибуты нод.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Слабая аналитика:&lt;/b&gt; Графовые алгоритмы и сложные обходы (traversals) на DQL писать сложнее и менее эффективно, чем на Cypher/nGQL. Это язык выборки данных, а не язык аналитики графов.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;5. AQL (ArangoDB Query Language)&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;Базы:&lt;/b&gt; *ArangoDB.*&lt;/p&gt;
&lt;p&gt;Гибридный язык, объединяющий возможности SQL (JOINs), работы с JSON (как в Mongo) и графовых обходов.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Функциональность:&lt;/b&gt; Одна из самых мощных среди “универсалов”. Позволяет в одном запросе сделать JOIN трех коллекций, отфильтровать JSON и пройтись по графу друзей.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Плюсы:&lt;/b&gt; Гибкость.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Минусы:&lt;/b&gt; Синтаксис `FOR u IN users FILTER ...` специфичен и многословен. Для чистых графовых задач (deep hopping) он медленнее нативных решений [ArangoDB vs Native Graph].&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;6. Другие / Устаревающие&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;OrientDB (SQL-extended):&lt;/b&gt; Пытались расширить SQL для графов. Сейчас проект стагнирует, язык считается тупиковой ветвью эволюции по сравнению с Cypher/GQL.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SQL Graph (MS SQL / PG SQL):&lt;/b&gt; В [статье про SQL Server](&lt;a href="https://learn.microsoft.com/ru-ru/sql/relational-databases/graphs/sql-graph-sample?view=sql-server-ver17)"&gt;https://learn.microsoft.com/ru-ru/sql/relational-databases/graphs/sql-graph-sample?view=sql-server-ver17)&lt;/a&gt; показан синтаксис `MATCH`, который Microsoft внедрила в T-SQL. Это попытка “догнать” Cypher, оставаясь в рамках реляционной модели. Удобно, если вы намертво привязаны к MS SQL, но неудобно для сложной аналитики.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cayley (Gizmo/MQL):&lt;/b&gt; Очень нишевый язык на базе Go или JS. Для AdTech продакшена слишком экзотичен.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h4&gt;Сводная таблица сравнения&lt;/h4&gt;
&lt;table cellpadding="0" cellspacing="0" border="0" class="e2-text-table"&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;Язык&lt;/td&gt;
&lt;td style="text-align: center"&gt;Базы данных&lt;/td&gt;
&lt;td style="text-align: center"&gt;Порог входа&lt;/td&gt;
&lt;td style="text-align: center"&gt;Для AdTech/High-load&lt;/td&gt;
&lt;td style="text-align: center"&gt;Стандартность (2025)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Примечание&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;nGQL&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;NebulaGraph&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Средний&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Идеально&lt;/b&gt; (Tencent scale)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Низкая (Vendor specific)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Топ для сотен млрд связей и кластерной архитектуры.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Cypher&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Memgraph&lt;/b&gt;, Neo4j, AGE&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Низкий&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Хорошо (Memgraph) / Средне (Neo4j)&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Высокая&lt;/b&gt; (основа ISO GQL)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Самый удобный для аналитиков и Data Science.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;DQL&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;Dgraph&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;Низкий (для Web-dev)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Хорошо (для OLTP)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Низкая&lt;/td&gt;
&lt;td style="text-align: center"&gt;Лучший выбор, если граф — это бэкенд для UI.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: right"&gt;&lt;b&gt;Gremlin&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;JanusGraph, HugeGraph&lt;/td&gt;
&lt;td style="text-align: center"&gt;Высокий&lt;/td&gt;
&lt;td style="text-align: center"&gt;Отлично (если настроить)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Падает (Legacy)&lt;/td&gt;
&lt;td style="text-align: center"&gt;Слишком сложен в поддержке, проигрывает современным языкам.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;&lt;b&gt;AQL&lt;/b&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;ArangoDB&lt;/td&gt;
&lt;td style="text-align: center"&gt;Средний&lt;/td&gt;
&lt;td style="text-align: center"&gt;Средне&lt;/td&gt;
&lt;td style="text-align: center"&gt;Низкая&lt;/td&gt;
&lt;td style="text-align: center"&gt;Хорош, если нужна “Document Store + Graph” в одном.&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h4&gt;Итоговая рекомендация&lt;/h4&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;b&gt;Если приоритет — производительность на масштабе (AdTech, сегментация 100M+ пользователей):&lt;/b&gt;  &lt;br /&gt;
Вам нужен &lt;b&gt;NebulaGraph&lt;/b&gt; и его &lt;b&gt;nGQL&lt;/b&gt;.&lt;/li&gt;

&lt;ul&gt;
  &lt;li&gt;*Почему:* В AdTech сценариях (как у Meituan/Tencent) критичны latency на “хопах” (hops). nGQL архитектурно заставляет писать запросы так, чтобы они эффективно параллелились. Он менее удобен, чем Cypher, но более предсказуем в нагрузке.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;b&gt;Если приоритет — Real-time аналитика, ML-фичи и скорость разработки:&lt;/b&gt;  &lt;br /&gt;
Вам нужен &lt;b&gt;Memgraph&lt;/b&gt; на &lt;b&gt;Cypher&lt;/b&gt;.&lt;/li&gt;

&lt;ul&gt;
  &lt;li&gt;*Почему:* Вы получаете совместимость с самой популярной экосистемой (Neo4j), стандартный язык Cypher (легко найти специалистов) и скорость C++ in-memory движка.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;b&gt;Если приоритет — дешевое горизонтальное масштабирование “для бедных” (в хорошем смысле):&lt;/b&gt;  &lt;br /&gt;
Вам нужен &lt;b&gt;Dgraph&lt;/b&gt; (DQL) или &lt;b&gt;NebulaGraph&lt;/b&gt;.&lt;/li&gt;

&lt;ul&gt;
  &lt;li&gt;У &lt;b&gt;Dgraph&lt;/b&gt; отличный шардинг из коробки и DQL закрывает 90% задач продуктовой разработки, но может буксовать на тяжелой аналитике.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;От чего стоит отказаться:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Neo4j Community:&lt;/b&gt; Язык Cypher прекрасен, но ограничения лицензии (отсутствие кластера) убьют проект на росте.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JanusGraph/HugeGraph (Gremlin):&lt;/b&gt; В 2025 году начинать проект на Gremlin — это создавать себе технический долг, так как индустрия движется в сторону ISO GQL (Cypher Style).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Apache AGE:&lt;/b&gt; Пока слишком сыро для High-load, проблемы с горизонтальным масштабированием Postgres никуда не деваются.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>


</channel>
</rss>