clickhouse的ReplacingMergeTree引擎实战

ClickHouse ReplacingMergeTree引擎详解

学习ReplacingMergeTree引擎,首先你得了解clickhouse的MergeTree引擎,因为ReplacingMergeTree引擎是MergeTree引擎的一个扩展版引擎,他拥有和MergeTree一样的功能,同时新增了一个删除相同主键数据的功能。
我们知道,clickhouse的MergeTree引擎,是clickhouse众多引擎中,号称性能最好的一个引擎,但他只能按照分区删除数据,所以有些场景很难满足,或者说比较麻烦,不优雅,举个实际的例子:
比如有个系统,他的数据不是实时的,比如今天的数据,明天看会比今天多,后天看会比明天多,但你需要在你的系统中定时同步他的数据到clickhouse,
这种情况用MergeTree可以勉强实现,那就是把每天相同主键的数据都保存一条,查询的时候,只取最新的一条。但这个需要写sql解决,而且一旦查询复杂,设计到数据合并等,sql就会变的很复杂,查询效率也会降低,而且每天的数据都会重复保存,数据重复太多,量太大。
所以针对这种情况,我们可以考虑用clickhouse的ReplacingMergeTree引擎,这个引擎自动帮你筛选出来最新的一条数据,并删掉之前重复的数据。类似于mongo的updateOne,先增后删。

建表:

我们新建一个表replacing_test,用ReplacingMergeTree引擎,date作为分区键,id和name作为联合主键,point可以理解为版本号。
value就是你实际业务要的值,我们用数字类型举例。

create table replacing_test (date Date, id UInt8, name String, value UInt16, point DateTime) 
ENGINE= ReplacingMergeTree(date, (id, name), 8192,point);

这个表,相同id-name的数据,最终只会留下一条,具体留下哪一条,是由不同的point决定的。

插入测试数据

看下面的代码,我们循环插入9*9=81条数据,联合主键只有id在变,name暂时只是字符串b

    public static void main(String[] args) 
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值