中关村在线

软件

ClickHouse表引擎详解

表引擎决定数据存储与处理方式

1、 采用最基础的表引擎,数据以列式存储于磁盘,每列独立压缩保存,写入操作直接追加至文件末尾。

2、 引擎缺乏并发管理机制

3、 当同时进行读写操作时,读取数据会引发异常。

4、 同时向多个查询中的表写入会导致数据损坏。

5、 该表引擎通常采用一次写入、多次读取的模式,适合处理规模较小的数据表,建议行数控制在一百万以内。对于数量较多的小型表,使用此引擎较为合适,可减少文件打开数量,提升效率。但若小表数量过多,则可能影响整体性能。此外,该引擎不支持索引功能,需在设计时予以考虑。

6、 建立TinyLog引擎表并写入一条记录

7、 此时进入数据存储目录 /var/lib/clickhouse/data/default/t,可观察到以下目录结构。

8、 a.bin 与 b.bin 是经过压缩的列数据文件,sizes.json 文件中保存了各个 *.bin 文件对应的大小信息。

9、 数据以原始未压缩形式存储于内存中,重启后即丢失。读写互不阻塞,不支持索引。在简单查询场景下性能极佳,速度可超10G/s,适用于对响应速度要求极高的应用环境。

10、 通常仅在测试或对性能要求极高且数据量较小(约一亿行以内)的场景中使用。

11、 Merge 引擎不会存储数据,其作用是能够同时从多个不同的表中读取信息。该引擎自动并行执行读操作,但不支持写入功能。在读取过程中,若源表存在索引,则会利用这些索引来提升查询效率,仅对实际参与读取的表生效。

12、 Merge引擎包含两个参数:数据库名称及用于匹配表名的正则表达式。

13、 先创建t1、t2、t3三张表,再通过Merge引擎将它们合并为一张逻辑表t。

14、 Clickhouse中最强大的表引擎是MergeTree(合并树)及其系列中的其他引擎,具备高效的数据处理能力与灵活的存储特性,广泛应用于大规模数据分析场景。

15、 MergeTree 引擎系列的核心思想是:当需要向表中写入海量数据时,可高效地分批次将数据片段插入,并让这些片段在后台按特定规则自动合并。这种方式避免了插入过程中频繁修改或重写存储数据,大幅提升了写入效率和系统性能。

16、 格式:

17、 参数解析

18、 用于存储日期的列名,其类型为 Date。系统将根据该列自动按月进行分区,每个分区的命名规则为YYYYMM格式。

19、 采样表达式用于定义数据采集的具体规则与条件。

20、 主键,数据类型为元组形式的Tuple()结构。

21、 索引粒度指索引中相邻标记间的数据行数,通常设置为8192,适用于大多数应用场景,兼顾查询效率与存储性能。

22、 案例:

23、 在默认数据目录的 mt_tree 路径中可查看到相关文件内容。

24、 .bin文件以列方式存储数据

25、 .mrk文件用于存储块的偏移信息

26、 primary.idx 文件用于存储主键索引信息。

27、 该引擎基于MergeTree开发,主要增加了处理重复数据的能力。与MergeTree的主要区别在于,它能够在合并过程中自动删除主键相同的重复记录。去重操作仅在后台自动触发的合并任务中执行,而这些合并的时间不可预测,无法人为控制或提前安排。由于合并并非实时进行,部分重复数据可能暂时保留,未被及时清理。因此,该引擎适用于在非实时场景下通过后台机制逐步消除冗余数据,达到节省存储空间的目的,但并不能确保查询时绝对不出现重复数据,不具备强一致性去重保障。

28、 格式:

29、 可以看出,相较于MergeTree,它仅多了一个ver字段,该字段代表版本列,与时间字段配合使用,用于标识哪条记录为最新数据。

30、 案例:

31、 该引擎基于 MergeTree 构建,但在数据片段合并时具有特殊机制。当对 SummingMergeTree 表进行合并操作时,ClickHouse 会将主键相同的多行记录合并为单行,其中数值类型列的值会被累加求和。若主键组合导致同一键值对应大量数据行,此机制可大幅压缩存储空间,并提升查询效率。对于无法进行累加的列,系统将保留该组中首次出现的值作为结果,确保数据在聚合过程中的完整性与一致性。

32、 语法:

33、 columns — 元组形式列出待汇总的列名称

34、 案例:

35、 2019年7月11日发现,a列数据被合并累加,b列取值为8,因该值对应记录最先插入。

36、 分布式引擎不保存数据,可跨多台服务器执行查询,读取操作自动并行处理,且在读取时会利用远程服务器表的已有索引。

37、 解析参数

38、 cluster_name 是指在服务器配置文件 /etc/metrika.xml 中设定的集群名称,用于标识特定的数据集群。

39、 数据库名称

40、 表名:table

41、 用于数据分片的键值,决定数据分布策略。

42、 实例展示

43、 在hadoop102、hadoop103和hadoop104上各自创建一个名为t的表。

44、 向三台机器的t表插入若干数据

45、 在hadoop102节点上建立分布式数据表

46、 向dis_table表中添加新数据记录。

47、 查看数据规模

48、 每个节点的数据量约占总量的三分之一。

展开全文
人赞过该文
内容纠错

相关电商优惠

评论

更多评论
还没有人评论~ 快来抢沙发吧~

读过此文的还读过

点击加载更多

内容相关产品

说点什么吧~ 0

发评论,赚金豆

收藏 0 分享
首页查报价问答论坛下载手机笔记本游戏硬件数码影音家用电器办公打印 更多

更多频道

频道导航
辅助工具