The OpenNET Project / Index page

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

Выпуск DuckDB 0.9.0, варианта SQLite для аналитических запросов

29.09.2023 14:20

Опубликован выпуск СУБД DuckDB 0.9.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, позволяющий в одной операции разом обрабатывать большие наборы значений.

Среди изменений в новом выпуске:

  • Значительно повышена производительность агрегирования больших наборов данных при обработке запросов с выражениями "GROUP BY" или "DISTINCT", а также реализована техника вытеснения части хэш-таблицы на диск, решающая проблему с завершением операции из-за нехватки памяти в ситуациях, когда используемая для агрегирования хэш-таблица не умещается в оперативную память. Например, время обработки запроса "SELECT COUNT(*) FROM (SELECT DISTINCT * FROM tbl);" для набора в 30 млн строк при наличии 10ГБ памяти снизилась с 8.52 до 2.91 секунд.
  • Реализована возможность сжатия строковых и целочисленных данных перед выполнением операций сортировки и сгруппированного агрегирования, которая позволила значительно снизить потребление памяти (например, перед сортировкой значения упаковываются в объединённые строки, подобные "alice005, bob00003, eve00003, mallory7).
  • Повышена производительность оконных функций. По сравнению с прошлым выпуском время выполнения теста оконных функций снизилось с 33.8 до 3.8 сек.
  • Обеспечена автоматическая чистка полных групп строк при выполнении операции DELETE. Также реализовано усечение файла с БД (уменьшение его размера) после удаления данных, если удалённые группы строк находились в конце файла.
  • Повышена эффективность хранения индексов ART, используемых для проверки первичного и внешнего ключей или уникальности. Например, по сравнению с прошлой версией размер тестового индекса уменьшился с 278MB до 78MB.
  • Добавлена поддержка автоматической установки и загрузки официальных дополнений, которые помечены как заслуживающие доверия. Например, для использования дополнения json теперь достаточно написать duckdb.sql("FROM 'https://raw.githubusercontent.com/duckdb/duckdb/main/data/json/example_n.ndjson'").
  • Добавлена поддержка динамической загрузки дополнений на базе WebAssambly (DuckDB-WASM).
  • Добавлено дополнение для AWS, предоставляющее возможности, использующие AWS SDK.
  • Добавлено экспериментальное дополнение для чтения данных из хранилища Azure.
  • В клиенте добавлена экспериментальная поддержка API PySpark.
  • Добавлено экспериментальное дополнение для чтения таблиц в формате Apache Iceberg.
  • Ужесточена проверка правил с автоматическим приведением типов. В случае использования разных имён при определении типа и при указании поля структуры теперь будет выводиться ошибка. Например в таблице, созданной как "СREATE TABLE structs(s STRUCT(i INT));" теперь не получится добавить элемент с другим именем "INSERT INTO structs VALUES ({'k': 42});", так как имена "i" и "k" отличаются.


  1. Главная ссылка к новости (https://duckdb.org/2023/09/26/...)
  2. OpenNews: Проекты CBS и sqld развивают облачный и серверный варианты SQLite
  3. OpenNews: Выпуск rqlite 7.0, распределённой отказоустойчивой СУБД на основе SQLite
  4. OpenNews: Разработчики SQLite развивают бэкенд HC-tree с поддержкой параллельных операций записи
  5. OpenNews: Проект libSQL начал развитие форка СУБД SQLite
  6. OpenNews: Опубликован проект Litestream, реализующий систему репликации для SQLite
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/59828-duckdb
Ключевые слова: duckdb, sql, sqlite, database
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Tron is Whistling (?), 15:04, 29/09/2023 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]
  • –1 +/
     
     
  • 2.2, Витюшка (?), 15:07, 29/09/2023 Скрыто ботом-модератором
  • –1 +/
     
  • 2.4, Витюшка (?), 15:15, 29/09/2023 Скрыто ботом-модератором
  • –3 +/
     
     
  • 3.6, Аноним (6), 15:37, 29/09/2023 Скрыто ботом-модератором
  • +/
     
     
  • 4.11, Аноним (11), 16:34, 29/09/2023 Скрыто ботом-модератором
  • +/
     
     
  • 5.16, Аноним (6), 16:51, 29/09/2023 Скрыто ботом-модератором
  • +/
     
     
  • 6.18, Витюшка (?), 16:52, 29/09/2023 Скрыто ботом-модератором
  • +1 +/
     
     
  • 7.25, Tron is Whistling (?), 18:10, 29/09/2023 Скрыто ботом-модератором
  • –1 +/
     
  • 3.7, Аноним (7), 15:38, 29/09/2023 Скрыто ботом-модератором
  • +1 +/
     
     
  • 4.8, Аноним (6), 15:58, 29/09/2023 Скрыто ботом-модератором
  • +/
     
  • 4.12, Витюшка (?), 16:42, 29/09/2023 Скрыто ботом-модератором
  • –1 +/
     
     
  • 5.13, Аноним (7), 16:45, 29/09/2023 Скрыто ботом-модератором
  • +/
     
     
  • 6.17, Витюшка (?), 16:51, 29/09/2023 Скрыто ботом-модератором
  • –2 +/
     
     
  • 7.19, Аноним (7), 16:53, 29/09/2023 Скрыто ботом-модератором
  • +/
     
     
  • 8.20, Витюшка (?), 16:59, 29/09/2023 Скрыто ботом-модератором
  • +/
     
     
  • 9.29, YetAnotherOnanym (ok), 20:06, 29/09/2023 Скрыто ботом-модератором
  • +/
     
  • 3.9, Аноним (9), 16:04, 29/09/2023 Скрыто ботом-модератором
  • +2 +/
     
     
  • 4.15, Витюшка (?), 16:48, 29/09/2023 Скрыто ботом-модератором
  • +/
     
     
  • 5.23, Аноним (9), 17:39, 29/09/2023 Скрыто ботом-модератором
  • +1 +/
     
  • 3.24, Tron is Whistling (?), 18:09, 29/09/2023 Скрыто ботом-модератором
  • +/
     
  • 2.5, Rodegast (ok), 15:22, 29/09/2023 Скрыто ботом-модератором
  • +/
     
     
  • 3.10, Аноним (9), 16:05, 29/09/2023 Скрыто ботом-модератором
  • +2 +/
     
  • 3.14, Витюшка (?), 16:47, 29/09/2023 Скрыто ботом-модератором
  • +/
     
     
  • 4.26, Tron is Whistling (?), 18:11, 29/09/2023 Скрыто ботом-модератором
  • +/
     

     ....ответы скрыты модератором (23)

  • 1.22, Golangdev (?), 17:15, 29/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вот такую ещё насадку на SQLite я видел https://litestream.io/

    Но пользоваться я ей конечно же не стал, я же не хочу потерять важные корпоративные данные.

     
     
  • 2.30, Алкоголизм (?), 04:19, 30/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Это какие же важные корпоративные данные в SQLite лежат? И зачем именно так?
     
     
  • 3.43, Maks (??), 12:56, 04/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Важные корпоративные данные могут и оракуле потеряться если не делать резервные копии!
     

  • 1.28, YetAnotherOnanym (ok), 19:58, 29/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > ещё насадку на SQLite

    В каком смысле "ещё"? Разве сабж является насадкой на SQLite?

     
  • 1.31, ptr (??), 10:31, 30/09/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > "SELECT COUNT(*) FROM (SELECT DISTINCT * FROM tbl);"

    Зачем оптимизировать запросы, которые через code review точно не пройдут?

     
     
  • 2.32, ыы (?), 12:15, 30/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    кто бы сделал code review  у миллиона куллпрограммеров?
     
  • 2.33, Вы забыли заполнить поле Name (?), 12:23, 30/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Аналитическая бд подразумевает, что с ней работают аналитики, которые для своих задач никакие ревью кода не проходят, т.к. задача одноразовая, например, что-то посчитать.
     
     
  • 3.35, Куб Кублетович (?), 13:34, 30/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Обычная БД на GROUP BY CUBE/ROLLUP, PIVOT, UNPIVOT и расчете агрегатных функций на 100 миллионов строчек уходит в несознанку.
    А в аналитической БД под капотом ленивая материализация этих расчетов и прочие чудеса. Зато часто нет операций вроде UPDATE
     
  • 3.38, ptr (??), 18:29, 30/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Очень интересно. А я думал, что аналитической БД глубоко наплевать, кто с ней работает, просто она оптимизирована для аналитических запросов по большим данным, пусть даже ценой деградации производительности на иных операциях.
     
  • 3.41, ыы (?), 18:51, 02/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Запросы в аналитическую БД пишут все те же профессиональные программисты. А вот смотрят что получилось- таки да, аналитики... Которые программировать вообще говоря не умеют. Они экономисты. И если они и напишут чтото сами - то ревью кода просто положит в гроб всех ревьювщиков...
    Но правда в таких системах sqlite почемуто не используют. Может теперь начнут? :)
     
     
  • 4.44, Аноним (44), 15:01, 04/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    А если, не приведи господи, аналитической бд воспользуется... метеоролог или вообще логопед? Она поломается??? Из неё исчезнут данные?
     
     
  • 5.48, ыы (?), 20:50, 04/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    руки пусть не забывает помыть..после того как воспользуется...
     
  • 2.42, Аноним (42), 04:01, 03/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Эта операция выполнится быстро. Как именно вы хотите это оптимизировать?
     
     
  • 3.46, Аноним (44), 16:00, 04/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Как выполнится эта операция зависит от того, как реализован интерпретатор Сиквела, как работает и тд и тп. И вообще никак от самого запроса не зависит. Запрос логически верный. Остальное -- дело потрохов. Вот авторы этой самой УткаПодКроватьюБД утверждают, что их реализация выполняет этот нехитрый запросец за, условно, 10 сек, а ваниль за 1 000 000 000 000 000 000 тысч световых лет. Ну и поэтому поделье лучше. Вполне по делу.
     
  • 3.47, Аноним (44), 16:08, 04/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Эта операция выполнится быстро. Как именно вы хотите это оптимизировать?

    ... и это не операция, а выражение. Это выражение в набор операций превратит интерпретатор и оптимизатор.

     
  • 2.45, Аноним (44), 15:57, 04/10/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Нормальный запрос. С ним всё ок.
     

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



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

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