基于Shannon Open-Channel的高性能KV存储应用实践
以键值对(Key-Value,简称KV)作为数据的存储方式,已经在很多场合得到了成功的应用。 KV存储以其直观性,降低了很多应用程序调用数据的复杂度,可以获得更高数据的存取效率,但也有其局限性。宝存科技的Open-Channel SSD(OCS)定义了一种通用的,高效率的主机端直接访问 FLASH 的标准接口,百度基于此开发出一套高性能KV存储引擎,有效减少写放大对设备性能的影响。 01 当前KV的不足之处 目前KV的成熟应用场合有: 内存数据库及其持久化,如Redis、Pika; 分布式文件存储系统底层存储接口,如Ceph中使用Bluestore; 关系数据库存储引擎,如MySQL中的MyRocks引擎。 由于单机内存总量的限制,内存KV有持久化到硬盘的需求,而基于硬盘的KV数据库多使用LSM Tree的方式在文件系统中实现(如RocksDB), 在实际应用中会出现以下问题: 极高的写放大。由于WAL的机制,一份数据落盘即出现“双写”的效果,产生1倍写放大。WAL(Write-ahead logging)记录了数据持久写入DB之前的变更,是传统数据库保证数据安全性的必要动作。由于compaction机制的存在,新数据的写入会导致旧数据被反复合并,最终一份数据的写入实际会造成2倍以上的写入量。业界存储设备已经全面转向SSD,而SSD的寿命是有限的