Esta guía te muestra cómo configurar un clúster Citus simple usando Docker Compose, crear una tabla, distribuirla (sharding) y analizar cómo se ejecutan las consultas.
Prerrequisitos:
- Docker instalado.
- Docker Compose instalado.
- El archivo
docker-compose.ymldel repositorio
Abre una terminal en el directorio donde guardaste el archivo docker-compose.yml y ejecuta:
docker-compose upAhora en otra terminar verificamos que los contenedores se hayan creado
docker psdocker exec -it postgres_sharding-coordinator-1 psql -U postgresDentro de psql, ejecutamos el siguiente comando para asegur de que el coordinador ve a los nodos worker que se añadieron automáticamente por el script de inicio:
SELECT * FROM citus_get_active_worker_nodes();Creamos la tabla que vamos a distribuir. Nota la clave primaria compuesta, es necesaria para las tablas distribuidas en Citus:
CREATE TABLE activity_log (
log_id BIGSERIAL,
user_id INT NOT NULL,
action_description VARCHAR(255),
log_timestamp TIMESTAMPTZ DEFAULT NOW(),
PRIMARY KEY (user_id, log_id)
);Ahora, le decimos a Citus que distribuya la tabla activity_log basándose en los valores de la columna user_id:
SELECT create_distributed_table('activity_log', 'user_id');Insertamos algunas filas en la tabla distribuida. Nos conectamos al coordinador, pero Citus enrutará cada fila al worker apropiado según el user_id`:
INSERT INTO activity_log (user_id, action_description) VALUES
(1, 'Logged in'),
(2, 'Viewed dashboard'),
(1, 'Updated profile'),
(3, 'Posted a comment'),
(2, 'Logged out');Usamos EXPLAIN ANALYZE para ver cómo Citus planifica y ejecuta consultas que filtran por la columna de distribución (user_id). Esto nos muestra la eficiencia del sharding y con que worker esta trabajando.
Primero, analizamos una consulta para user_id = 1:
EXPLAIN ANALYZE SELECT * FROM activity_log WHERE user_id = 1;Ahora, hacemos lo mismo para user_id = 2:
EXPLAIN ANALYZE SELECT * FROM activity_log WHERE user_id = 2;