UUID4是否在md5地址空间上均匀分布?

时间:2019-02-21 16:14:22

标签: md5 distribution uuid sharding

(我将通过说我认为实际上没有办法对UUID4进行设计而不是均匀分布,但是我缺乏数学技能和加密知识来证明这一点。)

在将大量数据流传输到运动学时,我们遇到一个问题,其中一个分片#4的分片非常热,而另外七个分片的分载不足。 Kinesis通过partition key在其分片上分布数据,该they reserve six bits for deterministic information是一个Unicode字符串,可以转换为md5哈希。

默认情况下,分片是顺序的,因此,如果您有一个分片,则它将具有0-2 ^ 128的所有分区键。我们有八个分片,因此各个存储区以2 ^ 125的增量为界。每个分片范围的结尾均为十六进制,

0x20000000000000000000000000000000
0x40000000000000000000000000000000
0x60000000000000000000000000000000
0x80000000000000000000000000000000
0xa0000000000000000000000000000000
0xc0000000000000000000000000000000
0xe0000000000000000000000000000000
0x100000000000000000000000000000000

我们基于UUID 4进行分区。我们假设该分区将均匀地分布在上述地址空间中,但是对于这个“热碎片”问题,我开始感到奇怪。 UUID4是2 ^ 128位,但{{3}}留下2 ^ 122个可以随机的值。是那六点让我停顿了。

通常,如果我拿走了六个最高有效位,则我最大的可能值是2 ^ 122,这肯定会一直落在第一个或第二个存储桶中。但是实际上,这六个数字并不是UUID4空间中最重要的数字,那么它们对分布有什么影响?如果我使用UUID4作为分片密钥,我的数据会均匀地分布在各个分片上吗?

0 个答案:

没有答案