Представен е новият релиз на СУБД 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
