面试题答案
一键面试元组插入
- 页面结构:Zheap引擎使用页面(page)来存储元组。每个页面有一定的结构,包含元组头、空闲空间等部分。新插入的元组会在页面的空闲空间中分配位置。
- 元组头信息:插入时会在元组头中记录一些关键信息,如元组的状态、指向其他版本元组的指针等(若涉及多版本机制)。
- 空闲空间管理:页面会维护一个空闲空间链表,插入元组时从链表中寻找合适大小的空闲块来存放新元组。如果页面空闲空间不足,可能会引发页面分裂等操作以容纳新元组。
元组更新
- 多版本并发控制(MVCC):Zheap基于MVCC机制处理更新。当元组更新时,不会直接修改旧版本元组数据,而是创建一个新的元组版本。
- 旧版本标记:旧版本元组不会立即删除,而是标记为过时,通过元组头中的信息可以追溯到旧版本。
- 新版本插入:新的更新后的元组按照插入机制在页面合适位置插入,同时在元组头设置与旧版本的关联关系等信息,以便在事务处理和数据查询时能够正确获取到不同版本的元组数据。
元组删除
- 逻辑删除:在Zheap中,元组删除通常是逻辑删除。即不会立即从物理存储中移除元组,而是在元组头标记该元组为已删除状态。
- 空间回收:被逻辑删除的元组所占用的空间不会马上释放,而是被加入到页面的空闲空间管理体系中。当后续有新元组插入时,这些空间可以被重新利用。
- 垃圾回收:在合适的时机(例如事务结束或特定的垃圾回收操作触发时),数据库会进行垃圾回收,从物理存储中真正移除那些不再被任何事务引用的已删除元组,以释放存储空间。