内部哈希和外部哈希两者有什么区别

小编 239

内部哈希和外部哈希有本质上的区别:内部哈希通常指的是内存哈希表,对于内部文件,散列通常通过使用实现为哈希表一组记录;外部哈希通常指的是外存哈希表,适合磁盘的特性存储。两者在数学上没有什么却别,但最小粒度从内存Cacheline变成了磁盘Page。

1.内部哈希

内部哈希通常指的是内存哈希表。对于内部文件,散列通常通过使用实现为哈希表一组记录。假设数组索引范围从0到M-1,然后我们有M个插槽,其地址对应于数组索引。我们选择一个将哈希字段值转换为的哈希函数0到M-1之间的整数。一个常见的哈希函数是h(K)= K mod M函数,返回divi后整数哈希字段值K的余数M;然后将该值用于记录地址。当正在插入的记录的哈希字段值哈希时发生冲突到已包含不同记录的地址。

2.外部哈希

外部哈希通常指的是外存哈希表,适合磁盘的特性存储,目标地址空间由桶组成,每个桶都有多个记录。存储桶是一个磁盘块或一组连续的磁盘块。该散列函数将一个键映射到一个相对的桶号,而不是分配一个桶的绝对块地址。文件头中维护的表会转换将桶号放入相应的磁盘块地址中,存储桶的碰撞问题不那么严重,因为尽可能多的记录在存储桶中可以散列到同一个存储桶而不会导致问题。

外存哈希表指的不是链表哈希,链表哈希指的是用链表处理冲撞,二次探测指的是用另一个哈希函数处理冲撞,二次探测在机端情况下需要整个哈希表重置,进行大小翻倍,否则性能劣化过于严重。二次探测里面的线性探测高速缓存本地性很好,所以当随机性够的情况下性能比较好。

延伸阅读

哈希是做什么的

哈希是Hash的直接音译,一般翻译做“散列”,就是把任意长度的输入(又叫做预映射,pre-image)。通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来少数的确定输入值。简单的说,就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

哈希(HASH)主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值。也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部