前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ClickHouse的MergeTree中的一级索引和二级索引,以及数据存储方式

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

原创
作者头像
一凡sir
发布2023-10-16 08:28:31
8830
发布2023-10-16 08:28:31
举报
文章被收录于专栏:技术成长

建议先关注、点赞、收藏后再阅读。

一级索引和二级索引在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中按照主键对数据进行排序,并将数据存储在独立的数据文件中。数据块被压缩以减小占用空间,并定期进行合并操作以优化性能和减小存储占用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一级索引和二级索引在ClickHouse的MergeTree中的作用及区别如下:
    • 一级索引:
      • 二级索引:
      • 在ClickHouse的MergeTree中,数据存储方式如下:
      相关产品与服务
      数据保险箱
      数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档