MongoRocks 是基于著名的开源KV数据库RocksDB实现的一个MongoDB存储引擎,借助rocksdb的优秀特性,MongoRocks能很好的支持一些高并发随机写入、读取的应用场景。
MongoDB支持多种引擎,目前官方已经支持了mmapv1、wiredtiger、in-Memory等,而MongoRocks则是第三方实现的存储引擎之一(对应图中红框的位置)。
MongoDB 从 3.0 版本 开始,引入了存储引擎的概念,并开放了 StorageEngine 的API 接口,为了方便KV存储引擎接入作为 MongoDB 的存储引擎,MongoDB 又封装出一个 KVEngine 的API接口,比如官方的 wiredtiger 存储引擎就是实现了 KVEngine 的接口,MongoRocks 也是实现了KVEngine的接口。
目前 MongoRocks 在业内已广泛使用,诸如缓存冷数据等均使用 MongoRocks 引擎。
(1)时延毛刺要求极高的场景
实践发现 WiredTiger 引擎的 cache 大于索引大小时性能表现出色,但索引不完全在内存时数据库会触发 eviction,此时请求的延迟会大幅增大,而 MongoRocks 性能平稳很多。
(2)多表场景
在 WiredTiger 引擎中,每个表和索引被单独存储为一个文件,当表个数过多时硬盘上会产生大量小文件,严重影响性能。从实践经验来看,当集合个数达到数千个以后数据库的性能将变差。而 MongoRocks 引擎不会为每个表创建一个文件,可以避免该问题。
(3)冷数据存储场景
冷数据的场景下,为成本考虑,通常会将冷数据存放在 SATA 等廉价存储介质上,WiredTiger 引擎在机械硬盘上性能表现也不如意,特别是 eviction 情况下,而 MongoRocks 引擎会将 I/O 的随机写转换为顺序写,这对机械硬盘非常友好。