Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. 序列化:按照MNode在文件中的字段存储顺序,将所有属性信息序列化为一个ByteBuffer。
  2. 二进制数据分割与写入:将1中得到的ByteBuffer,根据文件Node的data body长度进行分割,分割过程中给每一个Extension Node分配空闲空间,数据分割与地址分配完成后,进行数据写入


两阶段提交

MTree文件为随机读写文件,为了保证文件的可用性和完整性,避免宕机时脏数据破坏文件,参照Mysql设计两阶段写功能。

创建tmp文件,作为磁盘buffer,记录目标地址和写入数据。

具体写入流程如下:

  1. 将目标地址刷入磁盘buffer,并将其设置为正在使用且未完成数据准备状态
  2. 将所有已修改的MNode的数据写入磁盘buffer
  3. 将磁盘buffer更新为正在使用且数据准备完成状态
  4. 将磁盘buffer的数据写入MNode在MTreeFile的指定位置(覆盖原有数据)
  5. 将磁盘buffer更新为未使用状态


磁盘buffer的格式设计

  1. 标记位,是否已正在被使用
  2. 标记位,是否已完成buffer数据的准备
  3. 目标地址
  4. 待刷盘数据,以链表为粒度一次性准备好

3.3. Node跨页读写

针对链表型的二进制数据,设计合理的数据结构,数据从磁盘读进内存时直接读入该数据结构并自动实现切割。

...