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