hash存储引擎杂谈

hash存储引擎

引言

最近开始频繁接触存储引擎的相关知识。传统的存储引擎基本两种:lsm或者B+树。前者的代表作是rocksdb,后者有mongodb使用的wiredtiger。

传统的两种存储引擎很好理解。比如rocksdb,其整个设计理念完全基于追加写,所有的文件都是不可修改的。lsm结构也代表的全序,使得可以生成一个interator来按顺序扫表,但是lsm结构最大的问题也在于其的多层级,一旦访问到冷数据,io次数相当于。对于写操作,写放大基本等于其层级数,相当于写一个数据,实际上做了10次该数据大小的IO。而compaction操作带来的性能抖动也是可观的。

对于B+树,更好理解,跨叶子后,几乎完全随机IO,叶子中插入数据需要搬运,整个内存设计均为页设计的。换句话说,内存中维护的不是某个数据对应的块位置,而是需要从顶层往底层查找到对应页,然后从磁盘获取这个页,再根据偏移量读出数据。从写吞吐上来说,肯定是完全不如rocksdb。

而现在公司开始谈论哈希引擎。顾名思义,哈希引擎即点对点,一个数据,直接通过内存索引对应到底层的数据块上。哈希引擎只在内存中存key的索引,磁盘中存key的值。若不加以特殊设计,key之间基本是无序的。

仿造rocksdb理念的哈希引擎

公司内部现在存在一个哈希引擎的底座,其设计大幅度的模仿的rocksdb。如

  1. 采用追加写的方式设计文件结构和写流程。
  2. 可以保证某个前缀相同的情况下key有序
  3. 提供compaction-filter

当初为什么这么做呢?主要还是想直接平替哈希引擎,但是又要兼容rocksdb的相关接口。我在之前的文章中提到过如何redis结构转kv,但是基于rocksdb的,现在想要哈希引擎替换掉,那么必须保证以上几点特性。

其整体架构如下

可以看到,内存索引节点是通过跳表保证key有序的,key根据某个业务提供的前缀哈希决定放在不同的跳表中。文件的设计如manifest等和rocksdb理念基本一致。

在写操作时,追加写af文件,写满af文件后,刷盘。假如重复写了某一个key,无需删除之前的ssd中的key,只需要追加写数据后维护内存索引的指向即可。


而compaction过程更加简单,取一定数量的block文件,扫一遍过滤到删除的或过期的旧key即可,然后生成一个新的。

显然,该架构实现十分自然,但是有很多缺点,比如内存大小占用过大,可能成为key数量的瓶颈。

在我学习公司该哈希引擎的时候,我也觉得是挺好的架构,应该很难从架构上去大幅度超过该引擎了,直到我们发现了aerospike。

aerospike

其源码几乎打开了我新世界的大门,真的很强大。建议后续ssd引擎的文章必读。

总览

aerospike也是一种哈希引擎,支持ssd存储值,内存中只存索引。我们经过多次测试,发现aerospike的性能非常夸张,几乎吊打了公司的哈希引擎。不管是内存占用、cpu使用还是延时与qps吞吐上,都非常强大。更强大的是,它根本没有compaction那种使得性能抖动的因素,在测试过程中性能非常稳定。

  1. 多模数据库,采用schema-less数据模型,一个db+多种应用API:KV、SQL、类JSON、搜索、图、向量检索等。
  2. 支持KV、事务、批量接口,最终一致 和 强一致性两种模型。
  3. 2层share nothing架构,伸缩强,无独立的管控节点,可用性高。
  4. 支持多种存储介质,实现极致成本:DRAM、PMEM、和SSD。

Aerospike数据库是一个实时、高性能的 NoSQL 数据库。专为不能有任何停机时间且需要高读写吞吐量的应用程序而设计。Aerospike 经过优化,可在能够高效存储大型数据集(千兆字节到千兆字节)的 NVMe SSD 上运行。Aerospike 是个多模数据库,可以部署为完全内存缓存数据库。Aerospike 提供键值、类似JSON 文档、图数据和向量搜索模型。在DB engine KV store上排名第7。

链接

后续准备写一批关于aerospike实现的文章。至于其简介相关链接放在下面供参考,不再赘述。

  1. Aerospike: Architecture of a Real-Time Operational DBMS, VLDB 2016
  2. https://aerospike.com/docs/
  3. 强一致性模型(SC)下单AZ故障
  4. Citrusleaf: A Real-Time NoSQL DB which Preserves ACID, PVLDB 2012
  5. https://www.slideshare.net/slideshow/aerospike-hybrid-memory-architecture/73004682#26
  6. https://www.slideshare.net/slideshow/aerospike-the-enterprise-class-nosql-database-for-realtime-applications/77043638?from_search=20#3
  7. https://www.slideshare.net/slideshow/aerospike-meetup-july-2019-big-data-demystified/153128898?from_search=30
  8. https://www.slideshare.net/slideshow/brian-bulkowski-aerospike/37529750?from_search=53#2
  9. https://www.slideshare.net/slideshow/what-a-modern-database-enablessrini-srinivasanpdf/258588703?from_search=76
  10. https://www.slideshare.net/slideshow/art-of-the-possibletim-faulkespdf/258588223?from_search=77
  11. https://www.slideshare.net/slideshow/aerospike-key-value-store/33335466#28
  12. https://www.slideshare.net/slideshow/getting-the-most-out-of-your-flashssds/31454203