我是靠谱客的博主 谨慎煎饼,最近开发中收集的这篇文章主要介绍clickhouse分布式表 vs 客户端分片,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

clickhouse实现数据分片的方式主要有以下两种:

第一种: 客户端分片
假设有服务器节点A和B,A和B上面分别创建了本地mergetree表,这两个表的表结构一模一样,只是数据不同,使用这种分片方式时,客户端完全控制分片逻辑,比如客户端决定数据D应该写入哪个节点中,查询数据的时候由客户端分别向节点A和B的本地表发送请求,然后把请求合并返回给应用端,这里如何写数据和读数据的逻辑完全由客户端控制。这里需要考虑到比如A节点挂了之后,客户端要能感知到并使用比如A1节点代替,这里A和A1节点可以使用ReplicateMergeTree表的方式进行数据同步,A和A1的前面可以部署一个类似nginx的反向代理,这样当A节点 故障的时候就可以自动切换到A1节点了

第二种: clickhouse自带的分布式表
仍然是假设有服务器节点A和B,我们需要分别在A和B节点上创建mergetree本地表和分布式表,相当于每个节点都有一个分布式表和本地表,当往任何一个分布式表写数据时,假设往A节点的分布式表写数据,那么根据分布式表的数据分片规则,把属于A节点的数据写入A节点的本地表中,并把属于B节点的数据先放到A节点的本地临时磁盘目录中,然后A节点和B节点创建网络连接并通过网络连接把属于B的临时文件的内容传送给B节点,B节点接收到数据后会把数据插入到B的mergetree本地表中,从这个写入过程中我们可以看到,分布式表的写入需要A的临时磁盘存放数据,以及还需要网络连接来发送临时磁盘文件的数据,相比于第一种客户端分片的方式,额外消耗了磁盘和网络带宽。 当对节点A的分布式表进行数据读取时,分布式表会分别把请求发送给A节点的本地表和远程B节点的本地表,这个过程是并行的,然后分布式表会合并A的本地表和B的本地表的返回结果并返回给应用

附创建分布式表的方式:
create table distributeTable(id int32, name string) engine = Distributed(‘集群名称’,‘本地数据库’,‘代理的本地表’, rand())

最后

以上就是谨慎煎饼为你收集整理的clickhouse分布式表 vs 客户端分片的全部内容,希望文章能够帮你解决clickhouse分布式表 vs 客户端分片所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部