Un grupo de desarrolladores ha lanzado OpenDuck, un nuevo proyecto de código abierto diseñado para llevar las capacidades de DuckDB distribuido a cualquier entorno. El proyecto implementa los principios arquitectónicos de almacenamiento diferencial y ejecución híbrida, poniendo las funciones nativas de la nube (cloud-native) de MotherDuck a disposición de todos para su uso y extensión de forma independiente.
OpenDuck permite a los usuarios ejecutar consultas que reparten el procesamiento entre una máquina local y un nodo remoto. Mediante una extensión personalizada de DuckDB, el sistema identifica qué partes de un plan de consulta pueden ejecutarse localmente y cuáles requieren recursos remotos, utilizando "operadores puente" (bridge operators) para transferir a través de la red únicamente los resultados intermedios necesarios.
Protocolo abierto y flexibilidad de backend
El proyecto utiliza un protocolo minimalista basado en gRPC y Arrow IPC para la transmisión de resultados. Al ser un protocolo abierto, los desarrolladores pueden sustituir la pasarela (gateway) de Rust incluida por cualquier backend que sea compatible con gRPC y Arrow, evitando así la dependencia de un único proveedor (vendor lock-in).
OpenDuck gestiona los datos mediante capas de solo anexado (append-only), utilizando PostgreSQL para los metadatos y almacenamiento de objetos para las capas de datos inmutables. Este enfoque permite realizar lecturas consistentes a través de instantáneas (snapshots), proporcionando una única vía de escritura que admite múltiples lectores simultáneos.
Aunque se inspira en el servicio comercial en la nube de MotherDuck, OpenDuck no es compatible a nivel de protocolo (wire-compatible) con este. El proyecto funciona como una alternativa autónoma y autoalbergada (self-hosted), con su propio esquema de conexión "openduck:" y una implementación de código abierto de las interfaces StorageExtension y Catalog.
A diferencia de Arrow Flight SQL, que funciona como un protocolo de base de datos genérico, OpenDuck ha sido diseñado específicamente para DuckDB. Se integra directamente en el catálogo de DuckDB, lo que permite que las tablas remotas participen en operaciones de unión (joins), CTE y optimización como si se tratara de archivos locales.