QuestDB: base de datos de series temporales libre con SQL y Parquet

Consola web de QuestDB con un editor SQL y resultados de una consulta de series temporales

QuestDB es una base de datos de series temporales de código abierto, con licencia Apache 2.0, pensada para ingerir millones de eventos por segundo, calcular sobre los datos en vivo en milisegundos y mantener años de histórico consultables con SQL estándar ampliado. Su versión 10.0 estrena el QuestDB Wire Protocol (QWP), un protocolo binario y columnar que sirve tanto para escribir como para leer resultados en formato Apache Arrow.

Las claves de QuestDB en 30 segundos

  • Base de datos de series temporales libre, con licencia Apache 2.0 y más de 17.000 estrellas en GitHub.
  • Se consulta con SQL ampliado con funciones como SAMPLE BY, LATEST ON o ASOF JOIN.
  • La versión 10.0 introduce el protocolo QWP para ingesta y lectura en Arrow.
  • Habla el protocolo de PostgreSQL, lo que permite usar drivers y herramientas existentes.
  • Guarda datos en formato propio y en Parquet; la versión Enterprise los mueve a almacenamiento de objetos.

El motor está escrito en Java sin recolección de basura en las rutas críticas, con partes en C++ y Rust. Los datos se guardan en columnas mapeadas en memoria y particionadas por tiempo, y las consultas se reparten entre todos los núcleos con instrucciones SIMD y filtros compilados al vuelo. El almacenamiento es escalonado: un registro de escritura anticipada paralelo, particiones columnares nativas y Apache Parquet. En la edición libre las particiones se convierten a Parquet con ALTER TABLE; QuestDB Enterprise lo hace de forma automática y envía los datos fríos a almacenamiento de objetos.

Consola web de QuestDB con un editor SQL y resultados de una consulta de series temporales
Consola web de QuestDB. Captura oficial en github.com/questdb/questdb.

Instalación con Docker y Homebrew

La forma más rápida de arrancarlo es Docker:

docker run -p 9000:9000 -p 8812:8812 questdb/questdb

En un Mac con Apple Silicon también se puede usar Homebrew. El paquete solo incluye bibliotecas nativas para esa arquitectura, así que en un Mac con Intel hay que recurrir a la imagen de Docker:

brew install questdb
brew services start questdb

# o manualmente
questdb start
questdb stopLenguaje del código: PHP (php)

Los puertos importan. El 9000 concentra la consola web (editor SQL, gráficas e importación de CSV), la API REST, el nuevo QWP y la compatibilidad con InfluxDB Line Protocol. El 8812 habla el protocolo de PostgreSQL, de modo que cualquier driver como psycopg, JDBC o pgx, y las herramientas de BI u ORM, pueden consultar la base de datos sin cambios. Las inserciones por esa vía funcionan, pero el proyecto advierte de que son más lentas que con QWP. Ninguno de los dos puertos debería quedar abierto a internet sin autenticación y sin un cortafuegos delante.

SQL para series temporales y casos de uso

El lenguaje es SQL estándar con extensiones para datos con marca de tiempo. SAMPLE BY agrega por intervalos, LATEST ON devuelve el último valor de cada serie y ASOF JOIN empareja cada fila con la más reciente de otra tabla. Estos dos ejemplos, sacados de la documentación, funcionan en la demo pública:

-- Velas OHLCV de 15 minutos para EURUSD, hoy
SELECT timestamp, symbol,
  first(price) AS open, max(price) AS high,
  min(price) AS low, last(price) AS close,
  sum(quantity) AS total_volume
FROM fx_trades
WHERE symbol = 'EURUSD' AND timestamp IN '$today'
SAMPLE BY 15m;

-- Cada operación con la cotización más reciente
SELECT t.timestamp, t.symbol, t.price, q.bid_price, q.ask_price
FROM fx_trades t
ASOF JOIN core_price q ON (symbol)
WHERE t.timestamp IN '$today';Lenguaje del código: PHP (php)

El proyecto cita como usos habituales los mercados financieros (ticks, libros de órdenes, análisis previo y posterior a la operación), la telemetría aeroespacial y de robótica y los datos de redes eléctricas, turbinas o reactores. Para un administrador de sistemas encaja bien como almacén de métricas de infraestructura: acepta datos de Telegraf, Kafka, Redpanda o Apache Flink y se visualiza con un complemento nativo para Grafana. Hay clientes oficiales para Python, .NET, C y C++, Go, Java, Node.js y Rust.

Rendimiento: cifras del propio proyecto

QuestDB publica sus propias pruebas. Con la versión 10.0 y QWP afirma alcanzar 19 millones de filas por segundo de ingesta por instancia y leer 220 millones de filas por segundo hacia Arrow con ocho lectores. En la prueba TSBS con 100.000 hosts en una instancia de AWS de 32 vCPU y 256 GB, ejecutada en agosto de 2026 con QuestDB 9.3.3, atribuye a QuestDB 8,59 millones de filas por segundo frente a 1,75 millones de ClickHouse, 1,08 millones de TimescaleDB y 541.000 de InfluxDB 1.12. Son mediciones del fabricante, y el propio README anima a cada usuario a repetirlas con sus datos.

Para trabajar con agentes de programación, el proyecto ofrece una skill que enseña su dialecto SQL (npx skills add questdb/skills) y un servidor MCP para la consola web.

Preguntas frecuentes

¿QuestDB es compatible con PostgreSQL?

Habla el protocolo de red de PostgreSQL en el puerto 8812, así que se puede consultar con drivers como psycopg, JDBC o pgx y con herramientas de BI. No es un PostgreSQL completo y su SQL tiene extensiones propias.

¿Qué diferencia hay entre la versión libre y Enterprise?

En la libre las particiones se convierten a Parquet a mano con ALTER TABLE. Enterprise lo hace automáticamente y mueve los datos fríos a almacenamiento de objetos.

¿Qué es QWP?

El QuestDB Wire Protocol, estrenado en la versión 10.0: un protocolo binario y columnar sobre WebSocket que sirve para escribir datos y para recibir resultados en formato Apache Arrow por la misma conexión.

¿Se puede usar con Grafana?

Sí. QuestDB tiene un complemento nativo para Grafana y publica paneles de demostración en tiempo real.

Fuentes:

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana. Recuerda revisar tu email para confirmar la suscripción.

Scroll al inicio
×