千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > ToplingDB的分布式Compact和RocksDB的RemoteCompaction有什么不同?

ToplingDB的分布式Compact和RocksDB的RemoteCompaction有什么不同?

来源:千锋教育
发布人:xqq
时间: 2023-10-13 10:47:39 1697165259

一、ToplingDB的分布式Compact和RocksDB的RemoteCompaction不同之处

1、可靠性不同

RocksDB 的 RemoteCompaction:还处在 Experimental 状态。ToplingDB 的分布式 Compact:已在托管 Todis 中使用多时,得到了充分的验证。

2、可观测性不同

RocksDB 的 RemoteCompaction:只能查看 LOG。ToplingDB:通过引擎内嵌 Web,支持分布式 Compact 在线观测(长时间运行的演示实例)。

3、分布式 Compact 实现方式不同

ToplingDB 的分布式 Compact:是通过将整个数据集分为多个分片,每个节点上都进行 Partial Compaction 操作来实现的。Partial Compaction 仅对每个分片进行压缩,压缩完成后,将新的分片发送给其他节点进行合并,最终形成整体的压缩结果。RocksDB 的 Remote Compaction:是将需要压缩的 SST 文件从源节点传输到目标节点,并在目标节点上执行 Compaction 操作。这种方式允许在远程节点上执行 Compaction 操作,在网络传输和数据合并方面也更加有效率。

4、数据传输方式不同

ToplingDB 的分布式 Compact:采用点对点的方式进行数据传输,即将数据块直接从一个节点传输到另一个节点进行合并。在大规模分布式集群中,数据传输复杂度较高,可能会影响整个系统的性能。RocksDB 的 Remote Compaction:通过使用基于 TCP 的流式传输协议来实现数据传输。该协议允许数据在网络上传输时进行压缩和流式处理,同时减少了数据复制和存储所需的空间。

5、自适应压缩策略不同

ToplingDB 的分布式 Compact:通过使用自适应压缩策略来调整 Compaction 操作的执行时间和频率。该策略根据定期测量的读写负载动态调整 Compaction 的执行时间和频率,以最大化的优化数据库的性能。RocksDB 的 Remote Compaction:则采用了类似的自适应压缩策略,但该策略还考虑了目标节点的 CPU 和磁盘 I/O 负载等因素,以最小化对目标节点的负载影响。

二、RocksDB介绍

1、简介

Rocksdb 是基于Google LevelDB研发的高性能kv持久化存储引擎,以库组件形式嵌入程序中,为大规模分布式应用在ssd上运行提供优化。RocksDB不提供高层级的操作,例如备份、负载均衡、快照等,而是选择提供工具支持将实现交给上层应用。正是这种高度可定制化能力,允许RocksDB对广泛的需求和工作负载场景进行定制。

2、架构

RocksDB 是一个基于键值对存储接口的存储引擎库,其中键和值是任意字节流。RocksDB 将所有数据按排序顺序组织起来,常用的操作有Get(key), NewIterator(), Put(key, val), Delete(key), 和SingleDelete(key)。

RocksDB 的三个基本结构是memtable、sstfile和logfile。memtable是一种内存数据结构 – 新的写入被插入到memtable中,并且可以选择写入日志文件(又名。Write Ahead Log(WAL))。日志文件是存储上按顺序写入的文件。当 memtable 填满时,它会被刷新到存储上的sstfile,并且可以安全地删除相应的日志文件。对 sstfile 中的数据进行排序以方便查找键。

RocksDB使用布隆过滤器来判定键在哪个sst文件中。为了避免随机写,它将数据积累到内存中的memtable中,然后一次性刷写到硬盘中。RocksDB的文件是不可变的,一旦生成就不会继续写该文件。记录不会被更新或者删除,会生成一个新文件。这会在硬盘生成一些多余的数据,会需要数据库Compaction(压缩),Compaction文件会移除冗余的键值对并腾出空间。

3、RocskDB和LevelDB的区别

RocskDB结构和levelDB大同小异,只是多了一些改进:

增加了column family,有了列簇的概念,可把一些相关的key存储在一起内存中有多个immute memtalbe,可防止Leveldb中的 write stall(写停顿)可支持多线程同时compaction,理论上多线程同时compction会比一个线程compaction要快支持TTL过期淘汰机制flush与compation分开不同的线程池来调度,并具有不同的优先级,flush要优于compation,这样可以加快flush,防止stall对SSD存储做了优化,可以以in-memory方式运行增加了对 write ahead log(WAL)的管理机制,更方便管理WAL,WAL是binlog文件支持多种不同的compaction策略

三、ToplingDB介绍

1、简介

ToplingDB 是 较好ling 开发的 KV 存储引擎,fork 自 RocksDB,进行了很多改造,其中一个最重要的功能是分布式 Compact,将 Compact 从 DB 结点转移到由多个 DB 共享的计算集群中执行,实现了降本增效的目的。

2、Compact 中反查 DB

在一些应用中(例如 pika、kvrocks 等等),CompactionFilter 需要反查 DB(使用 DB::Get) 获取元数据,而在 Compact 服务中,只有 SST,没有 DB 对象,这就使得 CompactionFilter 无法在 Compact 服务中工作。

在 Todis 中,我们通过事先把 CompactionFilter 反查会用到的元数据捞出来,然后在 Compact 服务中访问,代替原本的 DB::Get,为此我们还对 Todis 的数据进行了针对性的编码。

在 kvrocks 中,因为数据的组织方式,无法通过编码在 Compact 服务中有效地代替原本的 DB::Get,所以,只有 metadata 才能支持分布式 Compact。kvrocks 中各种数据类型的 metadata 保存在一起,如果照搬 todis 的方案,事先捞数据,捞到的元数据很可能 99.9% 都是无用的元数据,例如 compact hash 数据时,事先捞出来的元数据可能大都是 string 数据。

延伸阅读1:数据库存储引擎是什么

存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT