levy5307 / blog

https://levy5307.github.io/blog/
MIT License
0 stars 0 forks source link

WiscKey #54

Open levy5307 opened 3 years ago

levy5307 commented 3 years ago

https://levy5307.github.io/blog/WiscKey/

Background

目前最优秀的存储系统,很多有依赖于LSM-tree来构建。LSM-tree通过提高IO放大换取顺序写,以提升写入性能,这对于HDD磁盘这种random IO比sequential IO慢100倍的情况具有很大的优化效果。然而对于SSD却不一定有这么明显的效果,主要原因有三:

SSD的random IO和sequential IO性能相差不想HDD那么大。因此像LSM-tree这样通过大量顺序写来减少随机写的实现方式,可能会浪费磁盘带宽

SSD内部实现由很大的并行性,基于SSD的LSM-tree将会伤害这种并行性

LSM-tree由于比较大的写放大,会显著减少SSD磁盘寿命

基于上述几个因素,在SSD至上运行LSM-tree将会影响SSD性能,减少90%的吞吐并增加10倍的写入负载。尽管在SSD上运行LSM-tree比在HDD上会更快一些,但是SSD的潜能并没有被完全开发出来。

WiscKey

为了充分利用SSD的潜能,WiscKey有如下4个重要的ideas:

即将key和value分开,value存储在vLog中,key及对应的value地址存储在LSM-tree

为了处理范围查询过程中导致的value非顺序读,WiscKey充分利用了SSD多线程并行随机读性能高的特点,具体如下图,32线程随机读性能在请求64KB大小时,已和顺序读相差无几。

WiscKey实现了crash-consistency和garbage-collection技术以高效管理vLog

WiscKey移除了LSM-tree的WAL,提升了写入性能,并且不会影响一致性。

Design Goals