Couche de stockage : les insertions concurrentes sont isolées les unes des autres
Couche de stockage : les insertions et les requêtes SELECT concurrentes sont isolées
Couche de stockage : calcul lors de la fusion
- Fusions de remplacement qui ne conservent que la version la plus récente d’une ligne dans les parties d’entrée et écartent toutes les autres versions de cette ligne. Les fusions de remplacement peuvent être considérées comme une opération de nettoyage lors de la fusion.
- Fusions d’agrégation qui combinent les états d’agrégation intermédiaires de la partie d’entrée en un nouvel état d’agrégation. Même si cela semble difficile à comprendre, cela ne fait en réalité qu’implémenter une agrégation incrémentale.
- Fusions TTL (time-to-live) qui compressent, déplacent ou suppriment des lignes selon certaines règles temporelles.
Couche de stockage : pruning des données
- Les index de clé primaire, qui définissent l’ordre de tri des données de la table. Une clé primaire bien choisie permet d’évaluer les filtres (comme les clauses WHERE dans la requête ci-dessus) au moyen de recherches binaires rapides plutôt que de balayages complets de colonnes. En termes plus techniques, le temps d’exécution des balayages devient logarithmique au lieu d’être linéaire par rapport à la taille des données.
- Les projections de table, c’est-à-dire des versions internes alternatives d’une table, qui stockent les mêmes données mais triées selon une clé primaire différente. Les projections peuvent être utiles lorsqu’il existe plusieurs conditions de filtre fréquentes.
- Les index de saut de données, qui intègrent dans les colonnes des statistiques de données supplémentaires, par ex. les valeurs minimale et maximale d’une colonne, l’ensemble des valeurs uniques, etc. Les index de saut de données sont orthogonaux aux clés primaires et aux projections de table et, selon la distribution des données dans la colonne, ils peuvent considérablement accélérer l’évaluation des filtres.
Couche de stockage : compression des données
Couche de traitement des requêtes de pointe
Une attention méticuleuse au moindre détail
“ClickHouse est un système hors norme : vous avez 20 versions d’une table de hachage. Vous avez toutes ces choses incroyables, là où la plupart des systèmes n’ont qu’une seule table de hachage … ClickHouse atteint ces performances exceptionnelles parce qu’il dispose de tous ces composants spécialisés” Andy Pavlo, professeur de bases de données à la CMUCe qui distingue ClickHouse des autres, c’est le soin méticuleux apporté à l’optimisation de bas niveau. Concevoir une base de données qui fonctionne, c’est une chose ; l’architecturer pour qu’elle soit rapide sur une grande variété de types de requêtes, de structures de données, de distributions et de configurations d’index, c’est là que s’exprime tout l’art du “système hors norme”. Tables de hachage. Prenons une table de hachage comme exemple. Les tables de hachage sont des structures de données fondamentales utilisées pour les jointures et les agrégations. En tant que programmeur, il faut prendre en compte les choix de conception suivants :
- La fonction de hachage à utiliser,
- La résolution des collisions : adressage ouvert ou chaînage,
- L’organisation en mémoire : un seul tableau pour les clés et les valeurs, ou des tableaux séparés ?
- Le facteur de remplissage : quand et comment redimensionner ? Comment déplacer les valeurs lors du redimensionnement ?
- Les suppressions : la table de hachage doit-elle permettre l’éviction d’entrées ?
- Qu’est-ce qui va être trié : des nombres, des tuples, des chaînes de caractères ou des structures ?
- Les données sont-elles en RAM ?
- Le tri doit-il être stable ?
- Faut-il trier toutes les données ou un tri partiel suffit-il ?