DuckDB 0.6.0 פֿאַרעפֿנטלעכט, סקליטע אָפּציע פֿאַר אַנאַליטיש פֿראגן

Доступен выпуск СУБД DuckDB 0.6.0, сочетающей такие свойства SQLite, как компактность, возможность подключения в форме встраиваемой библиотеки, хранение БД в одном файле и удобный CLI-интерфейс, со средствами и оптимизациями для выполнения аналитических запросов, охватывающих значительную часть хранимых данных, например, выполняющих агрегирование всего содержимого таблиц или слияние нескольких больших таблиц. Код проекта распространяется под лицензией MIT. Разработка пока находится на стадии формирования экспериментальных выпусков, так как формат хранилища пока не стабилизирован и меняется от версии к версии.

DuckDB גיט אַ אַוואַנסירטע SQL דיאלעקט וואָס כולל נאָך קייפּאַבילאַטיז פֿאַר האַנדלינג זייער קאָמפּליצירט און צייט-קאַנסומינג פֿראגן. די נוצן פון קאָמפּלעקס טייפּס (ערייז, סטראַקטשערז, יוניאַנז) און די פיייקייט צו ויספירן אַרביטראַריש און נעסטעד קאָראַלייטינג סאַבקוועריז זענען געשטיצט. עס שטיצט פליסנדיק קייפל קוויריז סיימאַלטייניאַסלי, פליסנדיק קוויריז גלייַך פֿון קסוו און פּאַרקוועט טעקעס. עס איז מעגלעך צו אַרייַנפיר פֿון די PostgreSQL DBMS.

אין אַדישאַן צו די שאָל קאָד פון SQLite, די פּרויעקט ניצט אַ פּאַרסער פון PostgreSQL אין אַ באַזונדער ביבליאָטעק, די Date Math קאָמפּאָנענט פון MonetDB, זיין אייגענע ימפּלאַמענטיישאַן פון פֿענצטער פאַנגקשאַנז (באזירט אויף די Segment Tree Aggregation אַלגערידאַם), אַ רעגולער אויסדרוק פּראַסעסער באזירט אויף די RE2 ביבליאָטעק, זיין אייגענע אָנפֿרעג אָפּטימיזער, און אַ MVCC קאָנטראָל מעקאַניזאַם סיימאַלטייניאַס דורכפירונג פון טאַסקס (מולטי-ווערסיאָן קאָנקוררענסע קאָנטראָל), ווי געזונט ווי אַ וועקטאָריזעד אָנפֿרעג דורכפירונג מאָטאָר באזירט אויף די אַלגערידאַם פון Hyper-Pipelining Query Execution, וואָס אַלאַוז גרויס וואַלועס. צו זיין פּראַסעסט אין אַמאָל אין איין אָפּעראַציע.

צווישן די ענדערונגען אין די נייַע מעלדונג:

  • Продолжена работа по усовершенствованию формата хранения. Реализован оптимистичный режим записи на диск, при котором при загрузке крупного набора данных в одной транзакции, данные сжимаются и в потоковом режиме записываются в файл с БД, не дожидаясь завершения подтверждения транзакции командой COMMIT. Во время поступления команды COMMIT данные оказываются уже записанными на диск, а при выполнении ROLLBACK — отбрасываются. Ранее данные вначале полностью сохранялись в память, а при коммите сохранялись на диск.
  • Добавлена поддержка параллельной загрузки данных в отдельные таблицы, позволяющая заметно повысить скорость загрузки на многоядерных системах. Например, в прошлом выпуске загрузка БД с 150 млн строк на 10-ядерном CPU занимала 91 секунду, а в новой версии данная операция выполняется за 17 секунд. Предусмотрено два режима параллельной загрузки — с сохранением порядка следования записей и без сохранения порядка.
  • Для сжатия данных задействован алгоритм FSST (Fast Static Symbol Table), позволяющий упаковать данные внутри строк, используя общий словарь типовых совпадений. Применение нового алгоритма позволило сократить размер тестовой БД с 761MB до 251MB.
  • Для сжатия чисел с плавающей запятой (DOUBLE и FLOAT) предложены алгоритмы Chimp и Patas. По сравнению с ранее применяемым алгоритмом Gorillas, Chimp обеспечивает более высокий уровень сжатия и более быструю распаковку. Алгоритм Patas отстаёт по степени сжатия от Chimp, но значительно быстрее по скорости распаковки, которая почти на отличается от чтения несжатых данных.
  • Добавлена экспериментальная возможность загрузки данных из файлов CSV в несколько параллельных потоков (SET experimental_parallel_csv=true), которая существенно сокращает время загрузки крупных CSV-файлов. Например, при включении опции время загрузки CSV-файла размером 720 МБ сократилось с 3.5 до 0.6 секунд.
  • Реализована возможность параллельного выполнения операций создания и управления индексами. Например, выполнение операции CREATE INDEX для столбца с 16 млн записей сократилось с 5.92 до 1.38 секунд.
  • Обеспечено распараллеливание операций агрегирования в запросах, содержащих выражение «COUNT(DISTINCT col)».
  • В SQL добавлена поддержка типа UNION, допускающего привязку к одному элементу нескольких типов (например, «UNION(num INT, error VARCHAR))»).
  • В SQL предоставлена возможность формирования запросов, начинающихся на слово «FROM» вместо «SELECT». В этом случае подразумевается, что запрос начинается на «SELECT *».
  • В SQL добавлена поддержка выражения «COLUMNS», позволяющего выполнить операцию над несколькими столбцами без дублирования выражения. Например, «SELECT MIN(COLUMNS(*)) from obs;» приведёт к выполнению функции MIN для каждого столбца в таблице obs, а «SELECT COLUMNS(‘val[0-9]+’) from obs;» для столбцов с именем, состоящим из «val» и цифр.
  • Добавлена поддержка операций над списками, например, «SELECT [x + 1 for x in [1, 2, 3]] AS l;».
  • Проведена оптимизация потребления памяти. По умолчанию на платформе Linux для управления памятью задействована библиотека jemalloc. Значительно улучшена производительность операций объединения хэшей при ограниченном размере памяти.
  • В интерфейсе командной строки добавлен режим вывода «.mode duckbox», отбрасывающий средние столбцы c учётом ширины окна терминала (подходит для быстрой наглядной оценки результатов запросов с большим числом столбцов, таких как «SELECT * FROM tbl», которые в обычном режиме разъезжаются на несколько строк). При помощи параметра «.maxrows X» дополнительно можно ограничить и число выводимых строк.
  • В CLI обеспечено автодополнение ввода с учётом контекста (дополняется ввод ключевых слов, имён таблиц, функций, имён столбцов и имён файлов).
  • В CLI включено по умолчанию отображение индикатора прогресса выполнения запроса.

מקור: opennet.ru

לייגן אַ באַמערקונג