clickhouse 分片

我们知道mysql数据库如果想做分片,需要使用第三方组件,这是因为mysql在设计之初就没有太多考虑分布式等问题。而clickhouse作为新生代性能之王,分片也是必须的功能。基本上从2015年之后的各种数据库也罢,框架也罢,都开始支持分布式功能了,其实功能实现不是很难,只不过如果这些数据库自己支持分布式的话,对于开发者就会少很多事情。

今天我们简单讲下clickhouse的分片。其实也就是一个视图聚合的功能。clickhouse可以支持读取每个分片上的内容的集合。写到哪个分片,可以自己实现,都是很简单的逻辑。

其实就是用到一个引擎,叫Distributed。
Distributed引擎的官网介绍

两台机器上,分别建表:response_event

在一台机器上,新建视图(引擎为Distributed的表)
名字一般是表名_all,比如response_event_all

CREATE TABLE response_event_all AS response_event  
ENGINE = Distributed(java_cluster, default, response_event, rand())

java_cluster是所有分片标签的父标签名字,自定义的,在配置文件中配置。
在这里插入图片描述

读:

这样的话,从response_event_all中读到的数据就是两个机器的数据的集合。

写:

1、可以直接写视图表,这个就和mysql分片一样了。
2、可以在代码中实现双写,选中表的一个字段作为分片的片键,然后hash取值确定写到哪个机器上,然后获取那台机器的connection即可。
有时间把代码贴上去。

备份

上面这种配置,就是都是两个机器都是没有备份的。
想要备份,可以配置,每台机器的表的引擎换一下,换一个引擎,一般都是在原引擎上加Replicate。
再配和配置文件配置,一般9000端口是给主用的,9001,9002等是给从用的。
在这里插入图片描述

发布了203 篇原创文章 · 获赞 186 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/java_zhangshuai/article/details/103620776