Релиз на базата данни DuckDB 1.2.0

Публикуван е новият релиз на СУБД DuckDB 1.2.0, насочена към изпълнението на аналитични заявки и концептуално напомняща на SQLite. DuckDB съчетава свойства на SQLite, като компактност, интеграция под формата на вградена библиотека, съхранение на базата данни в един файл и CLI интерфейс, с функциите и оптимизациите за изпълнение на аналитични заявки, обхващащи значителна част от съхраняваните данни, като например извършване на агрегация на съдържанието на таблици или свързване на множество големи таблици. Кодът на проекта е написан на C++ и се разпространява под лиценз MIT.

DuckDB предоставя разширен диалект на SQL, включващ допълнителни възможности за обработка на много сложни и дълготрайни заявки. Възможно е използването на сложни типове (масиви, структури, съединения), а също така и изпълнение на произволни и вложени корелиращи подзаявки. Поддържа се паралелно изпълнение на няколко заявки, извършване на заявки директно от файлове във формати CSV и Parquet. Предоставя се поддръжка за импорт от СУБД PostgreSQL.

Проектът използва обвивка от SQLite, парсер от PostgreSQL, компонент за математически операции с дати от MonetDB, собствена реализация на прозоречни функции (на база алгоритъм Segment Tree Aggregation), обработчик на регулярни изрази, базиран на библиотеката RE2, собствен оптимизатор на заявки, механизъм MVCC за управление на паралелното изпълнение на задачи (Multi-Version Concurrency Control), както и векторизиран двигател за изпълнение на заявки на база алгоритъм Hyper-Pipelining Query Execution, позволяващ в една операция да се обработват големи набори от стойности.

В новата версия:

  • Реализирана е поддръжка на нови методи за компресия, които не са включени по подразбиране за запазване на съвместимостта на файловете с бази данни с предишните версии на DuckDB. За използване на подобрения формат на файловете с бази данни, е предложена възможност за свързване на базата данни с номер на версия — при отваряне на файла с параметъра „STORAGE_VERSION“ вече може да се зададе минимално поддържана версия на базата данни (например: „ATTACH ‘file.db’ (STORAGE_VERSION ‘v1.2.0’);“). За преобразуване на новия формат в стария може да се използва SQL командата COPY, например: ATTACH ‘file1.db’; ATTACH ‘converted_file.db’ (STORAGE_VERSION ‘v1.0.0’); COPY FROM DATABASE file1 TO converted_file;
  • Добавена е поддръжка за SQL командата „ALTER TABLE … ADD PRIMARY KEY“ за добавяне на основен ключ към съществуваща таблица.
  • Премахнато е ограничението, което не позволява повторно добавяне на идентификатори, по отношение на които има индекс за уникалност, ако идентификаторите са били изтрити в текущата транзакция. Например, следният SQL код вече не предизвиква грешка: CREATE TABLE students (id INTEGER PRIMARY KEY, name VARCHAR); INSERT INTO students VALUES (1, ‘John Doe’); BEGIN; DELETE FROM students WHERE id = 1; INSERT INTO students VALUES (1, ‘Jane Doe’);
  • Добавена е поддръжка за качване на CSV файлове в кодировки Latin-1 и UTF-16 (по-рано се поддържаше само кодировката UTF-8). FROM read_csv(‘cities-latin-1.csv’, encoding = ‘latin-1‘);
  • Добавена е поддръжка за използване на многобайтови разделители в CSV файлове (до 4 байта), което позволява посочване на emoji като разделител на колоните. a🦆b hello🦆world FROM read_csv(‘example.dsv’, sep = ‘🦆’);
  • По подразбиране е активиран строгият режим за парсинг на CSV файлове ("strict_mode = true"), който проверява съответствието с формата на спецификацията RFC 4180. В строгия режим е позволено използването само на един символ за разделяне на редовете, което ще доведе до грешка при опит за парсинг на файлове, в които за разделяне на редовете се използват не само символи за нов ред, а и символи за връщане на каретката ("\r\n").
  • В парсера за CSV е внедрен нов алгоритъм за определяне на нов ред, който поддържа паралелизиране на операциите. Използването на новия алгоритъм ускори парсинга на CSV с около 15%.
  • Премахнато е ограничението за размер на реда в CSV файловете (по-рано редът не трябваше да надвишава 8 МБ).
  • При експортиране на данни във формат Parquet е реализирана поддръжка на хешове (думи) и индекси, базирани на метода Bloom. Реализиран е метод за компресия DELTA_BINARY_PACKED, който позволява значително да се намали размерът на Parquet файловете.
  • В интерфейса на командния ред е добавен безопасен режим, активиран с опцията "-safe" или командата ".safe_mode". В този режим се разрешава достъп само до първоначално указан файл на база данни, а опитите за отваряне на други файлове ще доведат до грешка.
  • В интерфейса на командния ред е подобрено автоматичното допълване на входа. Кодът за автоматично допълване е преведен да използва PEG (Parsing Expression Grammar).
  • При изпълнение на команди в интерфейса на командния ред е реализирано визуално представяне на големи числа, например, при показване на числото 100000000, ще бъде добавено допълнително "(100 милиона)".
  • В SQL е добавена поддръжка на синтаксис, при който кратките имена на таблиците и изразите могат да бъдат указани преди стойностите, на които сочат (вместо да се използва синтаксисът "израз AS име"): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
  • В командата "SELECT" е реализирана поддръжка за операцията "RENAME" за преименуване на полета, показвани при указване на израза "*": SELECT * RENAME (col1 AS new_col1) FROM integers;
  • В командата "SELECT" е разрешено използването на операциите "LIKE" и "SIMILAR TO" при извеждане чрез "*": SELECT * LIKE ‘val%’ FROM key_val;
  • Повишено е качеството на генериране на псевдослучайни числа.
  • Оптимизаторът на заявките е модернизиран. Производителността при теста TPC-H SF100 е увеличена с 13%.
  • Предложен нов Си-подобен API за разработка на добавки, който може да се използва, например, за създаване на нови агрегатни или таблични функции.
  • Добавена е поддръжка на системи със стандартната Си-библиотека Musl.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster