前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ClickHouse的MergeTree处理大规模数据删除和更新操作的过程和对性能的影响,以及更多存储引擎

ClickHouse的MergeTree处理大规模数据删除和更新操作的过程和对性能的影响,以及更多存储引擎

原创
作者头像
一凡sir
修改2023-10-17 09:31:27
9610
修改2023-10-17 09:31:27
举报
文章被收录于专栏:技术成长

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

MergeTree在处理大规模数据删除和更新操作时,会先将要删除或更新的数据标记为删除状态,而不是立即删除或更新数据。

MergeTree在处理大规模数据删除和更新操作具体过程如下:

  1. 删除操作: 当执行删除操作时,MergeTree会将需要删除的数据的主键添加到一个名为all_columns.is_del的布尔类型列中,表示这些数据被标记为删除状态。这样可以避免实际删除数据的开销,同时保持数据文件的紧凑性。
  2. 更新操作: 当执行更新操作时,MergeTree会将需要更新的数据的主键添加到一个新的文件中,并在该文件中存储更新后的数据。然后,MergeTree会标记原始数据为删除状态。这种方式称为“日志方式”,可以避免实际更新数据的操作。

这样的处理方式对性能有以下影响:

  • 删除操作: MergeTree的删除操作只是在添加一个删除标记,而不是实际删除数据。这使得删除操作变得十分高效,因为删除操作只需要标记主键而不需要实际的物理删除操作。
  • 更新操作: MergeTree的更新操作是通过添加一个新文件来存储更新后的数据,并将原始数据标记为删除状态。这样的更新方式在硬盘上会占用更多的空间,因为更新后的数据和原始数据都被保存下来。但是在查询数据时,只需要合并新旧数据即可得到最新的结果,因此更新操作对查询性能的影响较小。

MergeTree处理大规模数据删除和更新操作的方式使得删除操作高效,更新操作对查询性能影响较小,但会增加硬盘空间的利用率。

除了MergeTree,ClickHouse还有其他存储引擎。以下是它们的简要介绍及适用场景:

Log引擎

  • 特点:Log引擎是ClickHouse最简单的存储引擎,将数据按照追加的方式存储在日志文件中。它没有任何索引和压缩,适用于只进行数据追加操作的场景。
  • 适用场景:适用于需要高吞吐量的写入操作(例如日志数据),但对于查询性能要求不高的场景。

TinyLog引擎

  • 特点:TinyLog引擎的工作方式类似于Log引擎,但数据存储在更小且更紧凑的日志文件中。它提供了轻量级的索引,适用于简单的查询场景。
  • 适用场景:适用于需要高写入吞吐量和轻量级查询的场景。

MergeTree引擎

  • 特点:MergeTree引擎是ClickHouse的默认存储引擎,适用于大多数场景。它采用基于时间的分区存储和合并数据,支持快速且高效的插入、更新和查询操作。它还提供了多种压缩和索引方式,以平衡存储空间和查询性能。
  • 适用场景:适用于需要高度可扩展性和高性能查询的场景,尤其是分析型查询,例如时序数据、日志数据等。

Merge引擎

  • 特点:Merge引擎用于将数据从其他引擎(如Log和TinyLog)合并到MergeTree引擎中。它负责将数据从低效的存储引擎转移到高效的MergeTree引擎。
  • 适用场景:适用于将低效的存储引擎中的数据转移到高效的MergeTree引擎中的场景。

Distributed引擎

  • 特点:Distributed引擎用于在多个ClickHouse集群之间分布数据和查询。它提供了透明的分布式查询支持,以及数据的水平分片和复制功能。
  • 适用场景:适用于需要水平扩展和高可用性的场景,特别是分布式系统中需要跨多个ClickHouse集群进行查询和数据处理的场景。

这些存储引擎提供了不同的功能和适用性,可以根据实际需求选择最合适的引擎来满足数据存储和查询的要求。

在ClickHouse的MergeTree引擎中,数据分区和排序的方式是基于Hash函数和Range函数的组合。

数据分区:

  • ClickHouse将数据分成多个分区,每个分区是一个独立的目录,其中包含多个数据块。
  • Hash函数根据特定的列或表达式生成哈希值,然后将数据根据哈希值分配到不同的分区中。
  • 这种分区方式可以将数据在多个分区之间均匀分配,减少了分区之间的数据倾斜,从而提高查询性能。

数据排序:

  • 每个分区内的数据按照Range函数定义的排序规则进行排序。
  • Range函数一般基于一个或多个列的值,按照给定的顺序进行排序。
  • 这种数据排序方式有助于数据的压缩和存储,相邻的数据具有相似或相同的值,可以更好地利用压缩算法。
  • 同时,数据排序还有利于快速的范围查询,根据Range函数定义的排序规则,可以更快速地定位和检索特定范围的数据。

这种分区和排序方式能提高性能的原因主要有两点:

  1. 数据分区使得数据在多个分区之间均匀分布,避免了数据倾斜情况的发生,提高了查询的并行度,从而加快查询速度。
  2. 数据排序有助于数据的压缩和存储,减少存储空间的占用,并且有助于范围查询的快速定位和检索。

通过合理的数据分区和排序方式,ClickHouse能够更高效地处理大规模数据的存储和查询操作。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MergeTree在处理大规模数据删除和更新操作具体过程如下:
  • 这样的处理方式对性能有以下影响:
  • 除了MergeTree,ClickHouse还有其他存储引擎。以下是它们的简要介绍及适用场景:
    • Log引擎
      • TinyLog引擎
        • MergeTree引擎
          • Merge引擎
            • Distributed引擎
            • 数据分区:
            • 数据排序:
            • 这种分区和排序方式能提高性能的原因主要有两点:
            相关产品与服务
            数据保险箱
            数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档