ClickHouse DELETE/UPDATE mutatio
2019-12-10 本文已影响0人
白奕新
1、background
相信大家在看过ClickHouse介绍的时候都看过这么一句话『ClickHouse不支持or支持部分的UPDATE/DELETE操作』,那么究竟是怎么回事呢?Let's go
2、
ClickHouse在2018-06-28的v1.1.54388支持了"DELETE"操作
ALTER TABLE [db.]table DELETE WHERE filter_expr
在2018-09-13的v18.12.14支持了"UPDATE"操作
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr
所以说ClickHouse现在已经支持了U/D的操作,那么为什么会说『支持部分』呢?
ClickHouse的U/D操作,只支持条件(范围)删除。所以,像MySQL中直接删除某一条数据的这种操作ClickHouse是没有办法支持的(当然你也可以把每条数据都添加唯一的ID列,按照ID来删除也是可以的)
3、How D/U operation works?
话不多说,直接贴图
https://github.com/ClickHouse/ClickHouse/issues/8017
![](https://img.haomeiwen.com/i13508296/98012ca38a6f574a.png)
简单来说,ClickHouse接收到mutation请求后,background线程就开始执行操作:把旧的数据的bin文件检索出来,再根据检索条件过滤/修改旧文件,再用新文件replace旧文件重新写入磁盘。所以可见mutations操作是一项很吃性能的操作,而且不保证什么时候能够完成。