ArkDB review

本文简短地记录下 ArkDB 个人认为的一些“innovation”,原文请看 ArkDB: A Key-Value Engine for Scalable Cloud Storage Services

PID 泛化

在原 Bw-Tree的设计中,PID只是 page table 中的编号,作为实际节点地址(ADDR)的key使用,而在ArkDB中 PID 是有实际意义的,它和底层的 append-only 的文件系统结合,是 (ExtentID, Offset, PageSize) 元组的表示,这显然是底层文件系统的一个“handle”;同样的,原本的 ADDR 表示节点的位置,比如 (file_name, offset),也被扩展成了一个结构,其成员作用于 GC 和“快照”查找等,例如:这里的GC清理的是所有不再被访问的版本,这就依赖于结构中的 timestamp,不需要区分 delta page 还是 base page

冷热分离

考虑到 delta page 和 base page 的生命周期和大小的不同,将 delta page 和 base page 写入到不同的地方,这可以减少 GC 带来的写放大,毕竟 delta page 生命周期很短,GC 也会更频繁,混杂在一起会导致 base page 也迁移

同时缓存也使用了不同的淘汰算法,base page 使用 clock 算法,delta page 使用 FIFO