Gbase8s 物理存储单元
chunk
chunk就是用于存储数据的连续磁盘空间,也就是存储数据库数据的文件或者裸设备,一个chunk是有可以是一个裸设备或者一个unix文件,一个chunk最大可以是4TB,最多可以有32767个chunk。
root chunk包含整个数据库保留也及系统表等信息,一般将物理日志、逻辑日志迁移到单独的dbspce上。
一个非root chunk主要存储表,索引的数据,划分为多个连续的exent。
page
数据页page是基本的存储单位,是最小的IO单元。即使我们只对一个page里的某一行记录进行修改,Gbase8s也需要对整个数据页进行读取到内存和写入到磁盘操作。磁盘的一个数据页读取到内存就会分配一个同样大小的内存page来存储。gbase支持不同大小的数据页:2KB、4KB、8KB、16KB。在大多数unix系统中,默认的数据页大小是2KB。在win系统中,默认页的大小是4KB。
页地址
校验位:占用2字节
标记位:标记该数据页存储的是表的数据还是索引
记录数计数器:占用2B,记录该数据也总共存储的记录数
第一个空槽的指针Pfree:占用2B,用来指向页内第一个空闲的槽在页内的偏移值
空闲槽数量Nfree:占用2B,页内总共空闲的槽数量
下一页:4B,指向下一页的地址
上一页:占用4B,指向上页地址
数据页有两部分组成,时间戳和每个槽的描述信息
槽表:为slots描述信息,数据页中有多少slots,则会对应多少个slots bitmap,每个占用4B,记录slots在页内
的偏移地址和长度,得当记录被删除时,只是将其中的占用长度设置为0,在物理上并没有将记录信息清空
一个数据页最多能存储255个slots。
一个数据页的页头和页尾占用的总空间为28B+ n*4B, 28 + n(4+rowsize) = pageSize【页头占用24B,页尾timestamp 4B,slots table 有多少条记录就会有多少个slots bitmap,记录偏移与长度】
无不读书神仙,有打瞌睡豪杰。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!