zl程序教程

您现在的位置是:首页 >  Java

当前栏目

客快物流大数据项目(九十):ClickHouse的引擎介绍和深入日志引擎讲解

2023-02-18 16:38:00 时间

​ClickHouse的引擎介绍和深入日志引擎讲解

一、引擎介绍

ClickHouse提供了多种不同的表引擎,表引擎可以简单理解为不同类型的表。

表引擎(即表的类型)决定了:

  • 数据的存储方式和位置,写到哪里以及从哪里读取数据
  • 支持哪些查询以及如何支持
  • 并发数据访问
  • 索引的使用(如果存在)
  • 是否可以执行多线程请求
  • 数据复制参数

下面介绍其中几种,对其他引擎有兴趣的可以去查阅官方文档:

https://clickhouse.tech/docs/zh/engines/table-engines

二、日志引擎

​​​​​​​1、TinyLog引擎

最简单的表引擎,用于将数据存储在磁盘上。每列都存储在单独的压缩文件中,写入时,数据将附加到文件末尾。

该引擎没有并发控制

  • 如果同时从表中读取和写入数据,则读取操作将抛出异常;
  • 如果同时写入多个查询中的表,则数据将被破坏。

这种表引擎的典型用法是 write-once:首先只写入一次数据,然后根据需要多次读取。此引擎适用于相对较小的表(建议最多1,000,000行)。如果有许多小表,则使用此表引擎是适合的,因为它比需要打开的文件更少。当拥有大量小表时,可能会导致性能低下。不支持索引。

案例:创建一个TinyLog引擎的表并插入一条数据

create table user (id UInt16, name String) ENGINE=TinyLog;
insert into user (id, name) values (1, 'zhangsan');

此时我们到保存数据的目录/var/lib/clickhouse/data/default/user中可以看到如下目录结构:

id.bin 和 name.bin 是压缩过的对应的列的数据,sizes.json 中记录了每个 *.bin 文件的大小: