Capa de almacenamiento: las inserciones concurrentes están aisladas entre sí
Capa de almacenamiento: las inserciones y las consultas SELECT concurrentes están aisladas
Capa de almacenamiento: cómputo durante el merge
- Los merges de reemplazo conservan solo la versión más reciente de una fila en las partes de entrada y descartan todas las demás versiones de esa fila. Los merges de reemplazo pueden entenderse como una operación de limpieza durante el merge.
- Los merges de agregación combinan los estados intermedios de agregación de la parte de entrada en un nuevo estado de agregación. Aunque esto pueda parecer difícil de entender, en realidad no es más que una agregación incremental.
- Los merges TTL (time-to-live) comprimen, mueven o eliminan filas según determinadas reglas basadas en el tiempo.
Capa de almacenamiento: poda de datos
- Índices de clave primaria, que definen el orden de los datos de la tabla. Una clave primaria bien elegida permite evaluar filtros (como las cláusulas WHERE de la consulta anterior) mediante búsquedas binarias rápidas en lugar de lecturas completas de columnas. En términos más técnicos, el tiempo de ejecución de estas lecturas pasa a ser logarítmico en lugar de lineal con respecto al tamaño de los datos.
- Proyecciones de tabla, como versiones internas alternativas de una tabla, que almacenan los mismos datos pero ordenados por una clave primaria distinta. Las proyecciones pueden ser útiles cuando hay más de una condición de filtro frecuente.
- Índices de omisión, que incorporan estadísticas de datos adicionales en las columnas; p. ej., el valor mínimo y máximo de la columna, el conjunto de valores únicos, etc. Los índices de omisión son ortogonales a las claves primarias y a las proyecciones de tabla y, según la distribución de los datos en la columna, pueden acelerar enormemente la evaluación de filtros.
Capa de almacenamiento: compresión de datos
Capa de procesamiento de consultas de última generación
Atención meticulosa al detalle
“ClickHouse es un sistema fuera de lo común: ustedes tienen 20 versiones de una tabla hash. Tienen todas estas cosas increíbles, cuando la mayoría de los sistemas tendrían una sola tabla hash … ClickHouse tiene este rendimiento increíble porque cuenta con todos estos componentes especializados” Andy Pavlo, profesor de bases de datos en CMULo que distingue a ClickHouse del resto es su atención meticulosa a la optimización de bajo nivel. Construir una base de datos que simplemente funcione es una cosa, pero diseñarla para ofrecer velocidad en una amplia variedad de tipos de consulta, estructuras de datos, distribuciones y configuraciones de índices es donde brilla la maestría de ese “sistema fuera de lo común”. Tablas hash. Tomemos una tabla hash como ejemplo. Las tablas hash son estructuras de datos fundamentales utilizadas por joins y agregaciones. Como programador, hay que considerar estas decisiones de diseño:
- Qué función hash elegir,
- Cómo resolver las colisiones: direccionamiento abierto o encadenamiento,
- La disposición en memoria: ¿un array para claves y valores o arrays separados?
- El factor de llenado: ¿cuándo y cómo redimensionar? ¿Cómo mover los valores durante el redimensionamiento?
- Eliminaciones: ¿debería la tabla hash permitir expulsar entradas?
- ¿Qué se va a ordenar: números, tuplas, cadenas o estructuras?
- ¿Los datos están en RAM?
- ¿Se requiere que la ordenación sea estable?
- ¿Debe ordenarse toda la información o bastará con una ordenación parcial?