当前位置: 首页 > news >正文

【MyDB】5-索引管理之 1-索引管理思路概览

【MyDB】5-索引管理之 1-索引管理思路概览

  • 前言
  • 总体架构
    • 协作流程
      • 1. **插入键值(Insert)**
      • 2. **范围查询(SearchRange)**
    • Node结构
    • 节点分裂逻辑
  • 参考资料

[!tip]

代码位于top/xianghua/mydb/server/im/中

前言

IM,即 Index Manager,索引管理器,为 MYDB 提供了基于 B+ 树的聚簇索引。

在依赖关系图中可以看到,IM 直接基于 DM,而没有基于 VM。索引的数据被直接插入数据库文件中,而不需要经过版本管理。

本节不赘述 B+ 树算法,更多描述实现。

总体架构

MyDB 的索引通过 B+ 树实现,分为两个核心模块:

  1. BPlusTree.java
    负责全局树管理(根节点、并发控制、数据持久化交互)。
  2. Node.java
    封装单个节点的数据结构与本地操作(插入、分裂、查询

其职责分别如下

模块职责关键方法
BPlusTree- 管理根节点UID
- 插入/搜索入口
- 递归操作调度
- 根节点分裂处理
insert(), searchRange(), updateRootUid(), searchLeaf()
Node- 节点数据序列化
- 键值操作(插入、分裂)
- 范围查询
insertAndSplit(), leafSearchRange(), split(), searchNext()

协作流程

1. 插入键值(Insert)

User BPlusTree Node DataManager insert(key, uid) 获取当前根节点 rootUid 递归调用 insert(rootUid, key, uid) 插入键值,检查是否分裂 插入新节点 (dm.insert) 返回新节点信息 (newSon, newKey) 若根节点分裂,创建新根 返回空结果 alt [需要分裂] [无需分裂] 完成插入 User BPlusTree Node DataManager

2. 范围查询(SearchRange)

BPlusTree.searchRange
获取根节点 rootUid
searchLeaf 递归查找叶子节点
Node.leafSearchRange 遍历叶子节点
是否覆盖全部范围?
通过 siblingUid 跳转下一节点
返回结果列表

Node结构

// Node 内存布局(字节级操作)
[LeafFlag(1)][KeyNumber(2)][SiblingUid(8)][Son0(8)][Key0(8)]...[SonN(8)][KeyN(8)]
  • 直接操作字节数组(通过 SubArray),避免对象序列化开销。
  • 静态方法(如 setRawKthKey)实现高效字段读写。

节点分裂逻辑

  • 触发条件:节点键数达到 2 * BALANCE_NUMBER(默认 64)。
  • 分裂过程
    1. 创建新节点,复制原节点后半部分键值。
    2. 原节点保留前 BALANCE_NUMBER 个键,新节点包含剩余键。
    3. 更新原节点的 siblingUid 指向新节点。
    4. 返回新节点的首个键和 UID,供父节点插入。

八、总结

MyDB 的 B+ 树索引通过 分层设计职责分离 实现高效管理:

  • BPlusTree 是全局指挥官,负责树高变化和跨节点调度。
  • Node 是战术执行者,专注单节点的数据操作与持久化。
  • 协作关键:通过 UID 引用和递归调用,结合 DataManager 实现磁盘-内存数据桥梁。

参考资料

索引管理 | EasyDB (blockcloth.cn)

MYDB 8. 索引管理 | 信也のブログ (shinya.click)

相关文章:

  • Centos7配置本地yum源
  • 大白话读懂java对象创建的过程
  • 织梦DedeCMS数据库表说明大全
  • django入门教程之request和reponse【二】
  • Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(六)
  • 联想拯救者触摸板会每次开机都自动关闭、联想笔记本触摸板关闭、笔记本电脑触摸板自动关闭的解决方法
  • 演员马晓琳正式加入创星演员出道计划,开启演艺事业新篇章
  • 基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统
  • @maptalks/gl-layers中的VectorTileLayer的setStyle属性的全部line配置
  • 群体智能优化算法-模拟退火优化算法(Simulated Annealing, SA,含Matlab源代码)
  • 前端Tailwind CSS面试题及参考答案
  • 实时时钟芯片HYM1381的使用(51单片机)
  • 在K8S中挂载 Secret 到 Pod
  • 【C#知识点详解】ExcelDataReader介绍
  • day3 微机运算基础
  • 【LINUX操作系统】 动静态库的链接原理
  • 指令系统2(Load/Store 指令)
  • 打靶笔记:利用站点Install功能连接Kali本地数据库
  • 传输层协议 — TCP协议与套接字
  • Practical Data Science with SAP Machine Learning Techniques for Enterprise Data
  • 见微知沪|科学既要勇攀高峰,又要放低身段
  • 马上评|重病老人取款身亡,如何避免类似悲剧?
  • 再现五千多年前“古国时代”:凌家滩遗址博物馆今开馆
  • 曾犯强奸罪教师出狱后办教培机构?柳州鱼峰区教育局回应
  • 科普|男性这个器官晚到岗,可能影响生育能力
  • 大外交|巴西总统卢拉第六次访华签署20项协议,“双方都视对方为机遇”