5作者: rockeetterark6 个月前
作为 TerarkDB(2019 年被字节跳动收购)的创建者,我近年来开发了 ToplingDB。 ToplingDB 源于 RocksDB,我们用更高效的替代方案替换了几乎所有组件(db_bench 显示 ToplingDB 比 RocksDB 快约 8 倍): * MemTable:SkipList 被 CSPP(Crash Safe Parallel Patricia trie)取代,速度提高了 8 倍。 * SST:BlockBasedTable 被 ToplingZipTable 取代,它通过可搜索的压缩算法实现,体积非常小且速度快,通常每次查找少于 1 微秒: * 键/索引使用 NestLoudsTrie(一个多层嵌套 LOUDS 简洁 trie)进行压缩。 * SST 中的值与比 zstd 更好的压缩比一起压缩,并且可以以 1GB/秒的速度解压缩单个值。 * 不再需要 BlockCache,避免了双重缓存(BlockCache &amp; PageCache) 其他热点也得到了改进: * 省略了将 MemTable 刷新到 L0 的过程,大大减少了写放大,并且对大型(GB 级)MemTable 非常友好 * MemTable 充当“WAL 日志中值的位置”的键索引 * 由于 WAL 文件内容几乎总是在页面缓存中,因此可以通过 mmap 有效地访问值内容 * 当发生刷新时,MemTable 被转储为 SST,而 WAL 被视为 blob 文件 * CSPP MemTable 使用整数索引而不是物理指针,因此内存中格式与文件内格式完全相同 * 用于搜索候选 SST 的前缀缓存和用于迭代器扫描的前缀缓存 * 将固定长度的键前缀缓存到一个数组中,并将其作为 uint 数组进行二分查找 * 分布式压缩(优于 rocksdb 的远程压缩) * 优雅地支持 MergeOperator、CompactionFilter、PropertiesCollector... * 开箱即用,大大减少了开发工作量 * 非常容易在许多数据库节点的现成实例上共享压缩服务 有用的额外功能: * 通过 json/yaml 配置:可以配置几乎所有功能 * 可选的嵌入式 WebView:在 Web 浏览器中显示数据库结构,像动画一样刷新页面 * 通过 http 在线更新数据库配置 MySQL 集成,ToplingDB 已通过 MyTopling 集成到 MySQL 中,MyTopling 源于 MyRocks,并进行了重大改进,类似于 ToplingDB 对 RocksDB 的改进: * WBWI(WriteBatchWithIndex):类似于 MemTable,SkipList 被 CSPP 替换,速度提高了 20 倍(加速超过 MemTable)。 * LockManager &amp; LockTracker:速度提高了 10 倍 * 编码和解码:速度提高了 5 倍 * 其他... 与 InnoDB 相比,MyRocks 有许多缺点,而 MyTopling 在几乎所有方面都优于 InnoDB——除了功能差异。 我们为 RocksDB 创建了大约 100 个 PR,其中大约 40 个被接受。我们的 PR 主要是“小”改动,因为大的改动不太可能被接受。 ToplingDB 已部署在众多生产环境中。 欢迎大家使用 ToplingDB &amp; MyTopling,并在 <a href="https://github.com/topling/toplingdb/discussions">https://github.com/topling/toplingdb/discussions</a> 中进行讨论