为了账号安全,请及时绑定邮箱和手机立即绑定

ClickHouse的MergeTree中的一级索引和二级索引,以及数据存储方式

标签:
大数据

建议先关注、点赞、收藏后再阅读。
图片描述

一级索引和二级索引在ClickHouse的MergeTree中的作用及区别如下:

一级索引:

  • 一级索引(primary key index)是MergeTree数据存储底层的默认索引。
  • 它由数据表中定义的主键字段构成,通常是一个或多个列的组合。
  • 一级索引在数据存储方面起着重要的作用,它决定了数据在MergeTree中的物理排序方式。
  • 数据按照一级索引的顺序进行排序,这使得ClickHouse能够快速进行范围查询和按照一级索引顺序读取数据。
  • 一级索引的主要作用是支持MergeTree表的数据切分(data sharding)。ClickHouse根据不同的一级索引值将数据分布到不同的分区,并在查询时优化数据访问,减少不必要的磁盘读取。

二级索引:

  • 二级索引(secondary index)是一种辅助索引,可以提供额外的查询优化和过滤功能。
  • 二级索引可以通过在MergeTree表上创建引用某些列的索引来定义。
  • 与一级索引不同,二级索引并不影响数据的物理排序。
  • 二级索引在查询方面起着关键作用,它可以加速某些特定的查询操作,如单个列的等值搜索和范围查询。
  • 在数据存储方面,二级索引是通过构建独立的Bloom Filter来实现的,这可以大大减少磁盘IO,并提高查询效率。

综上所述,在ClickHouse的MergeTree中,一级索引主要用于数据的物理排序和数据切分,支持范围查询和按顺序读取数据;二级索引主要用于查询优化,提供额外的查询功能和过滤条件。

请注意:ClickHouse可以同时使用多个二级索引,但是每个MergeTree表只能有一个一级索引。

在ClickHouse的MergeTree中,数据存储方式如下:

  1. 数据分块:
    MergeTree将数据分成多个块(block),每个块包含一段连续的数据。块的大小一般为1-1000万行,取决于配置和表的大小。

  2. 数据排序:
    每个块中的数据按照主键进行排序。MergeTree表的主键定义了一个或多个列,数据将根据这些列的排序顺序进行组织。

  3. 单独的索引文件:
    MergeTree使用单独的索引文件(index file)来存储数据。索引文件包含了数据块的元数据和指向数据块的偏移量信息。

  4. 多个数据文件:
    MergeTree使用多个数据文件(data file)来存储实际的数据。每个数据文件包含一个或多个块。

  5. 数据的写入:
    当数据被写入MergeTree表时,它们被追加到最新的数据文件中。如果数据文件超过一定大小,会创建一个新的数据文件,并继续写入新文件。

  6. 数据的压缩:
    MergeTree对每个数据块进行压缩,以减小磁盘占用。常用的压缩算法包括LZ4、Zlib等。

  7. 数据的合并:
    MergeTree定期执行数据合并操作,将多个小的数据块合并成一个大的数据块。这样可以提高查询性能,并减小存储空间的占用。

总之,MergeTree在ClickHouse中按照主键对数据进行排序,并将数据存储在独立的数据文件中。数据块被压缩以减小占用空间,并定期进行合并操作以优化性能和减小存储占用。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
1.7万
获赞与收藏
2252

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消