Postgres vs ClickHouse: Conceptos equivalentes y diferentes
INSERT, UPDATE y DELETE. Aunque la replicación física puede ofrecer resultados similares, la replicación lógica aporta más flexibilidad para replicar tablas y operaciones concretas, así como para realizar transformaciones de datos y dar soporte a distintas versiones de Postgres.
En cambio, los segmentos y las réplicas de ClickHouse son dos conceptos clave relacionados con la distribución de datos y la redundancia. Las réplicas de ClickHouse pueden considerarse análogas a las réplicas de Postgres, aunque la replicación tiene consistencia eventual y no existe la noción de un primario. El sharding, a diferencia de Postgres, sí está soportado de forma nativa.
Un segmento es una parte de los datos de una tabla. Siempre hay al menos un segmento. Distribuir los datos entre varios servidores puede servir para repartir la carga si se supera la capacidad de un único servidor, usando todos los segmentos para ejecutar una consulta en paralelo. Puede crear manualmente segmentos para una tabla en distintos servidores e insertar datos directamente en ellos. Como alternativa, puede utilizarse una tabla distribuida con una clave de sharding que defina a qué segmento se enrutan los datos. La clave de sharding puede ser aleatoria o el resultado de una función hash. Es importante destacar que un segmento puede constar de varias réplicas.
Una réplica es una copia de los datos. ClickHouse siempre tiene al menos una copia de los datos, por lo que el número mínimo de réplicas es uno. Añadir una segunda réplica de los datos proporciona tolerancia a fallos y, potencialmente, capacidad de cómputo adicional para procesar más consultas (Parallel Replicas también puede usarse para distribuir la capacidad de cómputo de una sola consulta y así reducir la latencia). Las réplicas se consiguen con el motor de tablas ReplicatedMergeTree, que permite a ClickHouse mantener varias copias de los datos sincronizadas entre distintos servidores. La replicación es física: solo se transfieren partes comprimidas entre nodos, no consultas.
En resumen, una réplica es una copia de los datos que aporta redundancia y fiabilidad (y potencialmente procesamiento distribuido), mientras que un segmento es un subconjunto de datos que permite el procesamiento distribuido y el equilibrio de carga.
ClickHouse Cloud usa una única copia de los datos respaldada en S3 con varias réplicas de cómputo. Los datos están disponibles para cada nodo réplica, cada uno de los cuales tiene una caché local en SSD. Esto depende únicamente de la replicación de metadatos a través de ClickHouse Keeper.
Consistencia eventual
Implicaciones para el usuario
Recomendaciones
Enrutamiento coherente
ClickHouse Cloud
Contacte con soporte para obtener acceso a sticky endpoints.
ClickHouse OSS
session_id o user_id. Los ajustes prefer_localhost_replica=0, load_balancing=in_order deben establecerse en la consulta. Esto garantizará que se prioricen las réplicas locales de los segmentos y, en caso contrario, que las réplicas se prioricen en el orden en que aparecen en la configuración, siempre que tengan el mismo número de errores; si el número de errores es mayor, la conmutación por error se realizará con selección aleatoria. load_balancing=nearest_hostname también puede usarse como alternativa para esta selección determinista de segmentos.
Al crear una tabla distribuida, especificarás un cluster. Esta definición del cluster, especificada en config.xml, enumerará los segmentos (y sus réplicas), lo que permite a los usuarios controlar el orden en que se usan desde cada nodo. Con ello, puedes asegurarte de que la selección sea determinista.
Consistencia secuencial
- Leer/escribir en el mismo nodo - Si estás usando el protocolo nativo, o una sesión para realizar la escritura/lectura a través de HTTP, deberías estar conectado a la misma réplica: en este escenario, estás leyendo directamente desde el nodo en el que escribes, por lo que la lectura siempre será coherente.
- Sincronizar réplicas manualmente - Si escribes en una réplica y lees desde otra, puedes ejecutar
SYSTEM SYNC REPLICA LIGHTWEIGHTantes de leer. - Habilitar la consistencia secuencial - mediante la configuración de consulta
select_sequential_consistency = 1. En OSS, también debe especificarse la configuracióninsert_quorum = 'auto'.
Consulta aquí para obtener más detalles sobre cómo habilitar estas configuraciones.
El uso de la consistencia secuencial aumentará la carga sobre ClickHouse Keeper. Como resultado, puede haber inserciones y lecturas más lentas. SharedMergeTree, que se usa en ClickHouse Cloud como principal motor de tablas, hace que la consistencia secuencial genere menos sobrecarga y escale mejor. En OSS, debes usar este enfoque con precaución y medir la carga de Keeper.
Compatibilidad transaccional (ACID)
Compresión
Query (Postgres)
Query (ClickHouse)
Response