zl程序教程

您现在的位置是:首页 >  其他

当前栏目

ClickHouse系列--数据读写方案

2023-04-18 12:42:19 时间

1.概念

1.分布式表

分布式表,是一个逻辑上的表,是一些本地表的逻辑视图。

Distributed表引擎是分布式表的实现,它自身不存储任何数据,数据都分散存储在分片上,能够自动路由请求至集群中的各个节点,然后进行汇总后返回给用户,Distributed表引擎需要和其他数据表引擎一起协同工作。

一张分布式表底层会对应多个本地分片数据表,由具体的分片表存储数据,分布式表与分片表是一对多的关系

2.本地表

实际存储数据的表。

2.读数据方案

读数据一般都是直接读分布式表。

1.分布式引擎会自动从集群中的多个服务器上进行分布式查询,读数据是自动并行的。

2.不支持使用分布式表查询别的分布式表(除非该表只有一个分片)。

3.使用Distribute表引擎作为集群的统一访问入口,当客户端查询分布式表时,ClickHouse会将查询分发到集群中各个节点上执行,并将各个节点的返回结果在分布式表所在节点上进行汇聚,将汇聚结果作为最终结果返回给客户端。

3.写数据方案

写数据方案有两种。

1.写本地表

优点:

1.同步操作,数据直接写入本地表中,速度快,parts大小合适;

2.分片方案可以自行决定,可以灵活处理数据分片逻辑,在复杂业务下,这个灵活性很重要;

缺点:

1.需要客户端额外实现sharding和路由逻辑,比如轮训或者随机;

2.写分布式表

优点:

1.不需要自行实现分片逻辑,指定分片键/分片表达式和配置分片权重后,数据自行分发;

缺点:
  1. 分布式表接收到数据后会将数据拆分成多个parts, 并转发数据到其它服务器, 会引起服务器间网络流量增加、服务器merge的工作量增加, 导致写入速度变慢, 并且增加了Too many parts的可能性;
  2. 数据的一致性问题, 先在分布式表所在的机器进行落盘, 然后异步的发送到其他服务器进行存储,如果在 INSERT 到分布式表时服务器节点丢失或重启(如,设备故障),则插入的数据可能会丢失;
  3. 数据写入默认是异步的,短时间内可能造成不一致;
数据同步流程
  • 写入到一个节点
  • 通过interserver HTTP port端口同步到其他实例上
  • 更新zookeeper集群记录的信息