导语:微软开源的FasterKV存储引擎,使用Hash作为主索引,基于Log追加写和原地更新的混合存储方式,无锁并发,性能亮眼。
介绍
微软开源的FasterKV存储引擎,使用Hash作为主索引,基于Log追加写和原地更新的混合存储方式,无锁并发,性能亮眼。
而另一类基于log存储的存储是使用hash作为主索引组织数据,如Bitcask,因为Hash,不具备范围查询这种重要的功能,但可以在其他方面发挥优势,如极高的性能的点查,FasterKV也是这类引擎。
FasterKV首次出现在微软2018年在Sigmod上发表的论文,代码也开源,其主要应用场景如下:
Faster = Log + KV,即Faster分两部分,即FasterLog和FasterKV,前者是Log存储引擎,可作为独立的组件使用,后者是在Log之上的KV存储引擎,Log是C#实现,KV有C#和C++两版本。
FasterKV具有极高的点查读写性能,在单机、数据全match内存的情况下,达1.5亿QPS。
架构
数据组织上,Faster是一个全局的Hash主索引,放内存中,hash-entry不存key,指向Record-list,每个Record即KV对。
Record是从内存中分配(如基于jemalloc的分配器),或从log中分配,log会追加写,通过log刷盘进行数据的持久化。和传统的Log追加写的方式不同(所有的修改操作都创建一个record副本追加在log尾部),Faster在最热的log(cache在内存中)采用原地更新(in-place-update),从而避免log的快速增长,这也是Faster极高写性能的核心之一。但原地更新,没有WAL,有宕机丢数据的风险。
Faster支持多线程并发,但经过对Hash主索引的巧妙设计,以及Epoch-Protection并发控制框架,整个系统是无锁(latch-free)并发的。
主要特性
主要功能特性:
- 基本的点查读写,read、upsert(replace)、delete
- 原子性的RMW(read-modify-write)
- 多级存储,内存、SSD、Azure Storage
- 多线程,Multi-threaded session model access
- Non-blocking(incremental)checkpoint & recovery
- Key iteration & Full log scan
- 变长key和value
- Log compaction
- 【新】client-server & scale out