Ce moteur appartient à la famille des moteurs Log. Voir Famille de moteurs Log pour les propriétés communes des moteurs Log et leurs différences.
Ce moteur de table est généralement utilisé selon une approche d’écriture unique : écrire les données une seule fois, puis les lire autant de fois que nécessaire. Par exemple, vous pouvez utiliser des tables de type TinyLog pour des données intermédiaires traitées par petits lots. Notez qu’il est inefficace de stocker des données dans un grand nombre de petites tables.
Les requêtes sont exécutées dans un seul flux. Autrement dit, ce moteur est destiné à des tables relativement petites (jusqu’à environ 1 000 000 de lignes). Il est judicieux d’utiliser ce moteur de table si vous avez de nombreuses petites tables, car il est plus simple que le moteur Log (moins de fichiers doivent être ouverts).
Caractéristiques
- Structure plus simple : contrairement au moteur Log, TinyLog n'utilise pas de fichiers de marks. Cela réduit la complexité, mais limite aussi les optimisations de performances pour les grands jeux de données.
- Requêtes sur un seul flux : les requêtes sur les tables TinyLog sont exécutées sur un seul flux, ce qui le rend adapté à des tables relativement petites, généralement jusqu'à 1 000 000 de lignes.
- Efficace pour les petites tables : la simplicité du moteur TinyLog en fait un bon choix pour gérer de nombreuses petites tables, car il nécessite moins d'opérations sur les fichiers que le moteur Log.
Contrairement au moteur Log, TinyLog n'utilise pas de fichiers de marks. Cela réduit la complexité, mais limite aussi les optimisations de performances pour les jeux de données plus volumineux.
Créer une table
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = TinyLogConsultez la description détaillée de la requête CREATE TABLE.
Écriture des données
Le moteur TinyLog stocke toutes les colonnes dans un seul fichier. Pour chaque requête INSERT, ClickHouse ajoute le bloc de données à la fin du fichier de la table, en écrivant les colonnes une par une.
Pour chaque table, ClickHouse écrit les fichiers suivants :
<column>.bin: un fichier de données pour chaque colonne, contenant les données sérialisées et compressées.
Le moteur TinyLog ne prend pas en charge les opérations ALTER UPDATE et ALTER DELETE.
Exemple d’utilisation
Création d’une table :
CREATE TABLE tiny_log_table
(
timestamp DateTime,
message_type String,
message String
)
ENGINE = TinyLogInsertion de données :
INSERT INTO tiny_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO tiny_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')Nous avons utilisé deux requêtes INSERT pour créer deux blocs de données dans les fichiers <column>.bin.
ClickHouse utilise un seul flux pour sélectionner les données. Par conséquent, l’ordre des blocs de lignes en sortie correspond à l’ordre de ces mêmes blocs en entrée. Par exemple :
SELECT * FROM tiny_log_table┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2024-12-10 13:11:58 │ REGULAR │ The first regular message │
│ 2024-12-10 13:12:12 │ REGULAR │ The second regular message │
│ 2024-12-10 13:12:12 │ WARNING │ The first warning message │
└─────────────────────┴──────────────┴────────────────────────────┘