Que sont les parts de table dans ClickHouse ?
Les données de chaque table de la famille de moteurs MergeTree de ClickHouse sont organisées sur disque sous forme d’une collection de
data parts immuables.
Pour l’illustrer, nous utilisons cette table (adaptée du jeu de données sur les prix de l’immobilier au Royaume-Uni) qui recense la date, la ville, la rue et le prix des biens vendus au Royaume-Uni :
Lorsqu’un serveur ClickHouse traite l’exemple d’insertion avec 4 lignes (par ex. via une instruction INSERT INTO) illustré dans le schéma ci-dessus, il effectue plusieurs étapes :
1
Tri
Les lignes sont triées selon la clé de tri de la table
(town, street), et un index primaire sparse est généré pour les lignes triées.2
Découpage
Les données triées sont réparties en colonnes.
3
Compression
Chaque colonne est compressée.
4
Écriture sur disque
Les colonnes compressées sont enregistrées sous forme de fichiers binaires de colonnes dans un nouveau répertoire représentant la data part de l’insertion. L’index primaire sparse est également compressé et stocké dans le même répertoire.
Fusions de parts
Pour réduire au minimum le nombre de parts initiales et le surcoût des fusions, les clients de base de données sont encouragés soit à insérer des tuples en bloc, par exemple 20 000 lignes à la fois, soit à utiliser le mode d’insert asynchrone, dans lequel ClickHouse met en tampon les lignes de plusieurs INSERT vers la même table et ne crée une nouvelle part qu’une fois que la taille du tampon dépasse un seuil configurable ou qu’un timeout expire.
Surveillance des parts de table
_part: