Mangle — когда SQL уже недостаточно

13 Apr, 2026
2,981
🔱 153
👥 38

Представьте, что вам нужно найти все проекты, затронутые уязвимостью log4j. В SQL вы бы написали громоздкий запрос с несколькими JOIN. А в Mangle это делается одним изящным правилом. Давайте разберёмся, что это за язык и почему он может стать вашим новым любимым инструментом для работы с данными.

Что такое Mangle и зачем он нужен

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

Главное преимущество Mangle — возможность объединять данные из разных источников и работать с ними единообразно. Если вы когда-либо сталкивались с проблемами интеграции разнородных данных, Mangle может стать для вас откровением.

Кому пригодится:

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

Ключевые возможности Mangle

1. Декларативные запросы с понятным синтаксисом

Вот как выглядит поиск уязвимых проектов в Mangle:

projects_with_vulnerable_log4j(P) :-
  projects(P),
  contains_jar(P, "log4j", Version),
  Version != "2.17.1",
  Version != "2.12.4",
  Version != "2.3.2".

Сравните это с эквивалентным SQL-запросом — разница в читаемости очевидна.

Реклама

2. Поддержка агрегаций

Mangle умеет не только выбирать данные, но и агрегировать их:

count_projects_with_vulnerable_log4j(Num) :-
  projects_with_vulnerable_log4j(P) |> do fn:group_by(), let Num = fn:Count().

3. Рекурсивные запросы

Вот как можно обходить граф зависимостей:

contains_jar(P, Name, Version) :-
  contains_jar_directly(P, Name, Version).

contains_jar(P, Name, Version) :-
  project_depends(P, Q),
  contains_jar(Q, Name, Version).

Такие возможности особенно полезны при анализе зависимостей в больших проектах.

Технические детали

Mangle реализован как библиотека на Go, что делает его удобным для встраивания в существующие приложения. Для работы с грамматикой используется ANTLR.

Интересная особенность: Mangle сохраняет все хорошие свойства Datalog (например, гарантированное завершение), хотя некоторые расширения могут эту гарантию нарушать.

Практическое применение

Где можно использовать Mangle уже сегодня?

  1. Анализ зависимостей — находить уязвимости в цепочках зависимостей
  2. Моделирование доменных знаний — создавать сложные онтологии
  3. Интеграция данных — объединять информацию из разных источников
  4. Анализ графов — работать с социальными сетями, транспортными системами

Пример из документации показывает, как моделировать маршруты поездов:

one_or_two_leg_trip(Codes, Start, Destination, Price) :-
  direct_conn(FirstCode, Start, Connecting, FirstLegPrice).
  direct_conn(SecondCode, Connecting, Destination, SecondLegPrice)
  |> let Code = [FirstCode, SecondCode],
     let Price = fn:plus(FirstLegPrice, SecondLegPrice).

Стоит ли пробовать?

Mangle — это мощный инструмент для определённого круга задач. Если вы:

  • Работаете со сложными данными
  • Устали от громоздких SQL-запросов
  • Нуждаетесь в рекурсивных запросах

...то Mangle определённо заслуживает вашего внимания. Проект активно развивается, имеет хорошую документацию и поддерживается сообществом.

Как начать:

  1. Изучите документацию
  2. Попробуйте демо-сервис
  3. Присоединяйтесь к обсуждениям

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

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.