clickhouse中的表基本上都ReplicatedMergeTree+Distributed。而canal只支持单表(从源码中也可以看出),所以做了canal二次开发以实现insert update delete truncate功能。单表和整库都支持。
本文所介绍的canal二次开发,只提供思路,并不能照抄代码。
clickhouse中的表基本上都ReplicatedMergeTree+Distributed。而canal只支持单表(从源码中也可以看出),所以做了canal二次开发以实现insert update delete truncate功能。单表和整库都支持。
本文所介绍的canal二次开发,只提供思路,并不能照抄代码。
canal支持mysql到clickhouse,本以为canal会把mysql dml语法转换成clickhouse dml语法,可是并没有。
clickhouse,tidb,mysql,这三个数据库都是现在在用的。准备了一些测试数据,测试一下读取数据的速度。
clickhouse支持联表查询的。对常用sql的支持比较好。但是也有出人意料的问题。例如:rigth join
clickhouse不支持自增ID,primary key可以重复。这对于习惯了mysql的人来说,肯定很不爽。如果写入到mysql,mysql同步数据到clickhouse,然后从clickhouse来读,这样就很完美了。
采用MaterializeMySQL引擎局限性比较大,同步的表数据只能在clickhouse集群中的某一台机器上,这样集群资源不能充分利用。
我想达到目的,在clickhouse中创建Distributed+ReplicatedMergeTree+zookeeper来实现分布式库和表,然后能过canal把mysql数据同步到过去。这样能充分利用系统资源,也能克服clickhouse的弊端。
ReplicatedMergeTree分布式表引擎,同一分区下利用zookeeper进行同步数据。
Distributed有点类似于mysql merge存储引擎,比较适合读取。
那如果有四台机器,2个分片2个副本,怎么样才能写入快,读取快,并且写入的时候各个分片数据都比较均衡呢?
clickhouse不支持自增ID,primary key可以重复。这对于习惯了mysql的人来说,肯定很不爽。如果写入到mysql,mysql同步数据到clickhouse,然后从clickhouse来读,这样就很完美了。
网上找了找备份还原的方法,实践如下
结合官方文档,做了一些实例php,java,go,python
推荐三款工具都是跨平台的,mysql命令行,dbeaver,tabix。