通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

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

ToplingDB的分布式Compact和RocksDB的RemoteCompaction不同之处:1、可靠性不同;2、可观测性不同等。可靠性不同是指 RocksDB 的 RemoteCompaction 还处在 Experimental 状态,ToplingDB 的分布式 Compact 已在托管 Todis 中使用多时。

一、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数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

相关文章