配置ClickHouse支持事务能力
操作场景
原子性是指事务是一个不可分割的工作单元,一个事务可以包含多个操作,这些操作要么全部执行,要么全都不执行。但是由于事务在执行过程中,可能出现一些意外,例如用户回滚了事务、连接断开、断电等等,导致事务被中断执行。
ClickHouse支持原子性写入能力,支持事务能力。实现事务的原子性,在事务的某个操作失败后,支持回滚到事务执行之前的状态。
本章节主要介绍如何开启ClickHouse事务。
- 使用本地表场景进行数据写入性能更优,故推荐本地表的数据增、删、改、查场景的多副本分布式事务支持。
- 对于使用分布式表进行数据写入场景的分布式事务,需要结合分布式表事务insert_distributed_sync+本地表事务(Mergetree/ReplicateMergeTree)完整的事务支持数据写入。
参数配置
登录FusionInsight Manager页面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > ClickHouseServer(角色) > 可靠性”,修改以下参数:
参数 |
参数说明 |
---|---|
allow_transactions |
此参数应用于是否支持事务, 取值范围:0,1。
|
_clickhouse.metrika.cluster.internal_replication |
表示是否只将数据写入其中一个副本, 取值范围:true,false。
|
- 通过执行语句set implicit_transaction='true';,可以使用会话级别的隐式事务。ClickHouse目前没有alter queries中断机制,所以alter queries(如:lightweight delete)执行过程中被中断之后,即便开启隐式事务能力,也无法回滚,与开源保持一致。
- 分布式表事务性插入使用方法:
登录FusionInsight Manager页面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置”,修改参数_clickhouse.metrika.cluster.internal_replication值为false, 表示insert分布式表时,会在分片的所有副本都写入一份。
会话级别通过set insert_distributed_sync='true';,表示insert分布式表时,以同步方式插入数据到各个实际表中。