Este artículo analiza en profundidad el PR #8587 del proyecto GreptimeDB, una reescritura en Rust de la función recordbatches_to_timeseries que convierte datos columnares en series temporales para el protocolo Prometheus remote read. El autor parte de un dato alarmante del perfil de CPU incluido por el committer @lyang24: con 300 000 series y 4 lecturas concurrentes, la conversión consumía el 36,2 % de la CPU sin tocar disco ni descomprimir. Para verificar la ganancia real, desarrolla un benchmark con criterion sobre el punto de entrada público, iterando codificación (Utf8 y Dictionary), ordenación (adyacente e intercalada) y tamaños. Los resultados previos al cambio muestran 3,7 ms para 10 000 filas y 44 ms para 100 000, con unos 3 millones de filas por segundo; tras el cambio, los mejores casos superan la mejora de 10x prometida.
El recorrido continúa explicando el funcionamiento interno del código original: collect_timeseries_ids materializaba todas las columnas como cadenas, construía un Vec propio por cada fila y obligaba a implementaciones manuales de PartialEq, Eq, Hash y Ord sobre TimeSeriesId porque el tipo Label generado por protobuf no las ofrece. Esa combinación de alocaciones, clonados y comparaciones encadenadas explicaba el coste desproporcionado. La optimización del PR reorganiza el agrupamiento para evitar el materializado completo y las comparaciones fila a fila, apoyándose en las garantías de igualdad que ya ofrece Dictionary. La conclusión es didáctica: documenta paso a paso cómo un único archivo bien reescrito puede multiplicar por diez el rendimiento de una ruta crítica en una base de datos de series temporales de código abierto.
