哈希分区中使用哪种算法,可以在看到任何数据之前将数据分成相似大小的分区

时间:2019-06-30 02:05:37

标签: sql oracle postgresql rdbms

我了解到Oracle(和其他数据库)中的哈希分区方法会在哈希密钥上生成算法,以便将传入的数据划分为大小相等的片段,以创建相似大小的分区。

但是在首先看到实际数据之前,这样的算法如何工作?不可能以一组散列分区结束,在该散列分区中,有99%的数据进入一个分区,而其余的1%则被划分为其余的n个分区?

1 个答案:

答案 0 :(得分:3)

是的,理论上是可能的。但是哈希算法本质上是随机化输入数据。然后,根据统计规则,这些分区的大小将接近。

如果您有大数据,则分区大小的差异甚至很小,即使原始数据具有唯一值也是如此,即使达到1%也是如此。

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

Oracle使用函数ORA_HASH来确定要使用的哈希分区。 exact algorithm of that function是未知的。但是该手册确实讨论了该算法的一些属性。 ORA_HASH最适合唯一数据,并且当存储桶数为2的幂时。如果不满足这些条件,则某些分区可能会比其他分区大得多。