Skip to content

Latest commit

 

History

History
35 lines (18 loc) · 1.68 KB

6.modification-records.md

File metadata and controls

35 lines (18 loc) · 1.68 KB

2.5 记录的修改

记录的修改主要分为插入、更新和删除三种场景。

数据插入

数据插入在存储中的流程可以简单概括为以下几步:

  1. 找到空闲块。

  2. 把记录插入块的空闲位置。

  3. 维护新插入记录的偏移。

如下图所示,先从未使用的空间中找到可以插入的位置,写入记录后,再把记录相对于块的偏移写入到偏移表中进行维护。

数据插入

数据删除

数据删除一般在数据库中的实现,并非把实际的数据内容马上从存储介质中擦除,而是在需要删除的记录中打上一个删除的标记,例如删除了记录 1,则把记录 1 前面的一个字节或一个 bit 标记为 delete,然后数据库系统再根据具体的场景(如 GC 流程),再统一回收这部分的空间。

数据删除

数据修改

记录的修改主要有两种场景:

  • 定长记录的修改

    定长记录的修改,因为记录定长,因此可以使用覆盖写的方式进行修改,把修改后的数据在原地址中覆盖写入。

  • 变长记录的修改

    变长记录的修改,因为修改后数据的长度可能会发生变更,所以不能使用覆盖写这种方式。而是会在块中重新查找空闲的位置,把修改的记录写入到新位置中,最后对原记录打上删除的标记,避免旧数据被访问。