lectrue7 哈希表

数据结构:DBMS在系统内部的许多不同部分使用各种数据结构,一些例子包括:

  • 内部元数据 (Internal Meta-Data):用于跟踪关于数据库和系统状态信息的数据。

    • 例如:页表 (Page tables)、页目录 (Page directories)。

  • 核心数据存储 (Core Data Storage):作为数据库中元组 (Tuples) 基础存储的数据结构。

  • 临时数据结构 (Temporary Data Structures):DBMS 可以在处理查询时动态构建临时的 ephemeral 数据结构,以加速执行。

    • 例如:用于连接操作 (Joins) 的哈希表。

  • 表索引 (Table Indices):用于更轻松地查找特定元组的辅助数据结构。

核心设计决策:在为DBMS实现数据结构时,主要有两个设计决策需要考虑:

  • 数据组织 (Data Organization):我们需要弄清楚如何布局内存,以及在数据结构内部存储什么信息,以支持高效访问。

  • 并发性 (Concurrency):我们还需要考虑如何允许多线程同时访问数据结构而不引发问题,确保数据保持正确和稳健。


哈希表:哈希表实现了一种将键映射到值得关联数组抽象数据类型。

  • 复杂度:它提供平均 O(1) 的操作复杂度(最坏情况下为 O(n))和 O(n) 的存储复杂度。

  • 注意:即使平均操作复杂度是 O(1),在现实世界中,常数因子优化也是非常重要的考量因素(比如一次计算哈希耗时 1ns 还是 100ns)。

一个哈希表得实现由两部分组成:

1.哈希函数:它告诉我们如何将一个巨大的键空间映射到一个较小的目标域中,用于计算桶或槽数组的索引。

我们需要在执行速度和冲突率之间权衡:

  • 极端情况 A:一个总是返回常数的哈希函数(计算非常快,但所有数据都会发生冲突,退化成链表)。

  • 极端情况 B:一个“完美”的哈希函数(完全没有冲突,但计算起来可能需要极长的时间)。

  • 理想设计:介于这两者之间。

2.哈希方案:它告诉我们哈希计算如何处理键的冲突。

在这里,我们需要权衡:

  • 是分配一个巨大的哈希表来减少冲突发生的概率;

  • 还是节省空间,但在冲突发生时不得不执行额外的指令来寻找空位。


哈希函数:哈希函数接受任何键作为输入,并返回该键的整数表示,即哈希值。该函数的输出具有确定性——即相同的键必须始终产生相同的哈希输出。

DBMS不需要使用加密级安全的哈希函数,因为我们不需要担心保护键的内容。这些哈希函数主要由DBMS内部使用,因此信息不会泄漏到系统外部。通常情况下,我们只关心哈希函数的执行速度和冲突率。

目前最先进的哈希函数是Facebook的XXHash3.


线性探测哈希:这是最基础也是通常最快的哈希方案,它使用一个数组槽位的循环缓冲区。

  • 基本原理:哈希函数将键映射到槽位。

    • 插入:发生冲突时,线性地搜索相邻槽位,直到找到空位。

    • 查找:检查键哈希到的槽位,并线性搜索直到找到目标条目。如果遇到空槽位或遍历了表中所有槽位,说明键不存在。

    • 存储内容:槽位必须同时存储 键 (Key) 和 值 (Value),以便验证条目是否为所需目标。

  • 删除操作:直接移除条目非常危险,因为这可能导致后续查找无法找到原本排在空槽位之后的条目。有两种解决方法:

    1. 墓碑 (Tombstones)(最常用):用“墓碑”标记被删除的槽位,告诉后续查找操作继续扫描而非停止。

    2. 数据移动:删除后移动相邻数据填补空位,但必须小心只移动那些本就被偏移过的条目。这在实践中很少见,因为当键数量巨大时开销极高。

  • 非唯一键 (Non-unique Keys):当一个键关联多个值时:

    • 独立链表:存储指向包含所有值链表的指针。

    • 冗余键(更常用):直接在表中多次存储相同的键。

  • 优化手段:

    • 专用化实现:根据键的类型(如长短字符串)采取不同的存储策略。

    • 独立存储元数据:使用位图 (Bitmap) 记录空位/墓碑信息,避免无效查找。

    • 版本控制:通过增加版本计数器来批量作废槽位,避免昂贵的逐个清理操作。

