В наше время обработка и анализ больших данных становятся ключевыми задачами для различных сфер — от городских порталов и государственных открытых данных до компаний, работающих с массивами информации. Однако классические решения для хранения и запросов, такие как традиционные SQL-серверы, зачастую оказываются либо слишком дорогими, либо сложными в масштабировании для веб-приложений, ориентированных на широкий круг пользователей. В этом контексте использование DuckDB на стороне клиента с помощью WebAssembly (WASM) совместно с облачным хранилищем Cloudflare R2 предлагает уникальный и практически бесплатный способ работы с большими данными, позволяющий обходиться без выделенных серверов и ресурсов облачной обработки. Такой подход позволяет хранить обширные наборы данных в виде статических файлов и одновременно давать пользователям возможность выполнять сложные SQL-запросы и анализ прямо в браузере. Основы технологии DuckDB WASM заключаются в запуске легковесного аналитического движка DuckDB, скомпилированного в WebAssembly, на клиентском устройстве пользователя.
Это означает, что обработка запросов и вычисления происходят локально, на машине пользователя, без нагрузки на сервер. Данные хранятся в открытом формате parquet на объектном хранилище Cloudflare R2. Благодаря отсутствию необходимости в серверной части и использованию масштабируемого хранилища, решение становится доступным по цене и способным быстро обслуживать множество одновременных пользователей. Cloudflare R2 выделяется среди других облачных хранилищ тем, что не взимает платы за исходящий трафик (egress), что существенно снижает затраты при работе с большими данными. Плата взимается только за операции чтения и записи, а бесплатные тарифы предоставляют миллионы таких запросов ежемесячно.
Для сценариев, где пользователи делают случайные запросы к обширным наборам данных, стоимость использования практически минимальна. Особенностью данного подхода является хранение данных в виде статических файлов Parquet, загруженных в R2. Parquet — это столбцовый формат хранения данных, оптимизированный для аналитики, поддерживаемый DuckDB. Это позволяет DuckDB напрямую читать данные из файла по URL и выполнять запросы SQL без промежуточных преобразований и серверных операций. Для примера можно выполнить запрос в браузере: SELECT * FROM 'https://data-crimedecoder.
com/books.parquet' LIMIT 10;, что возвращает первые десять записей из большого по объему набора данных. Для успешной работы DuckDB WASM с данными в R2 важно настроить корректную политику CORS с разрешением на доступ с любого источника и методами GET и HEAD. Это обеспечивает возможность клиентскому приложению считывать файлы без ограничений. Кроме того, чтобы обойти ограничения доступа при использовании стандартного development URL Cloudflare, рекомендуется почтовый доступ к содержимому R2 через собственный домен.
Проект, лежащий в основе такой реализации, показывает отличные результаты. Например, размещение около 72 гигабайт данных с 150 миллионами записей становится доступным по очень низкой цене — порядка 23 долларов в год, учитывая стоимость домена и стоимость хранения в Cloudflare R2. При этом масштабируемость практически не ограничена, потому что обработка осуществляется на стороне пользователя, а хранилище справляется с огромным объемом данных. Такой архитектурный подход особенно подходит для порталов открытых данных, городских или государственных дашбордов и других приложений, где важна возможность гибко запрашивать и анализировать обширные наборы данных, не вкладывая средства в дорогостоящую инфраструктуру. Пользовательский интерфейс может быть реализован как статичный сайт, например, размещенный на GitHub Pages или любом другом бесплатном хостинге, в то время как все вычисления происходят локально и запросы к данным выполняются напрямую из хранилища.
Но есть и определённые ограничения. В отличие от платформ, использующих S3 с поддержкой определенных функций, R2 на момент описания не поддерживает прямые запросы с использованием шаблонов путей или партиционирование файлов с объединенным чтением. Это значит, что если данные разбиты на партиции, их нужно вручную объединять в записях SQL, создавая объединения запросов. Возможны пути оптимизации, например, с помощью Iceberg-таблиц, однако на текущий момент такой функционал в DuckDB WASM с R2 требует дополнительной настройки и экспериментов. Безопасность и приватность также имеют свои нюансы.
Поскольку весь доступ осуществляется публично, подход идеально подходит для открытых данных. Для задач, требующих контроля доступа и приватности, необходима серверная логика или другие формы аутентификации, что выходит за рамки простого WASM-подхода. Возможности визуализации у такого решения также весьма широки. Поскольку результаты запросов возвращаются в браузер, можно интегрировать любые современные JavaScript-библиотеки для построения графиков, таблиц и интерактивных дашбордов. Разработчики могут создавать полноценные интерактивные интерфейсы с выпадающими меню, фильтрами и динамическими обновлениями данных, делая аналитику доступной и понятной для конечных пользователей.
Суммируя, интеграция DuckDB WASM с Cloudflare R2 открывает новые возможности для работы с большими и сложными наборами данных без существенных затрат и необходимости в выделенной серверной инфраструктуре. Решение демонстрирует потенциал демократизации больших данных и аналитики, предоставляя масштабируемый, удобный и экономичный инструмент для разработчиков и организаций всех размеров.