Todis的性能那么强,真是因为分布式Compact吗?

首先,Todis(外存版 Redis) 的性能优势,主要来自底层的ToplingDB存储引擎,ToplingDBfork 自 RocksDB,增加了很多改进,修改了一些 bug,其中有很多修改也PR 给了上游 RocksDB。目前 Todis 仍在邀请内测中,可通过7分钟视频教程快速开始。

ToplingDB的性能优势,主要来自下面五点:

Topling CSPP MemTable

Topling Fast SST

Topling Zip SST

Topling 分布式 Compact

更好的 Compact 策略

Topling CSPP MemTabl

除了不支持用户自定义的 Comparator,Topling CSPP MemTable在各个方面都压倒性地优于RocksDB SkipList:单线程更快、多线程scale 更好、内存消耗更小。

Topling Fast SST

为了性能,Topling Fast SST不使用压缩,索引结构使用了 CSPP Trie,在 Todis 配置中,L0 和 L1 就使用了Topling Fast SST

Topling Zip SST

Topling Zip SST使用了 Topling内存压缩算法,压缩率更高(相比 zstd),索引和数据在内存中的形态都是压缩的,搜索索引和提取数据都直接在压缩的数据上执行,可以精确提取每条数据。单线程可支持数十万甚至上百万的 QPS。

这种内存压缩算法压缩数据时需要的计算量较大,所以仅在 L2 及更低层使用,并且通过分布式 Compact转移到专用的计算集群。

这样,在 DB 结点上,充分发挥该算法的优势,可以使用更低规格的硬件,实现更高的性能,达到 5 倍以上的性价比。

Topling 分布式 Compact

首先,分布式 Compact是基于共享存储存算分离架构,进一步把计算分为前台计算后台计算,DB 结点执行前台计算,Compact 计算集群执行后台计算,我们称之为前后分离

在 DB 结点上,分布式 Compact相当于通过一个 RPC 远程调用,把相应的 Compact 任务,发送到计算集群中的结点上执行。

在这种架构之下,Topling Zip SST就是天选之子!但其实是Topling Zip SST催生了分布式 Compact——早在 2018 年,我就有了分布式 Compact 的想法,因为Topling Zip SST对它有迫切需求!

更好的 Compact 策略

RocksDB 通过 subcompact 把一个 Compact 任务划分成多个子任务,通过多线程并发执行,我们对此进行了一些改进:Level 1 Sub CompactionGetRandomInteranlKeysAppend

通过这两个改进,我们一方面减小了读放大和写放大,同时可以让分布式 Compact 更充分地并行化。

以下,是 Todis 与 阿里云 Tair 的测试对比,如需深入了解,可查看测试详情


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容