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

 

《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)

 

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

posted @ 2023-01-18 17:04  PiscesCanon  阅读(57)  评论(0编辑  收藏  举报