DuckDB 0.6.0 жарияланған, аналитикалық сұрауларға арналған SQLite опциясы

SQLite ықшамдығы, ендірілген кітапхана түрінде қосылу мүмкіндігі, дерекқорды бір файлда сақтау және ыңғайлы CLI интерфейсі, орындауға арналған құралдар мен оңтайландырулар сияқты SQLite қасиеттерін біріктіретін DuckDB 0.6.0 ДҚБЖ шығарылымы қол жетімді. сақталған деректердің маңызды бөлігін қамтитын аналитикалық сұраулар, мысалы, кестелердің бүкіл мазмұнын біріктіретін немесе бірнеше үлкен кестелерді біріктіретін. Жоба коды MIT лицензиясы бойынша таратылады. Әзірлеу әлі тәжірибелік шығарылымдарды қалыптастыру сатысында, өйткені сақтау пішімі әлі тұрақтандырылған жоқ және нұсқадан нұсқаға өзгереді.

DuckDB өте күрделі және уақытты қажет ететін сұрауларды өңдеуге арналған қосымша мүмкіндіктерді қамтитын кеңейтілген SQL диалектісін ұсынады. Күрделі типтерді (массивтер, құрылымдар, бірлестіктер) пайдалану және ерікті және кірістірілген корреляциялық ішкі сұрауларды орындау мүмкіндігіне қолдау көрсетіледі. Ол CSV және Parquet файлдарынан тікелей сұрауларды орындай отырып, бірнеше сұрауларды бір уақытта орындауды қолдайды. PostgreSQL ДҚБЖ-дан импорттауға болады.

SQLite қабықша кодынан басқа, жоба бөлек кітапханада PostgreSQL талдаушысын, MonetDB ұсынған Date Math компонентін, терезе функцияларының өзіндік іске асырылуын (сегменттердің ағашын біріктіру алгоритміне негізделген), тұрақты өрнек процессорын пайдаланады. RE2 кітапханасы, жеке сұрауларды оңтайландырғышы және тапсырмаларды бір уақытта орындауды (Multi-Version Concurrency Control) MVCC басқару механизмі, сондай-ақ мәндердің үлкен жиынына мүмкіндік беретін Hyper-Pipelining Query Execution алгоритміне негізделген векторланған сұранысты орындау механизмі. бір операцияда бірден өңделеді.

Жаңа шығарылымдағы өзгерістердің арасында:

  • Сақтау пішімін жақсарту бойынша жұмыс жалғасты. Бір транзакцияға деректердің үлкен жинағын жүктегенде, транзакцияның COMMIT пәрменімен расталуын күтпей-ақ, ағынды режимде деректер базасынан файлға жазылатын оптимистік дискі жазу режимі енгізілді. . COMMIT пәрмені қабылданғанда, деректер дискіге әлдеқашан жазылған, ал ROLLBACK орындалғанда, ол жойылады. Бұрын деректер бастапқыда толығымен жадқа сақталды, ал орындалған кезде ол дискіге сақталды.
  • Деректерді бөлек кестелерге параллель жүктеуге қолдау қосылды, бұл көп ядролы жүйелерде жүктеу жылдамдығын айтарлықтай арттыруға мүмкіндік береді. Мысалы, алдыңғы шығарылымда 150 ядролы процессорға 10 миллион жолдан тұратын дерекқорды жүктеу 91 секундқа созылды, бірақ жаңа нұсқада бұл операция 17 секундта аяқталады. Екі параллель жүктеу режимі бар - жазбалар тәртібін сақтай отырып және тәртіпті сақтамай.
  • Деректерді қысу үшін типтік сәйкестіктердің жалпы сөздігін пайдалана отырып, деректерді жолдар ішінде жинақтауға мүмкіндік беретін FSST (Fast Static Symbol Table) алгоритмі қолданылады. Жаңа алгоритмді қолдану сынақ деректер қорының көлемін 761 МБ-тан 251 МБ-қа дейін азайтуға мүмкіндік берді.
  • Шимпа және Патас алгоритмдері өзгермелі нүкте сандарын (DOUBLE және FLOAT) қысу үшін ұсынылды. Бұрын қолданылған Gorillas алгоритмімен салыстырғанда, Chimp қысудың жоғары деңгейін және жылдамырақ декомпрессияны қамтамасыз етеді. Patas алгоритмі қысу қатынасы бойынша Шимптен артта қалады, бірақ декомпрессия жылдамдығы бойынша әлдеқайда жылдам, бұл қысылмаған деректерді оқудан еш айырмашылығы жоқ.
  • CSV файлдарынан деректерді бірнеше параллель ағындарға жүктеудің эксперименттік мүмкіндігі қосылды (SET экспериментальді_parallel_csv=true), бұл үлкен CSV файлдарын жүктеуге кететін уақытты айтарлықтай азайтады. Мысалы, бұл опция қосылғанда, 720 МБ CSV файлын жүктеп алу уақыты 3.5 секундтан 0.6 секундқа дейін қысқарды.
  • Индекс құру және басқару операцияларын қатар орындау мүмкіндігі іске асырылды. Мысалы, 16 миллион жазбасы бар бағандағы INDEX ЖАСАУ әрекеті 5.92 секундтан 1.38 секундқа дейін қысқарды.
  • «COUNT(DISTINCT col)» өрнегі бар сұраулардағы біріктіру әрекеттерінің параллельизациясы қосылды.
  • SQL бірнеше түрді бір элементке байланыстыруға мүмкіндік беретін UNION түріне қолдауды қосты (мысалы, “UNION(num INT, қате VARCHAR))”).
  • SQL «SELECT» орнына «FROM» сөзінен басталатын сұрауларды қалыптастыру мүмкіндігін береді. Бұл жағдайда сұрау «SELECT *» арқылы басталады деп болжанады.
  • SQL өрнекті қайталамай бірнеше бағандарда әрекетті орындауға мүмкіндік беретін COLUMNS өрнегін қолдауды қосты. Мысалы, “ОБС ішінен MIN(COLUMNS(*)) ТАҢДАУ;” obs кестесіндегі әрбір баған үшін MIN функциясының орындалуына және "obs ішінен БАҒАНДАРДЫ('вал[0-9]+') ТАҢДАУ;" «val» және сандардан тұратын атауы бар бағандар үшін.
  • Тізімдердегі операцияларға қолдау қосылды, мысалы, “SELECT [x + 1 for x in [1, 2, 3]] AS l;”.
  • Жадты тұтыну оңтайландырылды. Әдепкі бойынша, Linux платформасы жадты басқару үшін jemalloc кітапханасын пайдаланады. Жад шектелген кезде хэшті біріктіру операцияларының өнімділігі айтарлықтай жақсарды.
  • Пәрмен жолы интерфейсіне терминал терезесінің енін ескере отырып ортаңғы бағандарды алып тастайтын «.mode duckbox» шығыс режимі қосылды («SELECT * FROM tbl», қалыпты режимде бірнеше жолға таралады). “.maxrows X” параметрін пайдалану арқылы көрсетілетін жолдар санын қосымша шектеуге болады.
  • CLI контекстті ескере отырып енгізуді автотолтыруды қамтамасыз етеді (кілт сөздерді, кесте атауларын, функцияларды, баған атауларын және файл атауларын енгізу аяқталды).
  • CLI әдепкі бойынша қосылған сұраудың орындалу көрсеткіші бар.

Ақпарат көзі: opennet.ru

пікір қалдыру