Введение

Открытая система управления реляционными базами данных, ориентированная на столбцы

MonetDB — это система управления реляционными базами данных (RDBMS) с открытым исходным кодом, ориентированная на столбцы, изначально разработанная в Centrum Wiskunde & Informatica (CWI) в Нидерландах. Она предназначена для обеспечения высокой производительности при выполнении сложных запросов к большим базам данных, например, при объединении таблиц с сотнями столбцов и миллионами строк. MonetDB используется в высокопроизводительных приложениях для онлайн-аналитической обработки, интеллектуального анализа данных, географических информационных систем (ГИС), фреймворка описания ресурсов (RDF), поиска текста и обработки выравнивания последовательностей.

История

Проекты по интеллектуальному анализу данных в 1990-х годах требовали усовершенствованной поддержки аналитических баз данных. Это привело к созданию спин-оффа CWI под названием Data Distilleries, который использовал ранние реализации MonetDB в своем аналитическом пакете. В конечном итоге Data Distilleries стала дочерней компанией SPSS в 2003 году, которая, в свою очередь, была приобретена IBM в 2009 году. MonetDB в его нынешнем виде был впервые создан в 2002 году докторантом Питером Бонцем и профессором Мартином Л. Керстеном в рамках исследовательского проекта MAGNUM 1990-х годов в Амстердамском университете. Изначально он назывался просто Monet, в честь французского художника-импрессиониста Клода Моне. Первая версия под лицензией открытого исходного кода (модифицированная версия Mozilla Public License) была выпущена 30 сентября 2004 года. Когда MonetDB версии 4 была выпущена в общественное достояние, командой MonetDB/CWI было добавлено множество расширений в кодовую базу, включая новый SQL-интерфейс, поддерживающий стандарт SQL:2003. MonetDB внедрил инновации во всех слоях СУБД: модель хранения, основанную на вертикальной фрагментации, современную архитектуру выполнения запросов, оптимизированную для ЦП, которая часто обеспечивала MonetDB преимущество в скорости по сравнению с тем же алгоритмом в типичной интерпретируемой СУБД. Это была одна из первых систем баз данных, настроивших оптимизацию запросов для кэшей процессора. MonetDB включает в себя автоматические и самонастраивающиеся индексы, оптимизацию запросов во время выполнения и модульную архитектуру программного обеспечения. К 2008 году начался проект X100 (MonetDB/X100), который развился в технологию VectorWise. VectorWise была приобретена корпорацией Actian, интегрирована с базой данных Ingres и продавалась как коммерческий продукт. В 2011 году была начата масштабная работа по обновлению кодовой базы MonetDB. В рамках этой работы код ядра MonetDB 4 и его компонентов XQuery был заморожен. В MonetDB 5 части SQL-слоя были перенесены в ядро. Экспериментальная поддержка интерфейса Jaql была удалена с выпуском в октябре 2014 года. С выпуском в июле 2015 года MonetDB получила поддержку шардинга данных только для чтения и постоянных индексов. В этом выпуске устаревший модуль потоковой передачи данных DataCell также был удален из основной кодовой базы для оптимизации кода. Кроме того, лицензия была изменена на Mozilla Public License, версия 2.0.

Архитектура

Архитектура MonetDB представлена тремя слоями, каждый из которых имеет свой набор оптимизаторов. Фронтенд является верхним слоем, предоставляющим интерфейс запросов для SQL, с интерфейсами SciQL и SPARQL в разработке. Запросы преобразуются в предметно-ориентированные представления, такие как реляционная алгебра для SQL, и оптимизируются. Сгенерированные логические планы выполнения затем транслируются в инструкции языка ассемблера MonetDB (MAL), которые передаются на следующий уровень. Средний или бэкенд слой предоставляет ряд оптимизаторов, основанных на стоимости, для MAL. Нижний слой – это ядро базы данных, обеспечивающее доступ к данным, хранящимся в бинарных ассоциативных таблицах (BAT). Каждая BAT представляет собой таблицу, состоящую из столбцов идентификаторов объектов и значений, представляющих один столбец в базе данных. Авторы из группы Database Architectures Института CWI, в состав которой входят Милена Иванова, Мартин Керстен, Нильс Несс и Ромуло Гонсалвес, получили награду "За лучший доклад" (Best Paper Runner Up) на конференции ACM SIGMOD 2009 за свою работу по повторному использованию запросов.