布谷鸟哈希:这种方法不只使用一个哈希表,而是维护多个具有不同哈希函数(通常算法相同但种子不同,如不同种子的 XXHash)的哈希表。

  • 插入逻辑:

    1. 检查所有表,选择有空位的表进行插入。

    2. 如果没有空位,随机选择一个表并驱逐 (Evict) 其中的旧条目。

    3. 将被驱逐的旧条目重新哈希到另一个表中。

    4. 如果陷入无限循环,则重建所有表(更换种子或增大容量,后者更常见)。

  • 性能特点:

    • 查找与删除:保证 O(1) 复杂度。

    • 插入:开销可能更高,因为涉及链式驱逐。

在实践中,布谷鸟哈希通常是在单个哈希表上使用多个哈希函数将键映射到不同槽位,此外,由于哈希计算本身有开销,其查找和删除的成本实际上可能略高于理想的O(1)。

虽然布谷鸟哈希在理论上提供了“最坏情况下 O(1)”的查找,但在现代计算机架构下,线性探测通常表现更好:

  1. 缓存局部性 (Cache Locality):线性探测是连续访问内存,这非常符合 CPU 的缓存预取逻辑。而布谷鸟哈希需要计算多个哈希并在不同的内存位置跳转,容易产生 Cache Miss。

  2. 简单即美:线性探测的代码逻辑非常精简,分支预测更容易命中。


动态哈希方案:静态哈希方案要求DBMS预先知道其想要存储的元素数量。否则,如果哈希表需要扩大或缩小容量,就必须进行重建。动态哈希方案能够根据需求调整哈希表的大小,而无需重建整个表。这些方案通过不同的方式执行容量调整,可以分别侧重于优化读取或写入性能。

链式哈希:这是最常见的动态哈希方案。DBMS 为哈希表中的每个槽位维护一个由“桶(Buckets)”组成的链表。哈希到同一个槽位的键会被简单地插入到该槽位对应的链表中。查找元素时,我们通过哈希定位到对应的桶,然后进行扫描。这种方案可以通过在桶指针列表中额外存储 布隆过滤器来优化,它可以告知我们某个键是否不存在于链表中,从而在这些情况下避免查找操作。

可扩展哈希:这是链式哈希的一种改进变体,它通过拆分桶来代替让链表无限制增长。这种方案允许哈希表中的多个槽位指向同一个桶链。

重平衡哈希表的核心思想是在拆分时移动桶内条目,并增加用于查找哈希表中条目的位数。这意味着 DBMS 只需在被拆分链的桶内移动数据;所有其他桶都保持不变。

  • DBMS 维护 全局深度和 局部深度位数,用于确定在槽数组中寻找桶所需的位数。全局深度是整个目录的同一深度,它决定了用于查找哈希表中条目的位数,也就是用多大的精度来解析哈希值。局部深度是桶内的值的数量。

  • 当一个桶满时,DBMS 拆分该桶并重新排列其元素。如果被拆分桶的局部深度小于全局深度,则只需将新桶添加到现有的槽数组中。否则,DBMS 将槽数组的大小翻倍以容纳新桶,并增加全局深度计数器。此时由于多个槽位可能指向同一桶,必须进行分裂。

  • 可扩展哈希的意义是防止局部深度像链式哈希那样无限制的扩张。

