Это был пост в блоге, который я планировал написать еще весной, когда увидел, что шумиха вокруг DuckDB начала набирать новые высоты. С тех пор обсуждение DuckDB только усилилось в сообществе разработчиков и специалистов по обработке данных. В настоящее время я вижу две тенденции в сообществе данных с высоким уровнем вовлеченности: DuckDB и Rust берет на себя разработку данных. Но в чем на самом деле шумиха вокруг DuckDB? Давайте немного поцарапаем поверхность.

Сегодняшнее ускорение в пространстве данных может быть связано со взрывным ростом облачных хранилищ данных за последние несколько лет. Облачные хранилища данных стали краеугольным камнем стеков данных: компании и организации всех размеров используют хранилища данных для реализации сценариев использования аналитики. Стремительный взлет Snowflake, кульминацией которого стало ее блокбастерное IPO в сентябре 2020 года, ставшее крупнейшим IPO программного обеспечения в истории, стал образцом этой тенденции.

Глядя на 3 против больших данных (скорость, объем, разнообразие), многие в сообществе данных, с которыми я общался в последнее время, сказали, что наиболее востребованным параметром в последние годы была скорость.

Как отметил Мехди Уазза (штатный инженер по данным в Trade Republic) — правда в том, что не у всех есть большие данные — но требуется низкое потребление задержки от микросервиса для активов данных, обрабатываемых из вашей базы данных OLTP. является распространенным вариантом использования.

Как говорит Мехди, если посмотреть на некоторые тренды продуктов (RocksDB, DuckDB, Clickhouse), все они обеспечивают более простой интерфейс для потребления с низкой задержкой. В эти приложения инвестировали даже некоторые гиганты облачных хранилищ данных, такие как Снежинка Unistore.

Тем не менее, текущая парадигма облачного хранилища данных по-прежнему сильно перекошена для варианта использования клиент-сервер и игнорирует растущий сегмент пользователей. Как отметил Томаш Тунгуз (инвестор Redpoint Ventures):

«Большинство рабочих нагрузок не являются массовыми. Вместо того, чтобы требовать масштабируемую базу данных в небе, большинство анализов выполняются быстрее с оптимизированной базой данных на вашем компьютере, которая при необходимости может использовать облако».

DuckDB меняет это.

Как видно из приведенных выше данных поиска Google Trends, за последние несколько месяцев вокруг DuckDB в сообществе данных нарастало обсуждение и ощутимая шумиха.

Растущий импульс

Растущий импульс DuckDB становится очевидным, просто просматривая сообщения в социальных сетях. Например. Роберт Салин (ведущий специалист по обработке данных в MatHem) отметил следующее в LinkedIn еще в июле:

«В последнее время я слышал много хорошего о DuckDB и нашел подкасты с Джорданом Тигани (основателем MotherDuck и знаменитостью BigQuery) и Ханнесом Мюлейзеном (создатель-основатель DuckDB Labs) действительно хорошими. Поэтому мне пришлось попробовать. Моя первая программа заключалась в создании таблицы DuckDB путем чтения непосредственно из таблицы BigQuery с использованием BigQuery Storage Read API, поскольку он поддерживает таблицы со стрелками (и не требует вычислений). Оказалось, что это очень просто, поделившись сутью. Не терпится поэкспериментировать с DuckDB и с большими объемами данных, у нее определенно огромный потенциал».

