Ce moteur appartient à la famille des moteurs Log. Consultez l’article Famille de moteurs Log pour connaître les propriétés communes des moteurs Log ainsi que leurs différences.
Log diffère de TinyLog par la présence d’un petit fichier de « marks » avec les fichiers de colonnes. Ces marks sont écrites pour chaque bloc de données et contiennent des offsets indiquant à partir de quel emplacement commencer la lecture du fichier afin d’ignorer le nombre de lignes spécifié. Cela permet de lire les données de la table à l’aide de plusieurs threads.
En cas d’accès concurrent aux données, les opérations de lecture peuvent être effectuées simultanément, tandis que les opérations d’écriture bloquent les lectures ainsi que les autres écritures.
Le moteur Log ne prend pas en charge les index. De même, si l’écriture dans une table échoue, la table est corrompue et sa lecture renvoie une erreur. Le moteur Log convient aux données temporaires, aux tables écrites une seule fois, ainsi qu’aux tests ou aux démonstrations.
Consultez la description détaillée de l’instruction CREATE TABLE.
Le moteur Log stocke efficacement les données en écrivant chaque colonne dans son propre fichier. Pour chaque table, le moteur Log écrit les fichiers suivants dans l’emplacement de stockage spécifié :
<column>.bin : un fichier de données pour chaque colonne, contenant les données sérialisées et compressées.
__marks.mrk : un fichier de marks, qui stocke les offsets et le nombre de lignes pour chaque bloc de données inséré. Les marks facilitent l’exécution efficace des requêtes en permettant au moteur d’ignorer les blocs de données non pertinents lors de la lecture.
Lorsque des données sont écrites dans une table Log :
- Les données sont sérialisées et compressées en blocs.
- Pour chaque colonne, les données compressées sont ajoutées à la fin du fichier
<column>.bin correspondant.
- Les entrées correspondantes sont ajoutées au fichier
__marks.mrk afin d’enregistrer l’offset et le nombre de lignes des données nouvellement insérées.
Le fichier de marks permet à ClickHouse de paralléliser la lecture des données. Cela signifie qu’une requête SELECT renvoie des lignes dans un ordre imprévisible. Utilisez la clause ORDER BY pour trier les lignes.
Création d’une table :
Insertion de données :
Nous avons utilisé deux requêtes INSERT pour créer deux blocs de données dans les fichiers <column>.bin.
ClickHouse utilise plusieurs threads lors de la lecture des données. Chaque thread lit un bloc de données distinct et renvoie les lignes obtenues indépendamment, dès qu’il a terminé. Par conséquent, l’ordre des blocs de lignes dans la sortie peut ne pas correspondre à celui de ces mêmes blocs dans l’entrée. Par exemple :
Tri des résultats (par ordre croissant par défaut) :
Dernière modification le 3 juillet 2026