这是2018年SIGMOD的上的一篇文章,本文提出了FASTER模型,在工作负载大于内存大小的情况下,该模型能够提供较好的性能保证(比纯驻留内存的模型好)。
本文亮点:局部性,HybridLog。
下图展示了FASTER的架构,它包含一个hash索引和一个记录分配器。我们主要关注记录的分配。

文章定义了一个统一的逻辑地址空间,这个地址空间管理主存和辅存,换言之,主存和辅存被一层逻辑地址封装了。

逻辑地址较小的是磁盘区域,逻辑地址较大的是内存区域。
下面介绍HybridLog,这是记录存储的核心。在HybridLog的结构中,逻辑地址被分为三个连续的区域:1)stable region。2)read-only region。3)mutable region。顾名思义,stable region就是持久性存储的区域,这是磁盘上的区域。read-only region是内存上的区域,该区域的记录智能被读取,不能就地修改。若想修改,需要将该记录读到可变区域的末尾,然后再更新。mutable region中的数据可以就地被修改。
问题是为什么我们需要read-only region?
这是因为在将内存中的数据flush到辅存上的时候,我们需要确保此时没有线程正在访问该区域的数据。而read-only region正是保证了这一点,保证了flush的时候,操作是安全的。read-only offset就像一个指示器,指示该区域可以被安全地flush到磁盘中。除了这个功能之外,read-only region还像一个second-chance cache,因为如果线程需要更新read-only region的数据,可以直接从内存中读取,而不必从磁盘中读取。