The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Опубликован DuckDB 0.6.0, вариант SQLite для аналитических запросов

15.11.2022 13:30

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

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

Помимо кода оболочки из SQLite проектом используется вынесенный в отдельную библиотеку парсер из PostgreSQL, компонент Date Math из MonetDB, своя реализация оконных функций (на базе алгоритма Segment Tree Aggregation), обработчик регулярных выражений на основе библиотеки RE2, собственные оптимизатор запросов, MVCC-механизм управления одновременным выполнением заданий (Multi-Version Concurrency Control), а также векторизированный движок выполнения запросов на базе алгоритма 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 включено по умолчанию отображение индикатора прогресса выполнения запроса.


  1. Главная ссылка к новости (https://duckdb.org/2022/11/14/...)
  2. OpenNews: В SQLite добавлена поддержка WASM для использования СУБД в web-браузере
  3. OpenNews: Проект libSQL начал развитие форка СУБД SQLite
  4. OpenNews: Выпуск СУБД SQLite 3.39
  5. OpenNews: Опубликован проект Litestream, реализующий систему репликации для SQLite
  6. OpenNews: Выпуск rqlite 7.0, распределённой отказоустойчивой СУБД на основе SQLite
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/58117-duckdb
Ключевые слова: duckdb, sqlite
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (28) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 13:44, 15/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Как раз что-то подобное искал. Кто пробовал?
     
     
  • 2.3, Аноним (3), 14:22, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    duck duck go!
     

  • 1.2, Hck3r (?), 13:56, 15/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Люди продолжали писать на Си, несмотря на рекомендации АНБ
     
     
  • 2.5, Аноним (5), 14:29, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +5 +/
    пф-ф. сам бог запретил трогать яблоки и его не послушали, а тут какие-то рекомендации от какого-то анб.
     
     
  • 3.11, Аноним (11), 16:28, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Есть теория, что рассказ про яблоко это аллегория - змей не говорил съесть яблоко, он уговорил Еву на секс и она зачала, от змия пошли плохие люди, а от Адама хорошие - и с тех пор эти народы борются друг с другом.

    Опеннет образовательный.

     
     
  • 4.12, Аноним (12), 16:37, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Может и источник теории назовёшь?
     
     
  • 5.14, Аноним (11), 16:43, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    https://en.wikipedia.org/wiki/Serpent_seed
     
  • 4.19, rshadow (ok), 18:04, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну да, ну да ... следующий шаг - плохих в печах сжигать, известное дело.
     
     
  • 5.27, Аноним (27), 19:23, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Если я правильно понимаю, идея была утилизировать всех "хороших", пока те не смогли реализовать собственные мечты об утилизации "не таких хороших", но немного перестарались в процессе решив убрать всех кто может быть против. Тут не стоит забывать, с какой целью вообще существуют религии и что под замес попали те, у кого религии не было.
     
  • 2.30, Вы забыли заполнить поле Name (?), 21:01, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Да раст даже нет под те платформы, где работает сабж.
     

  • 1.4, Аноним (4), 14:25, 15/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Скажем дружно * нужно.
     
     
  • 2.6, Иваня (?), 14:38, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    СУБД от Centrum Wiskunde & Informatica (дин из ведущих европейских научно-исследовательских институтов в области математики и теоретической информатики). Конечно, нужно!
     
     
  • 3.8, Аноним (8), 14:55, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    OLAP'ы не нужны как класс со всеми манагерами, аналитегами, датасайентистами и ананистами. И уж темболее в рамках процесса твоей овнопроги.

     
     
  • 4.13, Аноним (12), 16:39, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Что, завидно как люди баблишко зашибают? А тебе что мешает?
     
     
  • 5.23, Аноним (23), 18:36, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    у него нет времени на ерунду, ему комментарий на опеннете под очередной новостю об очередном ненужно еще писать
     

  • 1.7, Аноним (7), 14:38, 15/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    SQLite здорового человека! Достало уже обёртки вокруг SQLite писать, выполняющие по 100 операций, а потом коммитящих транзакцию.
     
  • 1.9, 1 (??), 15:21, 15/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    В результате получится очередной interbase
     
  • 1.10, Аноним (10), 16:18, 15/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Чёт расфоркали SQLite. Видимо совсем разработчик неадекват если такие сложности с принятием изменений в апстрим.
     
     
  • 2.31, funny.falcon (?), 04:23, 16/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    DuckDB кардинально отличается как в архитектуре, так и в сфере использования.

    DuckDB не претендует на OLTP нагрузку вообще ни как. Так же не претендует на «супернадежность».

    В свою очередь, SQLite не претендует на OLAP. У него даже MergeJoin ещё не реализован.

    Не заглядывал в сырцы, но подозреваю, что в DuckDB от SQLite только парсер SQL. Хотя, может ещё BTREE переиспользуют для хранения схемы данных.

     

  • 1.16, BuildPrice (?), 17:39, 15/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Какая к черту аналитика на inmemory DB? Какой объем данных? Или аналитика не нуждается в сохранении?
     
     
  • 2.17, Аноним (17), 17:49, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Она не in-memory. Ну, если ты сам её об этом не попросишь
     
     
  • 3.20, rshadow (ok), 18:06, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    да зачем просить, ее ядро само инмемори сделает ))
     

  • 1.18, Аноним (12), 18:00, 15/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Сейчас набегут нинужнисты рассказывать, как это всё не нужно и как надо заниматься НАСТОЯЩЕЙ аналитикой на кластерах с десятками ТБ рам.
     
     
  • 2.29, Вы забыли заполнить поле Name (?), 20:59, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    мап редьюсить и редьюсить мап, ждать по 10-15 мин. Эх...
     

  • 1.22, Совсем другой Аноним (?), 18:33, 15/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так пробовал сабж кто или все чисто блеснуть остроумием зашли?
     
     
  • 2.25, Аноним (23), 18:38, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    чем-чем?
     
  • 2.26, Аноним (12), 18:40, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Заказчик мой будет пробовать. Его тимлид уже озадачил двух орлов вкинуть это в проект вместо собственной писанины и замеры сделать. Вот это я понимаю скорость инноваций — пока опеннет шутит, люди уже тесты гоняют.
     
     
  • 3.28, Аноним (3), 19:44, 15/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    очевидно, что это нужно не заказчику, а тимлиду. на то и нужны заказчики, чтобы им впарить нинужное
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру