¿Cómo se replican los datos?
Decodificación lógica de PostgreSQL
ReplacingMergeTree
_peerdb_version) de la fila, mientras que las eliminaciones son inserciones con una versión más reciente y _peerdb_is_deleted establecido en true. El motor ReplacingMergeTree deduplica y fusiona los datos en segundo plano, y conserva la versión más reciente de la fila para una clave primaria determinada (id), lo que permite gestionar UPDATEs y DELETEs de forma eficiente como inserciones versionadas.
A continuación se muestra un ejemplo de una sentencia CREATE TABLE ejecutada por ClickPipes para crear la tabla en ClickHouse.
Ejemplo ilustrativo
users entre PostgreSQL y ClickHouse mediante ClickPipes.
Paso 1 muestra la instantánea inicial de las 2 filas en PostgreSQL y cómo ClickPipes realiza la carga inicial de esas 2 filas en ClickHouse. Como puede observar, ambas filas se copian tal cual en ClickHouse.
Paso 2 muestra tres operaciones en la tabla users: insertar una nueva fila, actualizar una fila existente y eliminar otra fila.
Paso 3 muestra cómo ClickPipes replica las operaciones INSERT, UPDATE y DELETE en ClickHouse como inserciones versionadas. UPDATE aparece como una nueva versión de la fila con ID 2, mientras que DELETE aparece como una nueva versión del ID 1 marcada como true mediante _is_deleted. Debido a esto, ClickHouse tiene tres filas más que PostgreSQL.
Como resultado, ejecutar una consulta sencilla como SELECT count(*) FROM users; puede producir resultados distintos en ClickHouse y PostgreSQL. Según la documentación de ClickHouse sobre merges, las versiones obsoletas de las filas acaban descartándose durante el proceso de merge. Sin embargo, el momento en que se produce este merge es impredecible, lo que significa que las consultas en ClickHouse pueden devolver resultados inconsistentes hasta que eso ocurra.
¿Cómo podemos garantizar resultados idénticos en las consultas tanto en ClickHouse como en PostgreSQL?
Deduplicar con la palabra clave FINAL
- Consulta simple de recuento: Cuente el número de publicaciones.
- Agregación simple con JOIN: Los 10 usuarios que han acumulado más vistas.
configuración FINAL
ROW policy
_peerdb_is_deleted = 0 es usar ROW policy. A continuación se muestra un ejemplo que crea una política de filas para excluir las filas eliminadas de todas las consultas sobre la tabla votes.
Las políticas de fila se aplican a una lista de usuarios y roles. En este ejemplo, se aplican a todos los usuarios y roles. Esto puede ajustarse para aplicarlas solo a usuarios o roles específicos.
Consultar como en Postgres
Vistas
Vista materializada actualizable
deduplicated_posts con normalidad.