Команда DuckDB анонсировала новый протокол Quack, который позволяет экземплярам базы данных общаться друг с другом в архитектуре клиент-сервер. До этого DuckDB использовала встраиваемую модель без серверных компонентов, что отлично работало для аналитики в одном процессе, но создавало проблемы при одновременной записи из нескольких процессов. Разработчики поняли, что императивность — важный тренд, и приняли решение добавить полноценный протокол. Quack строится поверх HTTP, что упрощает интеграцию с прокси, брандмауэрами и балансировщиками нагрузки. Протокол поддерживает передачу миллионов строк за считанные секунды и оптимизирован для работы в распределённых системах.
Quack использует новый MIME-тип application/duckdb, который задействует отлаженные механизмы сериализации для сложных структур данных. Безопасность настроена по умолчанию: сервер генерирует случайный токен при запуске и привязывается только к localhost. Для подключения к публичной сети рекомендуется использовать прокси вроде nginx с SSL-шифрованием. Клиент автоматически включает SSL для удалённых соединений. Авторизация гибкая: по умолчанию работает простая проверка токена, но разработчик может написать собственный callback, например, опирающийся на LDAP или текстовые файлы.
В тестах на виртуальных машинах AWS с сетевым трафиком до 15 Гбит/с Quack показал выдающиеся результаты. Для передачи массива из 60 миллионов строк время выполнения составило около 5 секунд. Даже специализированный протокол Arrow Flight SQL уступил ему в разы, а PostgreSQL оказался совсем медленным из-за ограничения на многопоточность чтения. В тестах на малые транзакции Quack также опережал PostgreSQL, достигая около 5500 операций в секунду на восьми потоках, хотя здесь упирается в внутренние ограничения самого DuckDB, которые планируют устранить.
Разработчики планируют интегрировать Quack в DuckLake, превратив его в удалённый каталог данных, и добавить поддержку репликации. Косвенной причиной отказа от стандартного Arrow Flight SQL стала необходимость минимизировать количество сетевых круговоротов: в Quack выполнение запроса и получение результата происходит в одном шаге, тогда как в Arrow требуется минимум два. Также команда отказалась от форматов, контролируемых внешними силами, чтобы сохранить свободу разработки. Первый стабильный релиз с Quack ожидается вместе с DuckDB v2.0 этой осенью, когда планируется также реализовать автоустановку расширения. Следующие этапы включают возможность расширять протокол новыми сообщениями и создание кластеров реплик.