线性哈希:在链式哈希中,如果某个桶溢出了,你只能在后面挂桶,结构被动地变得越来越深。该方案不是在桶溢出时立即进行拆分,而是维护一个 拆分指针 (Split Pointer),用于跟踪下一个要拆分的桶。无论该指针是否指向溢出的那个桶,DBMS 都会执行拆分。溢出的判定标准由具体实现决定。

  • 当任何桶发生溢出时,拆分指针当前位置的桶。添加一个新的槽条目和一种新的哈希函数,并应用此函数对拆分桶中的键进行重哈希。

  • 如果原始哈希函数映射到了拆分指针之前指向过的槽位,则应用新的哈希函数来确定键的实际位置。

  • 当指针到达最后一个槽位时,删除原始哈希函数并将指针移回开头。

如果拆分指针下方的最高位桶为空,我们也可以移除该桶并反向移动拆分指针,从而缩小哈希表的大小。

线性哈希好处在于平滑扩容,整个哈希表利用率维持在一个相对稳定的空间,且比可扩展哈希更省内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1205375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合肥腹直肌修复服务哪家合适,合肥妈妈值得推荐

在产后恢复的关键阶段,腹直肌康复修复是许多宝妈重塑体态、重拾自信的核心需求。面对市场上琳琅满目的腹直肌修复服务,腹直肌修复服务哪家便宜腹直肌修复服务哪家合适成为宝妈们热议的话题。以下结合服务类型与真实口…

同步电机模型的MATLAB仿真

第2章同步电机基本原理 2.1理想同步电机 2.1.1理想同步电机假设 众所周知,由于转子结构的不同,同步电机可分为隐极机和凸极机两类。以下的研究对象像都是凸极机。 同步电机的主要特点是:定子有三相交流绕组,转子为直流励磁。 将电…

2026出国雅思培训机构权威测评榜单:TOP5深度解析,精准选课不踩坑

英国文化教育协会数据显示,中国雅思考生平均备考周期9.2个月,43%需二次及以上考试,其中北京朝阳区、上海静安区、广州天河区、深圳南山区、杭州西湖区、成都锦江区等全国多地区区县考生,普遍面临雅思培训选课难、找…

基于DSP28335 SCI模块控制ESP8266 WiFi模块的实现方案

一、硬件连接与配置硬件接口定义DSP28335引脚 ESP8266引脚 功能说明SCITXDA RX DSP发送数据到ESP8266SCIRXDA TX ESP8266发送数据到DSPGND GND 共地VCC 3.3V 供电(需电平转换芯片)关键配置参数系统时钟:假设SYSCLKO…

盘点盐城有实力的中考复读品牌学校,鸿文复读口碑良好

2026年江苏中考竞争持续白热化,部分考生因发挥失常、基础薄弱与理想高中失之交臂,中考复读成为重启升学梦想的关键选择。然而,当前市场中中考复读机构鱼龙混杂:部分机构缺乏正规资质,教学体系松散;另有机构师资不…

探讨丰安铝业专业不专业,从多方面剖析企业实力

在建筑铝材供应链的升级浪潮中,一家能提供一站式定制+稳定交付的铝材供应商,是门窗幕墙企业、工业制造商乃至智能家居品牌的核心竞争力之一。面对市场上良莠不齐的铝材厂商,如何判断其口碑、专业度与质量稳定性?以…

【软件测试】移动应用测试用例以及如何用于测试

移动应用程序已成为我们日常生活不可或缺的一部分,全球数百万用户利用它们进行各种活动。本文将讨论不同类型的测试用例以及如何在移动应用测试中使用它们。 什么是测试用例? 测试用例是一套逐步进行的指令,用于验证软件系统的某个功能或特…

技术分享 | 用Dify搭建个人AI知识助手

将分散的技术资料、产品手册、行业干货汇集成可随时调用的“知识中枢”​ 对技术人员而言,知识资产常陷入“碎片化散落 + 低效复用”的恶性循环:技术分享邮件躺卧邮箱、产品文档散落Notion 等平台,面对产品使用、技…

2026全国出国雅思培训机构深度测评排行榜

雅思考试作为出国深造的核心门槛,近年来报考人数持续攀升,但雅思培训选课难题却困扰着全国千万考生——北京朝阳区、上海徐汇区、广州天河区、深圳南山区、成都锦江区等不同区县的考生,均面临相同困境:优质教育机构…

