Објавен DuckDB 0.6.0, SQLite опција за аналитички прашања

Изданието на DuckDB 0.6.0 DBMS е достапно, комбинирајќи ги таквите својства на SQLite како компактност, можност за поврзување во форма на вградена библиотека, складирање на базата на податоци во една датотека и удобен CLI интерфејс, со алатки и оптимизации за извршување аналитички прашања кои покриваат значителен дел од зачуваните податоци, на пример кои ја собираат целата содржина на табелите или спојуваат неколку големи табели. Проектниот код е дистрибуиран под лиценцата MIT. Развојот сè уште е во фаза на формирање на експериментални изданија, бидејќи форматот за складирање сè уште не е стабилизиран и се менува од верзија до верзија.

DuckDB обезбедува напреден SQL дијалект кој вклучува дополнителни способности за справување со многу сложени и одземаат многу време прашања. Поддржана е употребата на сложени типови (низи, структури, синдикати) и способноста за извршување на произволни и вгнездени корелирани подпрашања. Поддржува извршување на повеќе прашања истовремено, извршувајќи прашања директно од датотеките CSV и Parquet. Можно е да се увезе од PostgreSQL DBMS.

Покрај кодот на школка од SQLite, проектот користи парсер од PostgreSQL во посебна библиотека, компонентата Date Math од MonetDB, сопствена имплементација на функциите на прозорецот (врз основа на алгоритам за Агрегација на дрвото на сегменти), процесор со регуларен израз базиран на библиотеката RE2, сопствениот оптимизатор за пребарување и механизмот за контрола на MVCC истовремено извршување на задачите (Контрола на истовремена верзија на повеќе верзии), како и векторизиран мотор за извршување на барања базиран на алгоритам за извршување на барањето за хипер-цевководи, кој овозможува големи групи на вредности да се обработи одеднаш во една операција.

Меѓу промените во новото издание:

  • Работата продолжи да се подобри форматот на складирање. Имплементиран е оптимистички режим за пишување на диск, во кој при вчитување на голем сет на податоци во една трансакција, податоците се компресираат и се запишуваат во датотека од базата во режим на стриминг, без да се чека трансакцијата да се потврди со командата COMMIT. . Кога ќе се прими команда COMMIT, податоците се веќе запишани на дискот, а кога ќе се изврши ROLLBACK, тие се отфрлаат. Претходно, податоците првично беа целосно зачувани во меморијата, а кога беа обврзани, беа зачувани на дискот.
  • Додадена е поддршка за паралелно вчитување податоци во посебни табели, што ви овозможува значително да ја зголемите брзината на вчитување на системи со повеќе јадра. На пример, во претходното издание, вчитувањето на базата на податоци со 150 милиони редови на 10-јадрен процесор траеше 91 секунда, но во новата верзија оваа операција се завршува за 17 секунди. Постојат два паралелни начини на вчитување - со зачувување на редот на записите и без зачувување на редот.
  • За компресија на податоци, се користи алгоритмот FSST (Брза статична табела со симболи), кој ви овозможува да пакувате податоци во низи користејќи заеднички речник на типични совпаѓања. Употребата на новиот алгоритам овозможи да се намали големината на тест базата од 761MB на 251MB.
  • Предложени се алгоритми на шимпанза и Патас за да се компресираат броевите со подвижна запирка (DOUBLE и FLOAT). Во споредба со претходниот алгоритам Gorillas, Chimp обезбедува повисоки нивоа на компресија и побрза декомпресија. Алгоритмот Patas заостанува зад Chimp во однос на компресија, но е многу побрз во брзината на декомпресија, што речиси не се разликува од читањето некомпресирани податоци.
  • Додадена е експериментална способност за вчитување податоци од CSV-датотеки во повеќе паралелни преноси (SET experimental_parallel_csv=true), што значително го намалува времето потребно за вчитување големи CSV-датотеки. На пример, кога оваа опција беше овозможена, времето за преземање за датотека CSV од 720 MB беше намалено од 3.5 на 0.6 секунди.
  • Имплементирана е можноста за паралелно извршување на операциите за креирање и управување со индекси. На пример, операцијата CREATE INDEX на колона со 16 милиони записи беше намалена од 5.92 на 1.38 секунди.
  • Овозможена паралелизација на операциите за собирање во барања што го содржат изразот „COUNT(DISTINCT col)“.
  • SQL додаде поддршка за типот UNION, што овозможува повеќе типови да се врзуваат за еден елемент (на пример, „UNION(num INT, грешка VARCHAR))“).
  • SQL обезбедува можност за формирање на прашања кои започнуваат со зборот „FROM“ наместо „SELECT“. Во овој случај, се претпоставува дека барањето започнува со „SELECT *“.
  • SQL додаде поддршка за изразот COLUMNS, кој ви овозможува да извршите операција на повеќе колони без да го дуплирате изразот. На пример, „SELECT MIN(COLUMNS(*)) од obs;“ ќе предизвика функцијата MIN да се изврши за секоја колона во табелата obs, и „SELECT COLUMNS('val[0-9]+') од obs; за колони со име што се состои од „val“ и броеви.
  • Додадена е поддршка за операции на списоци, на пример, „SELECT [x + 1 for x во [1, 2, 3]] AS l;“.
  • Потрошувачката на меморија е оптимизирана. Стандардно, платформата Linux ја користи библиотеката jemalloc за управување со меморијата. Значително подобрени перформанси на операциите за спојување хаш кога меморијата е ограничена.
  • Додаден е излезниот режим „.mode duckbox“ во интерфејсот на командната линија, кој ги отфрла средните колони земајќи ја предвид ширината на терминалниот прозорец (погоден за брзо визуелно оценување на резултатите од барањата со голем број колони, како што е „SELECT * FROM tbl“, кои во нормален режим се распоредени на неколку линии). Користејќи го параметарот „.maxrows X“, можете дополнително да го ограничите бројот на прикажани редови.
  • CLI обезбедува автоматско пополнување на внесувањето земајќи го предвид контекстот (внесувањето на клучни зборови, имиња на табели, функции, имиња на колони и имиња на датотеки е завршено).
  • CLI има стандардно овозможен индикатор за напредок на барањето.

Извор: opennet.ru

Додадете коментар