基于 LSM-tree 的 KV 数据库性能优化近年来,由于非结构化数据比例的不断提升以及数据密集型应用场景的逐渐增加,越来越多的企业采纳 KV 数据库来支撑其上层应用的数据存储和访问服务。但是随着数据量和用户访问量的不断增长,KV 数据库也面临着来自性能方面的考验。本文主要讨论了基于 LSM-tree 的 KV 数据库系统中读写性能优化问题,具体包括减少系统的写放大来提升系统的写性能,减少布隆过滤器的误报率来提升系统的读性能以及针对数据频繁更新场景进行相关的优化。本文主要讨论内容与贡献如下:1)基于 LSM-tree 的 KV 数据库写性能优化由于数据量以及写密集型应用场景的逐渐增多,越来越多的企业选择基于 LSM-tree 的 KV 数据库作为底层的存储引擎。尽管 LSM-tree 具有出色的写性能,但是面对日益增加的用户写请求,系统仍然需要不断提升自身的写性能。LSM-tree会定期对外存中的数据进行排序整理,而这一操作会带来严重的写放大问题。一方面,写放大问题会造成系统整体吞吐量的下降;另一方面,当外存使用SSD 时,严重的写放大会大幅降低其使用寿命,进而会影响系统的可靠性并带来高昂的存储开销。因此减少写放大可以节约出更多的 I/O 资源去服务用户请求,并且还可以降低数据的存储成本。针对这个问题,本文提出了一种新的数据结构GLS,并在此基础上建立了一套新的数据维护模式。通过理论分析,相比于 LSM-tree,GLS 可以有效的减少写放大。随后,本文实现了一个基于 GLS 的 KV 数据库 FlameDB。通过实验发现 FlameDB 减少了原系统的写放大,有效的提升了系统的写性能。2)KV 数据库的布隆过滤器优化随着用户访问量的急剧增加,KV 数据库在读性能方面将迎来新的挑战。为了提升系统的读性能,很多的 KV 数据库在设计时采纳了布隆过滤器来过滤一些不必要的外存访问。但是这些传统的布隆过滤器分配策略没有充分考虑到数据的访问特点,因此并不高效。为此,本文针对数据访问特点设计了新的布隆过滤器分配策略。本文首先分析了基于 LSM-tree 的 KV 数据库在均匀查询下外存数据的访问特征,并针对该场景提出了分层异构的布隆过滤器分配策略。通过建模分析和实验测试,相对于传统的布隆过滤器分配策略,分层异构的布隆过滤器分配策略可以有效的减少数据查询时的外存访问次数,相应的提升了系统的读性能。然后针对任意分布的查询请求,本文提出了通用的布隆过滤器分配策略。通过实验测试,通用的布隆过滤器分配策略比传统的布隆过滤器分配策略...