DEV Community

William Rodriguez
William Rodriguez

Posted on

Fila por fila es la muerte de OLAP: Ingestión masiva de alta velocidad en ClickHouse

ClickHouse es un motor columnar OLAP, no una base de datos OLTP. Insertar fila a fila lo destruirá. WClickHouse insert_many() desata la máxima velocidad por lotes.

Día 02 de la serie técnica WClickHouse Open Source.

Los Problemas Reales

  • Provocar errores 'Too many parts' al insertar registros fila a fila
  • Saturación de CPU por constantes fusiones de partes pequeñas en el servidor
  • Pipelines de ingestión analítica lentos que tardan horas en vez de segundos

La Implementación

from wclickhouse import WClickHouse

# Prepare 50,000 validated events
events = [
    AnalyticsEvent(event_id=i, event_name="metric_ping", properties=["v1"])
    for i in range(50000)
]

# Bulk insert executed in a single atomic network call
db = WClickHouse(AnalyticsEvent, db_config)
db.insert_many(events)
Enter fullscreen mode Exit fullscreen mode

Por qué esta arquitectura gana

  • 100k+ Filas/Seg: Inserción masiva columnar directa con insert_many().
  • Sin 'Too Many Parts': Partes comprimidas grandes escritas limpiamente.
  • Eficiente en Memoria: Serializa lotes directo al formato nativo de ClickHouse.

Verificación y Estado

Probado y verificado contra instancias reales de ClickHouse con más de 95% de cobertura de tests. Desarrollado para Python 3.9 a 3.14 con Apache Arrow y Pydantic v2.

Autor: William Steve Rodríguez Villamizar (Wisrovi)

Top comments (0)