DuckDB v2.0: клиент-серверный режим, триггеры и парсер собственной разработки

· Программы
Разработчики DuckDB показали ключевые нововведения версии 2.0 под кодовым именем «Cyanoptera», которая выйдет осенью. Главная тема релиза — превращение встраиваемой СУБД в полноценный сервер.

cover.svg

Команда DuckDB опубликовала предварительный обзор версии 2.0 — крупного обновления, собранного из более чем 10 000 коммитов с момента выхода v1.5 в марте. Релиз получил кодовое имя «Cyanoptera» в честь коричной свистящей утки. Смену старшего номера версии авторы объясняют не церемонией, а сочетанием новых возможностей и небольшого числа продуманных несовместимых изменений.

DuckDB как сервер

Если прошлый год в проекте называли «годом lakehouse», то нынешний релиз открывает «год DuckDB как сервера». С первого дня DuckDB была встраиваемой (in-process) базой, но пользователи настойчиво просили клиент-серверный режим. Ответом стало расширение quack, реализующее сетевой протокол: любой процесс DuckDB может отдавать свои базы по сети, а другой — подключаться к нему оператором CONNECT и выполнять запросы удалённо. CONNECT работает не только с Quack: новый оптимизатор проброса запросов отправляет SQL напрямую в PostgreSQL и MySQL, а не тянет таблицы по сети. Авторы напоминают, что DuckDB изначально была транзакционной СУБД с полноценным MVCC — просто в однопользовательском сценарии это редко требовалось. Любопытная деталь: энтузиасты за считанные недели после превью написали собственные клиенты для протокола Quack.

Что ещё внутри

Тип VARIANT (по сути «JSON на стероидах») становится полноценным гражданином: данные автоматически «шреддятся», хорошо сжимаются и быстро обрабатываются без объявления схемы. Появились долгожданные триггеры — BEFORE и AFTER, построчные и на уровне оператора, с переходными таблицами. Расширился и диалект SQL: соединения APPROX NEAREST для поиска по эмбеддингам, DML внутри CTE, вложенные схемы, упрощённый синтаксис переменных ($x) и функции модификации JSON.

Существенно выросла производительность. По одному микробенчмарку с рекурсивным CTE на графе из миллиона рёбер v2.0 оказалась примерно в 40 раз быстрее v1.5.4 (0,12 с против 4,90 с). Ключевую роль сыграли асинхронный ввод-вывод, позволяющий масштабировать работу с объектными хранилищами вроде S3, переписанный движок рекурсивных CTE и расширенное отсечение row-group по зонным картам и Bloom-фильтрам.

Среди инфраструктурных перемен — новый формат хранения v2.0.0 с индексами ART под управлением буфера (большие индексированные таблицы теперь открываются мгновенно) и собственный расширяемый парсер на основе PEG вместо унаследованного от PostgreSQL. Расширения смогут встраивать в грамматику новый синтаксис, а появившийся режим совместимости диалектов уже умеет притворяться Spark. Библиотеку ICU выбросили целиком: работа с часовыми поясами, календарями и сортировками переписана самостоятельно, база IANA сжата примерно до 45 кБ, а операции стали быстрее в 2–2,6 раза.

Отдельная ставка сделана на экосистему расширений: стабильный C API позволит писать и собирать расширение один раз, а также регистрировать собственные подписанные репозитории. Осенью при DuckDB Foundation появится консультативный совет заинтересованных сторон. Предварительные сборки со всеми перечисленными возможностями доступны уже сейчас.


Источник: Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.