Moteur de table ClickHouse (deux) Série Log

Le moteur Log a été développé pour les scénarios dans lesquels de nombreuses tables contenant une petite quantité de données (moins d'un million de lignes) doivent être écrites. Le scénario de requête de données auquel sont confrontés est également relativement simple, et il est souvent écrit sur plusieurs requêtes à la fois, le moteur de table de la série de familles de journaux sera un bon choix.

Points communs: les
données sont stockées sur le disque. S'il s'agit d'un système Linux, les E / S directes sont utilisées.
Les données sont ajoutées à la fin du fichier lors de l'écriture.
Ne prend pas en charge les opérations de mutation, c'est-à-dire ne prend pas en charge les opérations de mise à jour et de suppression.
Les index ne sont pas pris en charge.

Cela signifie que SELECTdans la plage de l'efficacité des requêtes n'est pas élevée.
Écrivez les données de manière non atomique.
Si quelque chose interrompt l'opération d'écriture, comme un arrêt anormal du serveur, vous obtiendrez une table contenant des données corrompues.

Différentiée
Log et StripeLog support moteur

Verrouille pour un accès simultané aux données.
INSERTLa table sera verrouillée pendant l'exécution de la requête, et les autres requêtes de lecture et d'écriture de données attendront jusqu'à ce que le verrou soit libéré. S'il n'y a pas de demande d'écriture de données, n'importe quel nombre de demandes de lecture peut être exécuté simultanément.
Lisez les données en parallèle.
Lors de la lecture des données, ClickHouse utilise plusieurs threads. Chaque thread traite un bloc de données différent.
Performances de bas en haut: TinyLog -> StripeLog -> Log

Résumé
TinyLog: ne prend pas en charge la lecture simultanée des fichiers de données et les performances de la requête sont médiocres; le format est simple et adapté au stockage temporaire de données intermédiaires.
StripLog: prend en charge la lecture simultanée des fichiers de données et les performances des requêtes sont meilleures que TinyLog; toutes les colonnes sont stockées dans le même gros fichier, ce qui réduit le nombre de fichiers.
Journal: prend en charge la lecture simultanée des fichiers de données et les performances de la requête sont meilleures que TinyLog; chaque colonne sera stockée dans un fichier séparé.

Moteur de journalisation

#创建测试库、表
CREATE DATABASE test;
use test;

create table tb_test_Log(`id` Int64,`vipId` Int64,`brandId` Int32,`shopId` Int32, `saleDate` Datetime64,saleMoney Float32) engine = Log;
#查看表目录,但表目录是空的
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/
total 0
drwxr-x---. 2 clickhouse clickhouse   6 Mar 18 15:52 tb_test_Log
drwxr-x---. 2 clickhouse clickhouse  57 Mar 18 15:47 tb_test_StripeLog
drwxr-x---. 2 clickhouse clickhouse 133 Mar 18 15:38 tb_test_TinyLog
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/tb_test_Log/
total 0
#插入数据
insert into tb_test_Log values (10001,8001,429,6001,'2020-10-01 14:15:23',200.50);


SELECT *
FROM tb_test_Log

┌────id─┬─vipId─┬─brandId─┬─shopId─┬────────────────saleDate─┬─saleMoney─┐
│ 10001800142960012020-10-01 14:15:23.000200.5 │
└───────┴───────┴─────────┴────────┴─────────────────────────┴───────────┘

[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/tb_test_Log/
total 32
-rw-r-----. 1 clickhouse clickhouse  30 Mar 18 15:54 brandId.bin
-rw-r-----. 1 clickhouse clickhouse  34 Mar 18 15:54 id.bin
-rw-r-----. 1 clickhouse clickhouse  96 Mar 18 15:54 __marks.mrk
-rw-r-----. 1 clickhouse clickhouse  34 Mar 18 15:54 saleDate.bin
-rw-r-----. 1 clickhouse clickhouse  30 Mar 18 15:54 saleMoney.bin
-rw-r-----. 1 clickhouse clickhouse  30 Mar 18 15:54 shopId.bin
-rw-r-----. 1 clickhouse clickhouse 217 Mar 18 15:54 sizes.json
-rw-r-----. 1 clickhouse clickhouse  34 Mar 18 15:54 vipId.bin

Le moteur de table de journal est le moteur de table le plus performant de la série de familles de journaux.

La structure de stockage du moteur de table Log est composée de trois parties:
Fichier de données [Columns] .bin, le fichier de données est stocké indépendamment selon la colonne et chaque champ de colonne a un fichier bin correspondant.

_marks.mrk: fichier de marque de données, qui enregistre uniformément les informations de localisation des données dans chaque fichier [colonne] .bin. À l'aide de marques de données, plusieurs threads peuvent être utilisés pour lire les blocs de données compressés dans le fichier bin de manière parallèle, améliorant ainsi les performances des requêtes de données.

size.json: fichier de métadonnées, qui enregistre la taille de [colonne] .bin et _marks.mrk.

Log a la fonction de marquage des données et de stockage indépendant des données dans chaque colonne. Il peut prendre en charge les requêtes parallèles et lire les données par colonne, mais il nécessite également plus de descripteurs de fichiers que StripeLog.

insert into tb_test_Log values (10002,8002,429,6001,'2020-10-02 14:15:23',300.50),(10003,8001,429,6001,'2020-10-02 14:15:23',100.50);


select * from tb_test_Log;

┌────id─┬─vipId─┬─brandId─┬─shopId─┬────────────────saleDate─┬─saleMoney─┐
│ 10002800242960012020-10-02 14:15:23.000300.5 │
│ 10003800142960012020-10-02 14:15:23.000100.5 │
└───────┴───────┴─────────┴────────┴─────────────────────────┴───────────┘
┌────id─┬─vipId─┬─brandId─┬─shopId─┬────────────────saleDate─┬─saleMoney─┐
│ 10001800142960012020-10-01 14:15:23.000200.5 │
└───────┴───────┴─────────┴────────┴─────────────────────────┴───────────┘

```sql
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/tb_test_Log/
total 32
-rw-r-----. 1 clickhouse clickhouse  64 Mar 18 15:58 brandId.bin
-rw-r-----. 1 clickhouse clickhouse  74 Mar 18 15:58 id.bin
-rw-r-----. 1 clickhouse clickhouse 192 Mar 18 15:58 __marks.mrk
-rw-r-----. 1 clickhouse clickhouse  77 Mar 18 15:58 saleDate.bin
-rw-r-----. 1 clickhouse clickhouse  64 Mar 18 15:58 saleMoney.bin
-rw-r-----. 1 clickhouse clickhouse  64 Mar 18 15:58 shopId.bin
-rw-r-----. 1 clickhouse clickhouse 218 Mar 18 15:58 sizes.json
-rw-r-----. 1 clickhouse clickhouse  74 Mar 18 15:58 vipId.bin

On constate que les données insérées ultérieurement sont ajoutées à la fin de chaque fichier de champ. Aucun nouveau fichier ne sera ajouté.

Moteur TinyLog

# 建表 

CREATE TABLE tb_test_TinyLog
(
    `id` Int64, 
    `vipId` Int64, 
    `brandId` Int32, 
    `shopId` Int32, 
    `saleDate` Datetime64, 
    `saleMoney` Float32
)
ENGINE = TinyLog
#查看表目录,但表目录是空的
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/
total 0
drwxr-x---. 2 clickhouse clickhouse 6 Mar 18 15:28 tb_test_TinyLog
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/tb_test_TinyLog/
total 0
#插入数据
insert into tb_test_TinyLog values (10001,8001,429,6001,'2021-03-18 14:15:23',200.50);

SELECT * FROM tb_test_TinyLog

┌────id─┬─vipId─┬─brandId─┬─shopId─┬────────────────saleDate─┬─saleMoney─┐
│ 10001800142960012021-03-18 14:15:23.000200.5 │
└───────┴───────┴─────────┴────────┴─────────────────────────┴───────────┘
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/tb_test_TinyLog/
total 28
-rw-r-----. 1 clickhouse clickhouse  30 Mar 18 15:31 brandId.bin
-rw-r-----. 1 clickhouse clickhouse  34 Mar 18 15:31 id.bin
-rw-r-----. 1 clickhouse clickhouse  34 Mar 18 15:31 saleDate.bin
-rw-r-----. 1 clickhouse clickhouse  30 Mar 18 15:31 saleMoney.bin
-rw-r-----. 1 clickhouse clickhouse  30 Mar 18 15:31 shopId.bin
-rw-r-----. 1 clickhouse clickhouse 187 Mar 18 15:31 sizes.json
-rw-r-----. 1 clickhouse clickhouse  34 Mar 18 15:31 vipId.bin

[clickhouse@worker1 ~]$ cat  /var/lib/clickhouse/data/test/tb_test_TinyLog/sizes.json 
{
   
   "yandex":{
   
   "brandId%2Ebin":{
   
   "size":"30"},"id%2Ebin":{
   
   "size":"34"},"saleDate%2Ebin":{
   
   "size":"34"},"saleMoney%2Ebin":{
   
   "size":"30"},"shopId%2Ebin":{
   
   "size":"30"},"vipId%2Ebin":{
   
   "size":"34"}}}

On peut voir qu'il existe un fichier .bin compressé pour chaque champ, et que le fichier de démarrage sizes.json est un méta-fichier qui enregistre la taille du fichier .bin correspondant à chaque champ


```sql
#继续插入数据
insert into tb_test_TinyLog values (10002,8002,429,6001,'2021-03-18 14:18:23',300.50),(10003,8003,429,6001,'2021-03-18 14:18:23',400.50);

 select * from tb_test_TinyLog;
┌────id─┬─vipId─┬─brandId─┬─shopId─┬────────────────saleDate─┬─saleMoney─┐
│ 10001800142960012021-03-18 14:15:23.000200.5 │
│ 10002800242960012021-03-18 14:18:23.000300.5 │
│ 10003800342960012021-03-18 14:18:23.000400.5 │
└───────┴───────┴─────────┴────────┴─────────────────────────┴───────────┘

```sql
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/tb_test_TinyLog/
total 28
-rw-r-----. 1 clickhouse clickhouse  64 Mar 18 15:38 brandId.bin
-rw-r-----. 1 clickhouse clickhouse  74 Mar 18 15:38 id.bin
-rw-r-----. 1 clickhouse clickhouse  77 Mar 18 15:38 saleDate.bin
-rw-r-----. 1 clickhouse clickhouse  64 Mar 18 15:38 saleMoney.bin
-rw-r-----. 1 clickhouse clickhouse  64 Mar 18 15:38 shopId.bin
-rw-r-----. 1 clickhouse clickhouse 187 Mar 18 15:38 sizes.json
-rw-r-----. 1 clickhouse clickhouse  74 Mar 18 15:38 vipId.bin

[clickhouse@worker1 ~]$ cat  /var/lib/clickhouse/data/test/tb_test_TinyLog/sizes.json 
{"yandex":{"brandId%2Ebin":{"size":"64"},"id%2Ebin":{"size":"74"},"saleDate%2Ebin":{"size":"77"},"saleMoney%2Ebin":{"size":"64"},"shopId%2Ebin":{"size":"64"},"vipId%2Ebin":{"size":"74"}}}

On constate que les données insérées ultérieurement sont ajoutées à la fin de chaque fichier de champ. Aucun nouveau fichier ne sera ajouté.
TinyLog est le moteur de table le moins performant de la série de la famille de journaux. La structure de stockage se compose de deux parties: les fichiers de données et les métadonnées. Les fichiers de données sont stockés indépendamment selon les colonnes, c'est-à-dire que chaque champ de colonne a un fichier bin correspondant. TinyLog ne prend pas en charge les partitions, n'a pas de fichiers mrk et ne prend pas en charge les opérations de lecture parallèle des fichiers bin. Il ne convient que pour une utilisation dans des scénarios très simples.

Moteur StripLog

#创建表
CREATE TABLE tb_test_StripeLog
(
    `id` Int64, 
    `vipId` Int64, 
    `brandId` Int32, 
    `shopId` Int32, 
    `saleDate` Datetime64, 
    `saleMoney` Float32
)
ENGINE = StripeLog
# 查看建表目录
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/
total 0
drwxr-x---. 2 clickhouse clickhouse   6 Mar 18 15:42 tb_test_StripeLog
drwxr-x---. 2 clickhouse clickhouse 133 Mar 18 15:38 tb_test_TinyLog
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/tb_test_StripeLog/
total 0
# 插入数据
insert into tb_test_TinyLog values (10001,8001,429,6001,'2021-03-18 14:15:23',200.50);

SELECT * FROM tb_test_StripeLog

┌─id─┬─vipId─┬─brandId─┬─shopId─┬────────────────saleDate─┬─saleMoney─┐
│  1800142960012021-03-18 14:15:23.000200.5 │
└────┴───────┴─────────┴────────┴─────────────────────────┴───────────┘
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/tb_test_StripeLog/
total 12
-rw-r-----. 1 clickhouse clickhouse 314 Mar 18 15:44 data.bin
-rw-r-----. 1 clickhouse clickhouse 137 Mar 18 15:44 index.mrk
-rw-r-----. 1 clickhouse clickhouse  69 Mar 18 15:44 sizes.json

[clickhouse@worker1 ~]$ cat  /var/lib/clickhouse/data/test/tb_test_StripeLog/sizes.json 
{
   
   "yandex":{
   
   "data%2Ebin":{
   
   "size":"314"},"index%2Emrk":{
   
   "size":"137"}}}

① fichier de données data.bin, tous les champs de colonne sont enregistrés dans un seul fichier et leurs données seront écrites dans data.bin.

② index.mrk: fichier de balises de données, qui enregistre les informations de localisation des données dans le fichier data.bin. L'utilisation de balises de données peut utiliser plusieurs threads pour lire des blocs de données compressés dans data.bin de manière parallèle, améliorant ainsi les performances de la requête de données.

③ size.json: fichier de métadonnées, qui enregistre la taille de data.bin et index.mrk.

# 继续插入数据
insert into tb_test_StripeLog values (0002,8001,429,6001,'2021-03-18 14:15:23',200.50),(0003,8001,429,6001,'2021-03-18 14:15:23',400.50);

select * from tb_test_StripeLog;

┌─id─┬─vipId─┬─brandId─┬─shopId─┬────────────────saleDate─┬─saleMoney─┐
│  1800142960012021-03-18 14:15:23.000200.5 │
└────┴───────┴─────────┴────────┴─────────────────────────┴───────────┘
┌─id─┬─vipId─┬─brandId─┬─shopId─┬────────────────saleDate─┬─saleMoney─┐
│  2800142960012021-03-18 14:15:23.000200.5 │
│  3800142960012021-03-18 14:15:23.000400.5 │
└────┴───────┴─────────┴────────┴─────────────────────────┴───────────┘
[clickhouse@worker1 ~]$ ll /var/lib/clickhouse/data/test/tb_test_StripeLog/
total 12
-rw-r-----. 1 clickhouse clickhouse 658 Mar 18 15:47 data.bin
-rw-r-----. 1 clickhouse clickhouse 274 Mar 18 15:47 index.mrk
-rw-r-----. 1 clickhouse clickhouse  69 Mar 18 15:47 sizes.json`

On peut voir que l'insertion de données sera ajoutée au fichier de données data.bin.

Eh bien, ce qui précède est la situation de base du moteur Log. Le suivi des autres moteurs de table sera présenté dans la section suivante.

Pour un contenu plus passionnant, veuillez prêter attention au compte public WeChat

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45320660/article/details/115166214
conseillé
Classement