И Роберт определенно не единственный, кто в восторге от DuckDB, читая сообщения в социальных сетях (я рекомендую просто выполнить поиск по хэштегу #duckdb в LinkedIn или Twitter). Например. Абхишек Чоудхари (старший ведущий инженер данных Bayer) недавно написал в LinkedIn следующее:

«Мнение: DuckDB — одна из самых захватывающих новых технологий для Data Engineering/Data Science. DuckDB безумно быстр, а с Apache Arrow этот дуэт способен давать поразительные результаты. Еще один важный момент DuckDB — это простота. Он не претендует на какие-либо новаторские решения, но придерживается принципа простого и быстрого доступа к данным».

Тем не менее, мой любимый комментарий в социальных сетях о DuckDB, скорее всего, принадлежит Джошу Уиллсу в треде Twitter, в котором обсуждается сообщение в блоге Как Snowflake терпит неудачу всегда занимательного Бенна Стэнсила (я рекомендую подписаться на его Substack ):

Ниже вы найдете несколько дополнительных скриншотов твитов, демонстрирующих интерес, который в настоящее время вызывает DuckDB в сообществе данных:

Создание управляемого решения поверх DuckDB

Это довольно классический сценарий — возьмите инструмент с открытым исходным кодом, демонстрирующий импульс, и создайте на его основе сервис. Например. Databricks сделали это с помощью Spark и Confluent с Kafka.

Джордан Тигани, давний руководитель продукта BigQuery в Google (знаменитость BigQuery, как ранее отмечал Роберт Сахлин), объявил в мае, что он является соучредителем бессерверной облачной версии DuckDB под названием MotherDuck. К нему присоединяется его коллега по Google Тино Терешко.

Помимо MotherDuck, у нас есть DuckDB Labs, коммерческая компания, созданная Ханнесом Мюхлейзеном и другими создателями DuckDB в июле 2021 года для предоставления поддержки, пользовательских расширений и даже пользовательских версий продукта в качестве способа его монетизации. .

Как отметила Лорен Балик в своем блоге 6 основанных на реальности прогнозов для данных в 2023 году — венчурные капиталисты и специалисты по данным правы, стекаясь в DuckDB.

Этот интерес материализовался вчера, когда MotherDuck объявила о своем раунде финансирования на 47,5 млн долларов, возглавляемом, например, a16z (ранние инвесторы, например, в Databricks) и Redpoint Ventures (ранние инвесторы, например, в Snowflake). Одновременно MotherDuck и DuckDB Labs объявили о стратегическом партнерстве.

Джордан Тигани (соучредитель MotherDuck) прокомментировал TechCrunch следующее, объявляя о раунде финансирования:

«Пользователи хотят простых и быстрых ответов на свои вопросы — они не хотят ждать облака… Дело в том, что современный ноутбук быстрее современного хранилища данных. Поставщики облачных данных сосредоточены на производительности запросов объемом 100 ТБ, что не только не имеет значения для подавляющего большинства пользователей, но и отвлекает от способности поставщиков обеспечивать отличное взаимодействие с пользователем».

Но о чем вся эта шумиха? Давайте немного поцарапаем поверхность.

DuckDB — это простая в использовании внутрипроцессная база данных OLAP с открытым исходным кодом (которая обрабатывает данные в памяти и не требует выделенного сервера/службы), которую многие в упрощенном виде описывают как эквивалент SQLite для аналитических рабочих нагрузок OLAP.

На HackerNoon его однажды описали как мутантное потомство SQLite и Redshift.

Как отметила команда MoterDuck, в качестве внутрипроцессной базы данных DuckDB представляет собой механизм хранения и вычислений, который позволяет разработчикам, специалистам по данным, инженерам данных и аналитикам данных дополнять свой код чрезвычайно быстрым анализом с использованием простого SQL. Кроме того, DuckDB имеет возможность анализировать данные там, где они могут храниться, например. на ноутбуке или в облаке. Кроме того, DuckDB поставляется с простым интерфейсом командной строки для быстрого прототипирования — без необходимости настройки, разрешений, создания и управления таблицами и т. д.

Основываясь на чтении тем, например. HackerNews, Reddit и Twitter, похоже, DuckDB может многое понравиться, например:

  • Его производительность для аналитических рабочих нагрузок на машинах с одним узлом кажется впечатляющей, а установка безболезненна (технически вы можете начать изучать DuckDB в течение 5 минут).
  • DuckDB встраивается — как SQLite — и оптимизирован для аналитики. Самое важное здесь — это встраиваемая часть (например, библиотека без типичной зависимости PostgreSQL), устраняющая сетевую задержку, которую вы обычно получаете при общении с базой данных.
  • У DuckDB также очень мало усилий по развертыванию — `pip install duckdb`, и вы готовы к гонкам.
  • Кроме того, DuckDB работает быстро — по сравнению с запросами Postgres DuckDB в 80 раз быстрее, и при тестировании других систем мы видим такие же впечатляющие результаты.

Вот некоторые из причин, по которым DuckDB наблюдает впечатляющий рост за последние 12 месяцев.

На практике любой ЦП можно мобилизовать для выполнения мощной аналитики через DuckDB. Кроме того, DuckDB является переносимым и модульным, без каких-либо внешних зависимостей. Конкретно это означает, что вы можете запускать DuckDB на облачной виртуальной машине, в облачной функции, в браузере или на своем ноутбуке, как упоминалось ранее.

Сделаем шаг назад

В следующем разделе я в значительной степени заимствую отличный июньский пост в блоге Kojo Osei (инвестор Matrix Partners) о DuckDB.

Как отмечает Коджо, новая категория хранилищ данных находится на пересечении аналитических запросов и встроенных развертываний. Чтобы проиллюстрировать, почему это так убедительно, он классифицирует базы данных по двум осям:

Как видно выше и отмечено Коджо, текущие базы данных оптимизированы для аналитических или транзакционных рабочих нагрузок. Аналитические рабочие нагрузки, также называемые оперативной аналитической обработкой (OLAP), представляют собой сложные запросы к историческим данным. Например, вы можете проанализировать регистрацию пользователей с разбивкой по демографическим данным, таким как возраст и местоположение. С другой стороны, транзакционные рабочие нагрузки, также называемые оперативной обработкой транзакций (OLTP), оптимизированы для быстрого чтения и записи в реальном времени.

Перейдем к типам развертывания.

Как показано выше и отмечено Коджо, современные технологии баз данных развертываются как автономные или встроенные решения. Автономные базы данных обычно развертываются в парадигме клиент-сервер. База данных находится на централизованном сервере и запрашивается клиентским приложением. Встроенные базы данных выполняются внутри основного процесса любого приложения, обращающегося к базе данных.

Теперь немного магии. Когда мы объединяем эти две оси, мы видим инновационный разрыв! Как подчеркивает Коджо, текущие инновации в базах данных OLAP сосредоточены на автономных базах данных OLAP, таких как Snowflake, ClickHouse и Redshift (не знаю, почему он не упомянул BigQuery). Это привело нас к ситуации, когда варианты использования встроенной аналитики упускались из виду и недостаточно обслуживались. DuckDB меняет это.

Примеры использования DuckDB

Airbyte имеет в своем глоссарии краткий обзор примеров использования DuckDB:

  • Сверхбыстрый аналитический вариант использования локально. Например, пример такси в Глоссарии Airbyte включает пример данных о такси за 10 лет, 1,5 миллиарда строк, который до сих пор работает на ноутбуке. См. бенчмарки здесь.
  • Его можно использовать как оболочку SQL с нулевыми копиями (поверх паркетов в S3).
  • Предоставьте свои данные пользователям вместо больших циклов и задержек, выполняя вызовы REST. Вместо этого вы можете поместить данные внутрь клиента. Вы можете делать 60 кадров в секунду, так как данные находятся там, где находится запрос.
  • DuckDB на Kubernetes для слоя с нулевым копированием для чтения S3 в Озере данных! Навеяно этим твитом. Самый дешевый и быстрый вариант для начала.

Согласно документации, DuckDB следует использовать, когда:

  • Обработка и хранение наборов табличных данных, например. из файлов CSV или Parquet
  • Выполнение интерактивного анализа данных, например. объединение и объединение нескольких больших таблиц
  • Имея одновременные большие изменения в нескольких больших таблицах, например. добавление строк, добавление/удаление/обновление столбцов
  • Передача большого набора результатов клиенту

Согласно документации, DuckDB не следует использовать, когда:

  • Наличие сценариев использования с большими объемами транзакций (например, отслеживание заказов электронной коммерции)
  • Запись в одну базу данных из нескольких параллельных процессов
  • Наличие крупных клиент-серверных установок для централизованного хранения корпоративных данных

Чтобы узнать больше о вариантах использования DuckDB, прослушайте этот эпизод подкаста Data Engineering с Ханнесом Мюлейзеном, одним из создателей DuckDB (обсуждение вариантов использования начинается примерно через 14 минут).

Последние мысли

Существует множество систем управления базами данных. Но, как подметили создатели DuckDB: универсальной системы баз данных не существует. Все они идут на разные компромиссы, чтобы лучше приспособиться к конкретным случаям использования. DuckDB ничем не отличается.

Когда вы думаете о выборе ядра базы данных для своего проекта, вы обычно рассматриваете варианты, ориентированные на обслуживание нескольких одновременных пользователей. Иногда то, что вам действительно нужно, — это встроенная база данных, которая молниеносно справляется с однопользовательскими рабочими нагрузками. Войдите в DuckDB.

Кроме того, кажется, что DuckDB также позволяет всему сообществу энтузиастов SQL мгновенно продуктивно работать с Python, никогда не изучая ничего, кроме самых базовых Pandas. Растет число участников сообщества данных, которые больше никогда не используют Pandas для чего-то сложного, потому что предпочитают SQL.

Луис Веласко (руководитель отдела обработки данных в Google) хорошо резюмировал в LinkedIn несколько месяцев назад, почему он считает DuckDB важным делом:

1. Мы живем в эпоху великой дезагрегации платформ централизованных данных. Наиболее экстремальная парадигма децентрализованного вычисления, о которой я могу думать, — это сетка из ноутбуков. Комбинация таких технологий, как паркет + pyaArrow с векторизованным выполнением, позволяет эффективно запрашивать большие наборы данных на персональных устройствах.

2. С повышением грамотности данных и улучшением навыков кодирования у подавляющего большинства работников, работающих с данными, потребление аналитических данных далеко не статично (панельные панели), а является исследовательским и самообслуживаемым. Поэтому я представляю, как аналитики данных получают доступ к данным в облачном хранилище, выполняя встроенный анализ локально с помощью duckDB.

3. SQL живее, чем когда-либо прежде — и точка.

4. Нулевые усилия по развертыванию — `pip install duckdb` и вы в

5. Открытый исходный код. Формируется активное сообщество с поддержкой таких ключевых элементов, как pandas, dbt или apachesuperset, не говоря уже о новых стартапах, таких как DuckDB Labs и MotherDuck.

Что вы думаете о будущем DuckDB?

PS: Я рекомендую посмотреть это видео «Что такое DuckDB» The Seattle Data Guy, где он обсуждает вместе с Джозефом Мачадо (старшим инженером данных в LinkedIn) о том, как DuckDB стремительно вошла в мир данных.