DuckDB v2.0: клиент-серверный режим, триггеры и парсер собственной разработки
Команда 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
Комментарии
Войдите, чтобы комментировать.