Este tema no se aplica a ClickHouse Cloud, donde Parallel Replicas funcionan como múltiples segmentos en los clústeres tradicionales shared-nothing de ClickHouse, y el almacenamiento de objetos sustituye a las réplicas, lo que garantiza alta disponibilidad y tolerancia a fallos.
¿Qué son los segmentos de una tabla en ClickHouse?
En ese caso, los datos pueden dividirse entre varios servidores ClickHouse en forma de segmentos de tabla:
Cada segmento contiene un subconjunto de los datos y funciona como una tabla normal de ClickHouse que puede consultarse de forma independiente. Sin embargo, las consultas solo procesarán ese subconjunto, lo que puede ser un caso de uso válido según la distribución de los datos. Normalmente, una tabla distribuida (a menudo una por servidor) proporciona una vista unificada del conjunto completo de datos. No almacena los datos por sí misma, sino que reenvía las consultas SELECT a todos los segmentos, recopila los resultados y enruta las operaciones INSERT para distribuir los datos de manera uniforme.
Creación de una tabla distribuida
ON CLUSTER convierte la sentencia DDL en una sentencia DDL distribuida, lo que indica a ClickHouse que cree la tabla en todos los servidores incluidos en la definición del clúster test_cluster. El DDL distribuido requiere un componente adicional de Keeper en la arquitectura del clúster.
Para los parámetros del motor Distributed, especificamos el nombre del clúster (test_cluster), el nombre de la base de datos (uk) de la tabla de destino segmentada, el nombre de esa tabla de destino segmentada (uk_price_paid_simple) y la clave de segmentación para el enrutamiento de INSERT. En este ejemplo, usamos la función rand para asignar filas a los segmentos de forma aleatoria. Sin embargo, cualquier expresión, incluso compleja, puede usarse como clave de segmentación, según el caso de uso. La siguiente sección muestra cómo funciona el enrutamiento de INSERT.
Enrutamiento de INSERT
① Un INSERT (con una sola fila) dirigido a la tabla distribuida se envía a un servidor de ClickHouse que aloja la tabla, ya sea directamente o a través de un balanceador de carga. ② Para cada fila del INSERT (solo una en nuestro ejemplo), ClickHouse evalúa la clave de segmentación (aquí, rand()), calcula el resultado módulo el número de servidores de segmento y lo usa como ID del servidor de destino (los ID empiezan en 0 y se incrementan de 1 en 1). Después, la fila se reenvía y ③ se inserta en el segmento de tabla del servidor correspondiente. La siguiente sección explica cómo funciona el reenvío de SELECT.
Reenvío de SELECT
① Una consulta SELECT de agregación dirigida a la tabla distribuida se envía al servidor de ClickHouse correspondiente, ya sea directamente o a través de un balanceador de carga. ② La tabla distribuida reenvía la consulta a todos los servidores que alojan segmentos de la tabla de destino, donde cada servidor de ClickHouse calcula su resultado de agregación local en paralelo. A continuación, el servidor de ClickHouse que aloja la tabla distribuida a la que se dirigió inicialmente ③ recopila todos los resultados locales, ④ los combina en el resultado global final y ⑤ lo devuelve al emisor de la consulta.
¿Qué son las réplicas de tabla en ClickHouse?
Shard-1 y Shard-2 introducidos anteriormente tienen cada uno tres réplicas. Se envía una consulta a este clúster:
El procesamiento de consultas funciona de forma similar a las configuraciones sin réplicas, y solo una réplica de cada segmento ejecuta la consulta.
Las réplicas no solo garantizan la integridad de los datos y la conmutación por error, sino que también mejoran el rendimiento del procesamiento de consultas al permitir que varias consultas se ejecuten en paralelo en distintas réplicas.① Se envía una consulta dirigida a la tabla distribuida al servidor de ClickHouse correspondiente, ya sea directamente o a través de un balanceador de carga. ② La tabla distribuida reenvía la consulta a una réplica de cada segmento, donde cada servidor de ClickHouse que aloja la réplica seleccionada calcula en paralelo el resultado de su consulta local. El resto funciona igual que en las configuraciones sin réplicas y no se muestra en el diagrama anterior. El servidor de ClickHouse que aloja la tabla distribuida a la que se dirigió inicialmente la consulta recopila todos los resultados locales, los fusiona en el resultado global final y se lo devuelve a quien envió la consulta. Tenga en cuenta que ClickHouse permite configurar la estrategia de reenvío de consultas para ②. De forma predeterminada, a diferencia de lo que se muestra en el diagrama anterior, la tabla distribuida prefiere una réplica local si está disponible, pero también pueden usarse otras estrategias.