测试数据验证的3大难题,这个工具全搞定!

在测试过程中,涉及数据验证时,我们常常面临三大难题:数据不准确、处理速度慢、结果难以复现。 今天,我要强推一个神器,它让我的数据测试工作变得轻松又高效! 一 相关背景 模块化开发和分布式服务器部署盛…

2026年有名的智慧用电生产厂家,飞凌佳杰实力不容小觑!

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为校园及各类人员密集场景的用电安全升级提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:北京飞凌佳杰电子科技有限公司 推荐指数:★★★…

【Linux基础开发工具 (二)】详解Linux文本编辑器:Vim从入门到精通——完整教程与实战指南(上) - 详解

【Linux基础开发工具 (二)】详解Linux文本编辑器:Vim从入门到精通——完整教程与实战指南(上) - 详解2026-01-23 14:53 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: nor…

从单机到并发:深度解析单线程 Socket 服务器的局限性与挑战

在网络编程的入门阶段,我们通常会实现一个简单的 TCP 回显服务器。虽然基本的 socket-bind-listen 流程能够打通通信链路,但在实际应用中,单线程服务器往往会遇到“一夫当关,万夫莫开”的尴尬境地。 本文将结合实验代码,剖析单线程服务器的阻塞点,并探讨并发处理的必要性…

靠谱的高压开关柜服务商厂家,得润电气排名第几?

问题1:如何判断一家高压开关柜厂家是否专业?专业厂家和普通厂家的核心区别是什么? 判断高压开关柜厂家是否专业,需从资质认证、技术沉淀、生产标准与服务体系四大维度综合考量。首先看资质,是否具备国家高新技术企…

2026年汽车后视镜热弯模具选购指南:实力厂家参考,硅酸钙保温板/铝行业精炼用热鼎盘,汽车后视镜热弯模具直销厂家有哪些

行业现状与模具核心价值 随着汽车行业对轻量化、安全性的需求升级,汽车后视镜热弯模具作为精密成型的关键工具,其技术精度与稳定性直接影响后视镜的曲面曲率、光学性能及抗冲击能力。当前,国内模具市场呈现“技术迭…

突破单线程瓶颈:多进程并发服务器的设计与实现

在网络编程中,单线程服务器最致命的问题在于其“阻塞性”——当服务器正在与一个客户端通信时,其他所有连接请求都会被拒之门外。 为了实现真正的并发,我们需要引入多进程模型。本文将深入探讨如何利用 Linux 的进程创建机制,构建一个高性能的并发服务器。 一、 多进程并发…

2026年1月对辊破碎机厂家权威推荐TOP5选型实战指南

2026年开年以来,基建复苏与矿产加工行业的绿色转型需求持续攀升,对辊破碎机作为细碎作业的核心装备,其运行稳定性、物料适配范围及综合运维成本成为企业采购的核心考量维度。本文结合2026年行业最新技术趋势与市场反…

财政政策和货币政策协同影响货币形态的具体案例有哪些?

财政政策与货币政策的协同,本质是财政的 “资金投向引导”与货币的 “流动性供给 / 调控”形成合力,进而影响不同货币形态的流通地位、投放效率和应用边界。以下是针对法定货币、商品货币、央行数字货币(CBDC)、去中心化加密货币四…

深圳研究生留学中介top10权威盘点,资质正规服务可靠

深圳研究生留学中介top10权威盘点,资质正规服务可靠一、深圳学子如何甄选可靠的研究生留学中介?在2026年1月10日的当下,计划赴海外攻读硕士学位的深圳学子,普遍面临几个核心关切:如何从众多留学服务机构中筛选出资…

2026年智慧用电制造企业排名,飞凌佳杰服务优势全展示

在智慧用电领域蓬勃发展的当下,如何选择可靠的服务提供商,成为校园、企业等用电场景关注的核心问题。以下结合不同类型需求,为你推荐值得关注的智慧用电制造企业,助力破解安全与能耗难题。 一、校园全场景定制型 北…