Comment les données sont-elles répliquées ?
Décodage logique de PostgreSQL
ReplacingMergeTree
UPDATE fréquents. C’est là que ReplacingMergeTree est particulièrement puissant.
Avec ReplacingMergeTree, les mises à jour sont modélisées comme des inserts avec une version plus récente (_peerdb_version) de la ligne, tandis que les suppressions sont des inserts avec une version plus récente et _peerdb_is_deleted défini sur true. Le moteur ReplacingMergeTree dédoublonne/fusionne les données en arrière-plan et conserve la version la plus récente de la ligne pour une clé primaire (id) donnée, ce qui permet de gérer efficacement les UPDATE et DELETE sous forme d’inserts versionnés.
Vous trouverez ci-dessous un exemple d’instruction CREATE TABLE exécutée par ClickPipes pour créer la table dans ClickHouse.
Exemple illustratif
users entre PostgreSQL et ClickHouse à l’aide de ClickPipes.
Étape 1 montre l’instantané initial des 2 lignes dans PostgreSQL, puis ClickPipes effectuant le chargement initial de ces 2 lignes vers ClickHouse. Comme vous pouvez l’observer, les deux lignes sont copiées telles quelles dans ClickHouse.
Étape 2 montre trois opérations sur la table users : l’insertion d’une nouvelle ligne, la mise à jour d’une ligne existante et la suppression d’une autre ligne.
Étape 3 montre comment ClickPipes réplique les opérations INSERT, UPDATE et DELETE vers ClickHouse sous forme d’insertions versionnées. L’UPDATE apparaît comme une nouvelle version de la ligne avec l’ID 2, tandis que le DELETE apparaît comme une nouvelle version de l’ID 1, marquée comme true à l’aide de _is_deleted. En conséquence, ClickHouse contient trois lignes supplémentaires par rapport à PostgreSQL.
Par conséquent, l’exécution d’une requête simple comme SELECT count(*) FROM users; peut produire des résultats différents dans ClickHouse et PostgreSQL. Selon la documentation ClickHouse sur les fusions, les versions obsolètes des lignes sont finalement supprimées pendant le processus de fusion. Cependant, le moment où cette fusion se produit est imprévisible, ce qui signifie que les requêtes dans ClickHouse peuvent renvoyer des résultats incohérents jusqu’à ce qu’elle ait lieu.
Comment garantir des résultats de la requête identiques dans ClickHouse et PostgreSQL ?
Dédupliquer à l’aide du mot-clé FINAL
- Requête de comptage simple : comptez le nombre de posts.
- Agrégation simple avec JOIN : les 10 utilisateurs ayant cumulé le plus de vues.
paramètre FINAL
ROW policy
_peerdb_is_deleted = 0 consiste à utiliser une ROW policy. Vous trouverez ci-dessous un exemple qui crée une ROW policy afin d’exclure les lignes supprimées de toutes les queries sur la table votes.
Les politiques au niveau des lignes s’appliquent à une liste d’utilisateurs et de rôles. Dans cet exemple, elles s’appliquent à tous les utilisateurs et rôles. Ce paramètre peut être ajusté pour ne s’appliquer qu’à certains utilisateurs ou rôles.
Interroger comme dans Postgres
Vues
Vue matérialisée actualisable
deduplicated_posts.