Открыть сервис

MonetDB

MonetDB — это система управления базами данных (СУБД), ориентированная на колоночное хранение данных и оптимизированная для выполнения аналитических запросов (OLAP). Разрабатывается с 1990-х годов в рамках исследовательского проекта CWI (Centrum Wiskunde & Informatica, Нидерланды). Относится к классу in-memory СУБД, хотя поддерживает и дисковое хранение. Ключевая особенность — использование модели «колоночного мозаичного хранения» (PAX) и собственного языка запросов MAL (MonetDB Assembly Language), что позволяет достигать высокой производительности при работе с большими объёмами данных.

История

Проект MonetDB начался как часть исследовательской работы по созданию систем баз данных, эффективно работающих с аналитическими нагрузками. Первая версия была выпущена в 1994 году под названием Monet. В 2002 году проект был переименован в MonetDB, и началась разработка версии с поддержкой SQL. В 2004 году вышла первая стабильная версия с SQL-интерфейсом. С 2008 года MonetDB распространяется под лицензией Mozilla Public License (MPL) 2.0. В 2010-х годах система получила поддержку геопространственных данных, интеграцию с Apache Hadoop и поддержку языка R. В 2018 году была выпущена версия 11.29, в которой появилась поддержка JSON и полнотекстового поиска.

Архитектура

Колоночное хранение

В отличие от традиционных реляционных СУБД (например, PostgreSQL, MySQL), которые хранят данные построчно, MonetDB хранит каждый столбец таблицы отдельно. Это позволяет:

  • Считывать только необходимые для запроса столбцы, значительно сокращая объём ввода-вывода.
  • Использовать эффективные алгоритмы сжатия данных, адаптированные под типы данных в столбце.
  • Выполнять векторные операции над данными, используя SIMD-инструкции процессора.

In-memory обработка

MonetDB оптимизирована для работы с данными, полностью размещёнными в оперативной памяти. Хотя система поддерживает хранение на диске, основная архитектура предполагает, что весь рабочий набор данных помещается в RAM. Это обеспечивает минимальные задержки при выполнении запросов.

Язык MAL

Внутренний язык запросов MonetDB — MAL (MonetDB Assembly Language) — представляет собой низкоуровневый ассемблерный язык, на который транслируются SQL-запросы. MAL-инструкции оперируют над колонками (батареями, batteries) и поддерживают параллельное выполнение. Это позволяет оптимизировать выполнение запросов на уровне ядра системы.

Модульность

Архитектура MonetDB построена по модульному принципу. Основные модули:

  • SQL front-end — интерфейс для приёма SQL-запросов.
  • MAL compiler — оптимизатор и компилятор SQL в MAL.
  • Kernel — ядро, выполняющее MAL-инструкции.
  • Storage layer — слой хранения, управляющий колонками и буферами.

Основные характеристики

Производительность

MonetDB демонстрирует высокую производительность на аналитических запросах (агрегации, группировки, соединения больших таблиц). В тестах TPC-H (набор бенчмарков для аналитических СУБД) MonetDB часто показывает результаты, сопоставимые или превосходящие коммерческие системы, такие как Oracle или SQL Server, при работе с объёмами данных до нескольких терабайт.

Поддержка SQL

MonetDB поддерживает стандарт SQL:2003 с расширениями, включая:

Поддержка геопространственных данных

С версии 11.19 MonetDB включает модуль для работы с геоданными, основанный на стандарте OGC (Open Geospatial Consortium). Поддерживаются типы POINT, LINESTRING, POLYGON, MULTIPOLYGON и функции для их анализа (например, ST_Within, ST_Intersects).

Интеграция с другими системами

MonetDB может интегрироваться с:

  • Apache Hadoop (через MonetDB/Hadoop).
  • R (через пакет MonetDB.R).
  • Python (через модуль pymonetdb).
  • ODBC/JDBC (через стандартные драйверы).

Применение

MonetDB используется в следующих областях:

Сравнение с другими СУБД

ПараметрMonetDBPostgreSQLClickHouse
Тип храненияКолоночноеСтрочноеКолоночное
Основное назначениеOLAPOLTP/OLAPOLAP
In-memoryДаНетДа
Поддержка SQLДа (SQL:2003)Да (SQL:2011)Да (SQL:2011)
Сжатие данныхДаНетДа
Параллельное выполнениеДаДаДа
ЛицензияMPL 2.0PostgreSQLApache 2.0

Ограничения

  • Не оптимизирована для транзакционных нагрузок (OLTP). Вставка и обновление отдельных строк выполняются медленнее, чем в строчных СУБД.
  • Отсутствие поддержки триггеров и хранимых процедур (на уровне SQL).
  • Ограниченные возможности по работе с данными, не помещающимися в оперативную память.
  • Меньшая популярность и, как следствие, меньшее количество готовых решений и сообщества по сравнению с PostgreSQL или ClickHouse.

Развитие

Проект MonetDB активно развивается. Основные направления:

  • Улучшение поддержки распределённых вычислений (через MonetDB/Shard).
  • Интеграция с облачными платформами.
  • Оптимизация для работы с GPU (через проект MonetDB/GPU).
  • Поддержка новых форматов данных (Parquet, Avro).

Источники

  • Idreos, S., et al. "MonetDB: Two Decades of Research in Column-oriented Database Architectures." IEEE Data Engineering Bulletin, 2012.
  • Boncz, P., et al. "MonetDB/X100: A Column-Oriented DBMS From a CPU's Perspective." Proceedings of the 2005 ACM SIGMOD International Conference on Management of Data.
  • Официальная документация MonetDB. monetdb.org.
  • CWI. "MonetDB: A High-Performance Database System for Analytical Workloads." Centrum Wiskunde & Informatica, 2020.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →