首页 > 其他分享 >《ClickHouse原理解析与应用实践》关于P239[分片规则]错误的地方

《ClickHouse原理解析与应用实践》关于P239[分片规则]错误的地方

时间:2023-01-18 17:11:24浏览次数:59  
标签:10 P239 权重 第一分 分片 区间 对应 ClickHouse

 

《ClickHouse原理解析与应用实践》关于P239[分片规则]错误的地方

 

快过年了,坚守到最后一天。

刚好开发有新的想法,需要用到ReplacingMergeTree引擎实现去重或删除数据功能实现不匹配。

但是对于分布式表来说,数据需要落到同个分区同个分片是去重的前提。

于是研究怎么落到同个分片。

《ClickHouse原理解析与应用实践》一书中,P239(如下图)对于分片区间,第二个的[10,20)是错误的。

  

在不知道错误的前提下,阅读起来是非常纳闷的,因为书里边没有提到区间是怎么划分的,怎么就出来个[10,20),而不是[10,30)。

我一开始看的时候就觉得有种违和感,总觉得有问题,但因为不知道区间划分规则就不好说。

网上查资料,大多是不相关的,有也是就是这本书摘抄的。CK资料太少了。。。

 

于是,去官网找(还不好找)。。

终于是弄明白了。

官档中文  官档英文

这里引用中文官档的一段话:

选择将一行数据发送到哪个分片的方法是,首先计算分片表达式,然后将这个计算结果除以所有分片的权重总和得到余数。该行会发送到那个包含该余数的从’prev_weight’到’prev_weights + weight’的半闭半开区间对应的分片上,其中 ‘prev_weights’ 是该分片前面的所有分片的权重和,‘weight’ 是该分片的权重。例如,如果有两个分片,第一个分片权重为9,而第二个分片权重为10,则余数在 [0,9) 中的行发给第一个分片,余数在 [9,19) 中的行发给第二个分片。

说的更明白通俗点,以官档的例子说明,

第一分片权重:9        第二分片权重:10       则每个分片对应区间为:[a,b)

[a,b)区间,左边总是闭区间,右边总是开区间

a等于当前分片的前边所有分片权重和(不包括当前分片),b等于到当前我这个分片为止所有分片的权重和。

这里第一分片对应区间这么算:

  a=当前分片(第一分片)前边所有分片(它前边没分片)权重和为0

  b=到当前我这个分片(第一分片)所有分片的权重和,也就是只有第一分片,为9

因此第一分片对应区间为[0,9)。

同样的,

第二分片对应区间这么算:

  a=当前分片(第二分片)前边所有分片权重和为9

  b=到当前我这个分片为止(第二分片)所有分片的权重和,也就是只有第一+第二,为9+10=19

因此第一分片对应区间为[9,19)

这好理解了吧......

 

因此书里边的是错误的,

第一分片权重:10        第二分片权重:20

那么,第一分片区间应为[0,10)

第二分片区间应为[10,10+20),即[10,30)。

 

在搞个3分片的例子,好好体会......

第一分片权重:5        第二分片权重:10     第三分片权重:10

第一分片对应区间:[0,5)

第二分片对应区间:[5,5+10),即[5,15)

第三分片对应区间:[5+10,5+10+10),即[15,25)

 

至此。(赶紧到周五回家过年)。

标签:10,P239,权重,第一分,分片,区间,对应,ClickHouse
From: https://www.cnblogs.com/PiscesCanon/p/17060241.html

相关文章

  • Docker容器化急速部署ClickHouse
    文章目录1.ClickHourse入门简介2.Docker部署ClickHouse3.DBeaver连接ClickHouse1.ClickHourse入门简介(1)什么是行存储传统的OLTP关系型数据库都是行存储一行中......
  • ClickHouse常见数据类型以及常用SQL语法
    文章目录1.数值类型(整形,浮点数,定点数)2.字符串类型3.时间类型4.枚举类型5.布尔值6.其他数据类型7.ClickHouse与Mysql数据类型对比8.常见SQL语法和注意事项1.......
  • ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析
    目录建表语法数据处理汇总的通用规则AggregateFunction列中的汇总嵌套结构数据的处理资料分享参考文章SummingMergeTree引擎继承自MergeTree。区别在于,当合并SummingMerg......
  • Redis 高可用: twemproxy实现缓存服务器分片集群
    Twemproxy又称nutcracker,是一个memcache、redis协议的轻量级代理,一个用于sharding的中间件。有了Twemproxy,客户端不直接访问Redis服务器,而是通过twemproxy代理中间件......
  • ClickHouse分布式安装-Docker环境
    安装背景本文主要介绍了在Docker环境下如何安装ClickHouse集群的过程,ClickHouse集群采用单分片三副本模式进行部署。服务器:bigdata1、bigdata2、bigdata3zookeeper:需要......
  • clickhouse时间处理问题纳秒
    clickhouse写入时间后查询出来不对。差了上百年。场景:java中的long类型存入clickhouse中的long类型字段,作为时间。查询时,通过函数把long类型转化成时间格式。然后发现日......
  • ClickHouse系列--Mutations操作:数据的删除和修改
    clickhouse提供了update和delete的删除能力,但是和常规的例如mysql,redis这种立即见效的能力不一样。在clickhouse中这种操作称为mutation操作。1.mutation操作有3个特点:1.Mut......
  • ClickHouse系列--一级索引原理解读
    MergeTree的主键使用PRIMARYKEY定义,主键定义好后,根据index_granularity间隔,为数据生成一级索引保存在primary.idx文件中,索引数据按照PRIMARYKEY排序。1.稀疏索引primary.i......
  • ClickHouse系列--分布式表写入流程
    摘要:在向ck集群写入数据的过程,有2种方案,一种是直接写本地表,一种是通过Distributed表引擎写分布式表。本文介绍写分布式表的核心流程。先假定场景和统一命名:我们假设有clus......
  • Gdevops广州站:支撑700亿数据量的ClickHouse高可用架构实践
    2021Gdevops全球敏捷运维峰会- 广州站,将在5月28日盛大举办。Gdevops经过创办6年成功举行近20场大会的经验积淀,本次峰会将结合行业趋势与技术热点,携手腾讯、京东、网易、......