Издаване на СУБД SQLite 3.42 и DuckDB 0.8.0. CG/SQL с внедряване на запомнени процедури за SQLite

Изданието на SQLite 3.42, лека СУБД, проектирана като библиотека с добавки, беше публикувана. Кодът на SQLite се разпространява в публичното пространство, т.е. може да се използва без ограничения и безплатно за всякакви цели. Финансовата подкрепа за разработчиците на SQLite се осигурява от специално създаден консорциум, който включва компании като Adobe, Oracle, Mozilla, Bentley и Bloomberg.

Основни промени:

  • За FTS5 пълнотекстови индекси е внедрена командата за безопасно изтриване, която напълно изчиства всички остатъчни данни след изтриването.
  • Функциите за обработка на данни във формат JSON вече поддържат разширения JSON5.
  • Подобрен инструмент за планиране на заявки. Оптимизирането на броя гледания е активирано по подразбиране. Елиминирано обработване на неизползвани колони в подзаявки. Подобрено внедряване на оптимизация с натискане надолу.
  • Добавена е опция „--unsafe-testing“ към CLI, за да се позволи използването на някои опасни команди като „.testctrl“ при тестване. В безопасен режим ("--safe"), командите ".log on" и ".log off" са разрешени. Добавена е поддръжка за разделителя "—" за аргументи, след които обработката на опцията е деактивирана. Добавени параметри ":inf" и ":nan", свързани с безкрайност и NaN стойности.
  • Имената на дефинирани от приложението SQL функции могат да се пресичат с ключовите думи CROSS, FULL, INNER, LEFT, NATURAL, OUTER и RIGHT.
  • Разширени възможности за проверка на интегритета на PRAGMA. Добавена е проверка за указване на стойността NaN в колони с условието NOT NULL. Подобрено информационно съдържание на съобщенията за грешки.
  • Добавянето на сесия позволява прихващане на промени от таблици без ROWID.
  • Модификаторът "subsec" е добавен към функциите за работа с време и дати за използване на части от секунди.
  • Намалена дълбочина на рекурсия по подразбиране за масиви и JSON обекти от 2000 на 1000.

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

В допълнение към шел кода от SQLite, проектът използва анализатор от PostgreSQL, преместен в отделна библиотека, компонента Date Math от MonetDB, собствена реализация на прозоречни функции (на базата на алгоритъма за агрегиране на дървото на сегментите), процесор за регулярен израз базиран на библиотеката RE2, собствен оптимизатор на заявки, MVCC контролен механизъм едновременно изпълнение на задачи (Multi-Version Concurrency Control), както и векторизирана машина за изпълнение на заявки, базирана на алгоритъма Hyper-Pipeling Query Execution, който позволява обработка на големи набори от стойности наведнъж в една операция. Кодът на проекта се разпространява под лиценза на MIT.

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

  • Добавени са нови изрази „PIVOT“ и „UNPIVOT“ за трансформиране на редове в колони и обратно.
  • Подобрено паралелизиране при импортиране и експортиране на данни. По подразбиране четенето от файлове във формат CSV в множество потоци и многопоточното писане се изпълняват при използване на формати Parquet, CSV и JSON.
  • Добавен е оператор "**" за рекурсивно обхождане на директории при дефиниране на файлови пътища (напр. ОТ "'data/glob/crawl/stackoverflow/**/*.csv';").
  • Добавена е поддръжка за операции по сливане (JOIN) за данни под формата на времеви серии (отрезки от стойности на параметри на определени интервали от време), в които критерият за сливане на записи не е точно, а приблизително съвпадение на стойности в поле с време (например можете да комбинирате записи, времена които се различават с не повече от 1 минута).
  • Въведено е отложено зареждане на метаданни от базата данни, което направи възможно десетократно ускоряване на стартирането на СУБД.
  • Добавена е поддръжка за свързване на персонализирани функции в Python.
  • Добавена е поддръжка за ADBC ​​​​(Arrow Database Connectivity) API за прехвърляне на данни с помощта на Apache Arrow.
  • Внедрено обвързване за интеграция със Swift код.
  • Променено е поведението на оператора за деление ("/"), който сега извършва изчисления с плаваща запетая по подразбиране вместо операции с цели числа. Предложен е нов оператор "//" за целочислено деление. Старото поведение може да се върне чрез настройка на "SET integer_division=true;".
  • Методът за отчитане на нулеви записи при сортиране е променен от „NULLS FIRST“ на „NULLS LAST“, т.е. NULL стойностите вече ще се показват в края вместо в началото на списъка. Старото поведение може да бъде възстановено с настройката "SET default_null_order='nulls_first';".

Освен това може да се отбележи CG/SQL проектът, разработен от Facebook, който предоставя генератор на код за използване на съхранени процедури със SQLite. CG/SQL ви позволява да пишете съхранени процедури на специален диалект на T-SQL (Transact-SQL), който ви позволява да извиквате функциите на стандартната C библиотека и да осъществявате достъп до данни в SQLite. Генерираните съхранени процедури се компилират в C код, който използва SQLite C API за извършване на определени действия и обработка на сложни заявки. Компилираните запомнени процедури могат да бъдат свързани с C, Java и Objective-C програми. Кодът на проекта е написан на C и се разпространява под лиценза на MIT.

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

Добавяне на нов коментар