Building an Efficient Key-Value Store in a Flexible Address Space——论文泛读

EuroSys 2022 Paper 论文阅读笔记整理

问题

数据管理应用程序使用结构化文件存储其数据,其中数据通常经过排序以提供索引和查询服务。然而,在文件的地址空间中不支持原地插入和删除数据,是为了避免在排序文件中重复重写现有数据。应用程序通常使用额外的间接层,如映射表和日志,以支持原地更改。然而,这种方法会导致访问成本增加和复杂性过高。

现有方法局限性

现有文件系统已经提出了一些方法进行原地更新,但无法直接让应用程序使用:

  • 具有严格的块对齐要求。例如,使用`insert-range`操作将几个字节的记录插入排序的数据文件是不允许的。

  • 使用传统的地址空间索引对地址映射范围进行移动非常低效。将对齐的数据段插入文件需要将插入点后的所有现有地址映射都移动,这种移动操作的成本为 ()(其中 是文件中的 extents 或块数量)。

  • 常用的数据索引机制不能跟踪地址空间中移动的内容。例如,使用偏移量定位数据的索引在移动操作后将不再可用。

本文方法

本文提出了一种新颖的存储抽象,提供了一个灵活的地址空间,可以高效地执行任意大小数据的原地更新,如插入和删除。通过这些机制,应用程序可以在线性地址空间中以最小的复杂性管理排序数据。

  • 提出 FlexTree,源于 B+Tree,执行地址空间的移动操作需要 (log ) 的时间。

  • 基于 FlexTree 提出 FlexSpace,为数据管理应用程序提供持久的灵活地址空间的存储引擎。FlexSpace 实现为一个用户空间库,采用基于日志的空间管理以提高写入效率,并基于数据访问局部性执行碎片整理以降低成本,还采用逻辑日志记录 [50, 67] 以低成本提交元数据更新。

  • 基于 FlexSpace 构建了 FlexDB,这是一个 KV 存储,实现高效的数据管理应用程序。FlexDB 能够在持久的灵活地址空间中维护所有 KV 对的完全排序顺序,而无需使用复杂的间接方式或进行密集的数据重写。同时结构简单代码量少。FlexDB 是一个完全功能的 KV 存储,支持常规的点查询和范围查询操作,还集成了高效的机制来支持缓存、并发访问和崩溃一致性。

评估结果显示,FlexDB 大幅减少了数据重写的开销。与 RocksDB 和 KVell 相比,在读和写操作上分别实现了高达 16× 和 3.3× 的速度提升。

实验

实验环境:在一台配有Intel 10核Xeon Silver 4210 CPU和64GB RAM的服务器上运行。持久存储设备容量为960 GB的Intel Optane 905P SSD。工作站运行64位Linux操作系统,内核版本为5.10.32 LTS。

数据集:基准测试、Facebook 负载[1,5]、YCSB[10]

实验对比:FlexTree 性能(插入、追加写、查找、范围查找),FlexSpace 性能(随机插入、随机写、顺序写、不同写大小、读吞吐量)、FlexDB 性能(插入、查询、范围查询的吞吐量,可扩展性,GC开销)

总结

针对数据管理应用程序需要按序排序数据,但现有文件系统无法支持原地更新,导致大量的数据重写和为支持原地更新的额外间接层开销。本文提出基于B+Tree优化的FlexTree,将地址空间移动时间减少到 (log ) ;基于FlexTree提出FlexSpace,基于日志的空间管理以提高写入效率,基于数据访问局部性执行碎片整理以降低成本,基于逻辑日志记录 [50, 67] 以低成本提交元数据更新;在FlexSpace上实现了FlexDB,在持久的灵活地址空间中维护所有 KV 对的完全排序顺序,无需使用复杂的间接方式或进行密集的数据重写。

你可能感兴趣的:(论文阅读,论文阅读,KV存储)