AC-Key: Adaptive Caching for LSM-based Key-Value Stores
基于lsm树的键值存储(Key-Value store, Key-Value)的读性能受到了严重的影响,因为它采用了分级结构来提高写性能。缓存是提高读操作性能的主要技术之一。设计一个高效的缓存算法具有挑战性,因为层次结构掩盖了缓存特定键的成本和收益,并且点查找和范围查询操作之间的权衡使缓存替换决策进一步复杂化
我们提出AC-Key,一种自适应缓存的KeyValue存储来解决这些挑战。AC-Key管理3个不同的缓存组件,分别是键值缓存、键指针缓存和块缓存,并根据工作负载调整它们的大小。AC-Key利用一种新颖的缓存效率因子来捕获缓存成本和缓存收益的异构性。我们通过修改RocksDB来实现AC-Key。评估结果表明,AC-Key在各种工作负载下的性能均高于RocksDB,在相变工作负载下甚至优于最佳的离线固定大小缓存方案
一面临的问题
在为LSM-KVS设计有效的缓存方案时,存在两个主要的独特挑战。首先,LSM具有多级设计,每个缓存的键-值对(缓存好处)保存的存储I/O可能不同。KV对所在的层越深,如果缓存它,则可以节省更多的存储I/ o。另外,一个键值对所占用的DRAM缓存大小(缓存成本)也因键值大小的不同而不同。对缓存方案来说,评估成本和收益并做出相应的替换决策是一个挑战。第二,两种类型的读操作,即点查找和范围查询,具有完全不同的缓存需求。点查找更倾向于缓存单个键值对(KV)以提高空间效率[6,7]。如果值很大,另一种方法是缓存一个键-指针对(KP,其中指针指向值在存储中的位置)[7]。相比之下,范围查询不能通过缓存零星的单个键来实现,因此人们求助于缓存块来支持范围查询[5,6]。很难理清缓存KV、KP和块之间的权衡,因为它们每个都有特定类型的有利工作负载。此外,设计一个可以处理动态工作负载的自适应缓存方案更具挑战性
二研究内容
本文全面研究了缓存KV、KP和块之间的权衡,并提出AC-Key,一种基于lsm的键值存储的自适应缓存,以结合它们在处理不同工作负载方面的优势。AC-Key为每种类型的条目(KV、KP和block)使用一个des-ignated缓存组件。通过提出的分层自适应缓存算法,利用缓存指导缓存组件大小调整,动态调整每个缓存组件的大小。AC-Key利用一种新的缓存效率因子来量化不同的缓存成本和收益,以辅助缓存组件之间的边界调整以及每个缓存组件内的替换决策。
AC-Key Design
AC-Key(图4)缓存所有三种类型的条目——KV、KP和block——并为每种类型指定缓存组件。与上一节中描述的固定大小的方案不同,AC-Key为每个缓存组件提供了动态大小。通过提出的分层自适应缓存算法调整缓存大小。AC-Key综合考虑了不同缓存项的异构代价和收益以及LSM-KVS独特的层次化结构,利用缓存效率因子定量地指导缓存组件之间的缓存大小调整以及缓存组件内部的替换策略。