Представлен выпуск СУБД DuckDB 0.10.0, сочетающей такие свойства SQLite, как компактность, возможность подключения в форме встраиваемой библиотеки, хранение БД в одном файле и удобный CLI-интерфейс, со средствами и оптимизациями для выполнения аналитических запросов, охватывающих значительную часть хранимых данных, например, выполняющих агрегирование всего содержимого таблиц или слияние нескольких больших таблиц. Код проекта распространяется под лицензией MIT. Разработка пока находится на стадии формирования экспериментальных выпусков, так как формат хранилища пока не стабилизирован и меняется от версии к версии.
В DuckDB предоставляется расширенный диалект языка SQL, включающий дополнительные возможности для обработки очень сложных и длительно выполняемых запросов. Поддерживается использование сложных типов (массивы, структуры, объединения) и возможность выполнения произвольных и вложенных коррелирующих подзапросов. Поддерживается одновременное выполнение нескольких запросов, выполнение запросов напрямую из файлов в формате CSV и Parquet. Имеется возможность импорта из СУБД PostgreSQL.
Помимо кода оболочки из SQLite проектом используется вынесенный в отдельную библиотеку парсер из PostgreSQL, компонент Date Math из MonetDB, своя реализация оконных функций (на базе алгоритма Segment Tree Aggregation), обработчик регулярных выражений на основе библиотеки RE2, собственные оптимизатор запросов, MVCC-механизм управления одновременным выполнением заданий (Multi-Version Concurrency Control), а также векторизированный движок выполнения запросов на базе алгоритма Hyper-Pipelining Query Execution, позволяющий в одной операции разом обрабатывать большие наборы значений.
Среди изменений в новом выпуске:
- Значительно увеличена производительность разбора данных в формате CSV. Например, чтение CSV-файла с 11 млн строк в новой версии сократилось с 2.6 сек. до 1.15 сек., а выполнение операции «SELECT COUNT(*)» поверх CSV-файла с 1.8 сек. до 0.3 сек.
- Добавлена поддержка массивов фиксированного размера, которые напоминают списки, содержащие фиксированное число элементов («CREATE TABLE vectors(v DOUBLE[3]);»).
- Добавлена поддержка подключения к СУБД MySQL, PostgreSQL и SQLite, что позволяет загружать в DuckDB данные из внешних СУБД и перемещать их между разными системами. Обращение к внешним БД осуществляется с использованием типовых таблиц. ATTACH ‘postgres:dbname=postgresscanner’ AS postgres; SELECT title, release_year, length FROM postgres.film LIMIT 5;
- Добавлена поддержка выражения «COMMENT ON» для сохранения комментария об объекте в БД.
- Добавлена поддержка выражения «COPY FROM DATABASE» для копирования всего содержимого из одной БД в другую.
- Добавлена поддержка модификатора «ALL» в выражениях EXCEPT и INTERSECT.
- Реализован тип »
Աղբյուր: opennet.ru
