ClickHouse v22.8 轻量级删除

ClickHouse 定位是 OLAP 数据库,但是它也提供了行级数据删除的功能,可以通过 ALTER TABLE xxx DELETE WHERE xxx 来实现。但是这个操作很重,即便删除 1 行数据,也会重写整个分区。

ClickHouse 从 v22.8 版本开始,提供了一种轻量级删除的功能:

DELETE FROM [db.]table [WHERE expr]

ALTER TABLE xxx DELETE WHERE xxx 是把整个分区目录重写,DELETE FROM 是把删除的数据用掩码标记,在查询的时候过滤,在分区合并的时候进行删除。轻量级删除的设计思路相比之前会好很多,因为它期望只涉及被删除部分的数据。

这个功能看起来不错,但是在 ClickHouse 毕竟不是 OLTP 数据库,目前轻量级删除有一些明确的问题和限制,例如:

  • 轻量级删除也是延迟的,它也会导致一些分区的合并
  • 对 wide 类型分区友好(一个列一个 bin 文件),compact 类型要慎重(一组列一个 bin 文件),会导致磁盘的 IOPS 高,且增加 Zookeeper 的压力
  • 在删除的过程中,涉及到的分区会变成 inactive 状态。如果删除涉及的分区很多,则大量旧分区的清理动作会变得很慢
  • 轻量级删除会导致涉及到的分区名称都会变更(增加后缀 mutation_id),影响备份

文章评论

0条评论