在哈希分区中使用啥算法,它可以在查看任何数据之前将数据划分为相似大小的分区

Posted

技术标签:

【中文标题】在哈希分区中使用啥算法,它可以在查看任何数据之前将数据划分为相似大小的分区【英文标题】:What algorithm is used in a hash partition that it can divide up the data into similar size partitions before seeing any data在哈希分区中使用什么算法,它可以在查看任何数据之前将数据划分为相似大小的分区 【发布时间】:2019-06-30 02:05:37 【问题描述】:

我了解 Oracle(和其他数据库)中的散列分区方法会在散列键上生成一种算法,以便传入数据可以分成大小相等的部分以创建类似大小的分区。

但是,在首先看到实际数据之前,这样的算法如何工作?难道不能最终得到一组散列分区,其中 99% 的数据进入其中一个分区,剩下的 1% 被分成剩余的 n 个分区?

【问题讨论】:

【参考方案1】:

是的,理论上是可以的。但是散列算法本质上是随机化传入的数据。然后统计规则意味着分区的大小将接近。

如果您有大量数据,那么分区大小的差异即使小至 1% 也变得非常不可能 - 假设原始数据具有唯一值。

但是,如果原始数据有偏差,则生成的 bin 也可能有偏差。例如,考虑是否有 100 个值,其中 0-9 出现一次,10 出现 90 次。值为 10 的所有 90 行将进入同一个分区,因此生成的 bin 将不平衡。

Oracle 使用函数ORA_HASH 来决定使用哪个散列分区。 exact algorithm of that function 不为公众所知。但是该手册确实讨论了该算法的一些属性; ORA_HASH 最适用于唯一数据并且当桶的数量是 2 的幂时。如果不满足这些条件,则某些分区可能会明显大于其他分区。

【讨论】:

好吧,这是有道理的。谢谢

以上是关于在哈希分区中使用啥算法,它可以在查看任何数据之前将数据划分为相似大小的分区的主要内容,如果未能解决你的问题,请参考以下文章

哈希值是啥意思?

面试:说说啥是一致性哈希算法?

面试官:说说啥是一致性哈希算法?

小罗漫画第八期:哈希算法

Python哈希函数啥情况下抛出异常

Oracle:将范围分区更改为哈希分区