Minería … de petabytes…exabytes…zettabytes…

Tecnologías para el manejo de grandes volúmenes de datos.

  • Hace unos meses por casualidad me encontré con DuckDB en las jornadas online de PostgreSQL que se celebraron este año https://posetteconf.com/2025/.

    Dentro de los numerosos sistemas gestores de bases de datos existentes, las dos características que la distinguen de otros sistemas son:

    • Base de datos OLAP (Online Analytical Processing).
    • Base de datos «in-process». Está pensada para funcionar incrustada en otra aplicación o proceso, al estilo de SQLite.

    ¿porqué deberíamos usar DuckDB?.

    Según la propia página web de la base de datos, https://duckdb.org/, estas son sus razones:

    SIMPLE

    DuckDB no posee dependencias externas, ni en tiempo de compilación ni en tiempo de ejecución. Todo lo que se necesita para compilar es el compilador de C++11.

    DuckDB no se ejecuta en un proceso separado, por lo que no hay un sistema gestor de base de datos que instalar y mantener, sino completamente incrustada en el proceso «host».

    PORTABLE

    Dado que no posee dependencias, DuckDB es extremadamente portable.

    Puede ser compilado para la mayoría de los sistemas operativos (Linux, macOS, Windows) y arquitecturas de CPU (x86, ARM).

    Puede ser ejecutada en dispositivos de restringidos recursos hardware o en máquinas con varios teras de memoria RAM y más de 100 núcleos de CPU.

    DuckDB-Wasm puede ser ejecutada en navegadores web o incluso en teléfonos móviles.

    CARACTERÍSTICAS PROPIAS DE GRANDES BDD

    Proporciona características propias de grandes bases de datos analíticas, dando soporte a una amplia gama de consultas complejas con una gran biblioteca de funciones analíticas, funciones de ventana, etc…

    Duckdb es una base de datos OLAP (Online Analytical Processing) «in-process», lo que quiere decir que, está pensada para funcionar incrustada en otra aplicación.

    Ofrece garantías transaccionales, propiedades ACID (atomicidad, coherencia, aislamiento y durabilidad) mediante una versión personalizada del MVCC usado por PostgreSQL.

    Soporta índices secundarios para agilizar las consultas.

    Los datos pueden almacenarse en archivos de bases de datos de archivos únicos persistentes.

    RAPIDEZ

    DickDB está diseñada para soportar cargas de trabajo analíticas (OLAP); consultas que poseen funciones analíticas (count, avg, max, …), que necesitan hacer agregación de tablas completas, «joins» entre tablas voluminosas o ambas cosas a la vez.

    Para llevar a cabo este tipo de consultas de manera eficiente, las investigaciones en este campo nos arrojan dos tipos de estrategias:

    • Motores de ejecución de consultas vectorizadas.
    • Compilación de funciones de usuario «just in time».

    DuckDB usa un motor de ejecución de consultas vectorizadas en columnas, donde se procesan un gran lote de valores (un «vector») en una sola operación. Eso reduce la sobrecarga presente en sistemas como PostgreSQL, MySQL o SQLite donde cada fila es procesada de manera secuencial.

    EXTENSIBLE

    DuckDB posee un mecanismo de extensión de funcionalidades parecido al de PostgreSQL, permitiendo añadir nuevos tipos de datos, funciones, formatos de ficheros y nueva sintaxis SQL. Realmente muchas de las características actuales de DuckDB están implementadas como extensiones. Es el caso del soporte para ficheros Parquet, JSON, soporte para usos horarios, protocolos https y S3.

    LIBRE

    Posee licenciamiento MIT.

    La propiedad intelectual del proyecto recae sobre la DuckDB Foundation.

    AMPLIAMENTE TESTADA

    DuckDB es una base de datos que aunque nació a partir un un proyecto de investigación, nunca estuvo destinada a ser un prototipo, por lo que ha sido ampliamente testada usando los mecanismos de integración continua.

    Ha sido sometida a test de estrés bajo grandes cargas de trabajo usando los bechmarks TPC-H y TPC-DS.

    Todas estas características han hecho que DuckDB ya esté siendo usada por una gran cantidad de proyectos.

    Todas estas características hacen posible que Duckdb pueda ser usada como base de datos analítica, tanto en sistemas con capacidades muy limitadas por ser sistemas «borde» embebidos, como en grandes sistemas SaS que dan servicio a miles de usuarios con crecientes cantidades de datos almacenados.

    Otro posible caso de uso es una base de datos local para realizar minería de datos. Muy a menudo los científicos de datos se encuentran ante grandes sistemas de almacenamiento de datos rígidos y faltos de capacidades analíticas; en ese entorno, DuckDB puede ser usada como una base de datos local al ordenador del propio científico de datos, que permita leer grandes cantidades de datos desde otros sistemas y analizarlos.