Крекер базы данных

MonetDB была одной из первых баз данных, внедривших технологию Database Cracking. Database Cracking – это инкрементное частичное индексирование и/или сортировка данных, напрямую использующее столбчатую структуру MonetDB. Cracking – это метод, переносящий затраты на поддержание индексов с операций обновления на обработку запросов. Оптимизаторы конвейера запросов используются для модификации планов запросов с целью применения Cracking и распространения соответствующей информации. Эта техника позволяет улучшить время доступа к данным и обеспечить самоорганизующееся поведение. Технология Database Cracking была удостоена премии J. Gray за лучшую диссертацию ACM SIGMOD 2011 года.

Компоненты

Существует ряд расширений для MonetDB, которые расширяют функциональность движка базы данных. Благодаря трехслойной архитектуре, высокоуровневые интерфейсы запросов могут воспользоваться оптимизациями, выполненными на уровнях бэкенда и ядра.

SQL

MonetDB/SQL — это расширение верхнего уровня, обеспечивающее полную поддержку транзакций в соответствии со стандартом SQL:2003. Data Vaults сопоставляют данные из распределённых хранилищ с массивами SciQL, что позволяет улучшить обработку пространственно-временных данных в MonetDB. SciQL будет дополнительно расширен для нужд проекта «Мозг человека».

Хранилища данных

Data Vault – это внешнее хранилище файлов для MonetDB, аналогичное стандарту SQL/MED. Технология Data Vault обеспечивает прозрачную интеграцию с распределёнными/удалёнными хранилищами файлов. Она разработана для исследования и анализа научных данных, в частности, данных дистанционного зондирования Земли. Данные хранятся в файловом хранилище в исходном формате и загружаются в базу данных по требованию, только при необходимости. Система также может обрабатывать данные при загрузке, если это требуется форматом данных. В результате даже очень большие хранилища файлов могут быть эффективно проанализированы, поскольку в базе данных обрабатываются только необходимые данные. Доступ к данным возможен через интерфейсы MonetDB SQL или SciQL. Технология Data Vault использовалась в проекте Европейского Союза TELEIOS, целью которого было создание виртуальной обсерватории для данных наблюдения Земли.

SAM/BAM

MonetDB имеет модуль SAM/BAM для эффективной обработки данных выравнивания последовательностей. Модуль разработан для биоинформатических исследований и включает в себя загрузчик данных SAM/BAM, а также набор SQL UDF для работы с данными ДНК.

RDF/SPARQL

MonetDB/RDF — это расширение на основе SPARQL для работы со связанными данными, добавляющее поддержку RDF и позволяющее MonetDB функционировать в качестве хранилища троек. Разрабатывается в рамках проекта Linked Open Data 2.

Интеграция с Python

Аналогично встроенным R UDF в MonetDB, база данных теперь поддерживает UDF, написанные на Python/NumPy. Реализация использует массивы NumPy (которые сами по себе являются обертками Python для массивов C), что обеспечивает минимальные накладные расходы и функциональную интеграцию Python со скоростью, сопоставимой с нативными SQL-функциями. Встроенные функции Python также поддерживают отображаемые операции, позволяя пользователям выполнять Python-функции параллельно в SQL-запросах. На практике эта функция предоставляет пользователям доступ к библиотекам Python/NumPy/SciPy, предлагающим широкий выбор статистических и аналитических функций.

Монета

После выпуска удаленного драйвера для R (MonetDB. R) и R UDFs в MonetDB (MonetDB/R), авторы создали встроенную версию MonetDB в R под названием MonetDBLite. Она распространяется как R-пакет, избавляя от необходимости управлять сервером базы данных, что требовалось для предыдущих интеграций с R. СУБД работает непосредственно в процессе R, устраняя необходимость в коммуникации через сокеты и сериализации данных, что значительно повышает эффективность. Цель разработки – предоставить R-пакет, аналогичный SQLite по простоте использования, но с производительностью оптимизированного для работы в памяти столбцового хранилища.

Предыдущие расширения

Ряд прежних расширений со временем были признаны устаревшими и удалены из стабильной кодовой базы. Среди заметных примеров — расширение XQuery, удаленное в MonetDB версии 5, расширение JAQL и расширение для потоковой передачи данных под названием Data Cell.