# ToplingDB **Repository Path**: mirrors/ToplingDB ## Basic Information - **Project Name**: ToplingDB - **Description**: ToplingDB 是由北京拓扑岭科技有限公司出品的一款开源数据库引擎 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: memtable_as_log_index - **Homepage**: https://www.oschina.net/p/toplingdb - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2022-01-18 - **Last Updated**: 2026-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## ToplingDB: 一个外存上的持久化 Key-Value 存储引擎 ToplingDB 由[北京拓扑岭科技有限公司](https://topling.cn)开发与维护,从 [RocksDB](https://github.com/facebook/rocksdb) 分叉而来,详情参考 [ToplingDB 分支名称约定](https://github.com/topling/toplingdb/wiki/ToplingDB-Branch-Name-Convention)。 ## 快速开始 ToplingDB 需要 C++17,推荐 gcc 8.3 以上,或者 clang 也行。 ToplingDB 比 RocksDB 快得多,您可以自己快速验证: ### Compile & run db_bench ```bash sudo yum -y install git libaio-devel gcc-c++ gflags-devel zlib-devel bzip2-devel libcurl-devel liburing-devel snappy-devel jemalloc-devel #sudo apt-get update -y && sudo apt-get install -y libjemalloc-dev libaio-dev libgflags-dev zlib1g-dev libbz2-dev libcurl4-gnutls-dev liburing-dev libsnappy-dev libbz2-dev liblz4-dev libzstd-dev git clone https://github.com/topling/toplingdb cd toplingdb make -j`nproc` db_bench DEBUG_LEVEL=0 sudo make install PREFIX=/some/path # default is /usr/local ``` 以上编译命令执行后,运行 [db_bench.sh](db_bench.sh)(需要[端口 2011](https://github.com/topling/rockside/blob/master/sample-conf/db_bench_enterprise.yaml#L4 "内嵌的 http web 服务使用端口 2011")),然后使用 ToplingDB:[原生 C++](https://github.com/topling/rockside/wiki/101 "典型场景是从 rocksdb 迁移过来)"),也支持 [Java](https://github.com/topling/rockside/wiki/SidePlugin-Java-Binding "内置在本 github 仓库中") 和 [Rust](https://github.com/topling/rust-toplingdb "另外的专门的 github 仓库")。 ## 简单介绍 ToplingDB 的子模块 **[rockside](https://github.com/topling/rockside)** 是 ToplingDB 的入口,详情参考 **[SidePlugin wiki](https://github.com/topling/rockside/wiki)**。 ToplingDB 兼容 RocksDB API 的同时,增加了很多非常重要的功能与改进: 1. [SidePlugin](https://github.com/topling/rockside/wiki) 让用户可以通过 json/yaml 文件来定义 DB 配置 1. [内嵌 Http](https://github.com/topling/rockside/wiki/WebView) 让用户可以通过 Web 查看几乎所有 DB 信息,这是 [SidePlugin](https://github.com/topling/rockside/wiki) 的一个子功能 1. [内嵌 Http](https://github.com/topling/rockside/wiki/WebView) 让用户可以无需重启进程,[在线修改](https://github.com/topling/rockside/wiki/Online-Change-Options) 各种 db/cf 配置,包括修改 DB 元对象(例如 MemTabFactory, TableFactory, WriteBufferManager ...) 1. 为提升性能和可扩展性而实施的很多重构与改进,例如 MemTable 的重构 1. MemTable 可作为 WAL 的索引,消除 MemTable 到 L0 SST 的 Flush,减小写放大,对大尺寸 MemTable 很友好 1. 对事务处理的改进,特别是 TransactionDB 中 Lock 的管理,热点代码有 5x 以上的性能提升 1. MultiGet 中使用 fiber/coroutine + io_uring 实现了并发 IO,比 RocksDB 自身的异步 MultiGet 又快又简洁,相应的代码量要少 100 倍不止 1. [去虚拟化](https://github.com/topling/rockside/wiki/Devirtualization-And-Key-Prefix-Cache-Principle),消除热点代码中的虚函数调用(主要是 Comparator),并且增加了 Key 前缀缓存,参考相应 [bechmarks](https://github.com/topling/rockside/wiki/Devirtualization-And-Key-Prefix-Cache-Benchmark) 1. 点查和迭代器扫描中的 Zero Copy,对大 Value 效果尤其显著 1. 将现存的 RocksDB 组件作为**内置插件**纳入 SidePlugin 体系,例如 Cache, Comparator, TableFactory, MemTableFactory... 1. 内置 Prometheus 指标的支持,这是在[内嵌 Http](https://github.com/topling/rockside/wiki/WebView) 中实现的 1. 修复了很多 RocksDB 的 bug,我们已将其中易于合并到 RocksDB 的很多修复与改进给上游 RocksDB 发了 [Pull Request](https://github.com/facebook/rocksdb/pulls?q=is%3Apr+author%3Arockeet) ## ToplingDB 云原生数据库服务 1. [MyTopling](https://github.com/topling/mytopling)(MySQL on ToplingDB), [阿里云上的 MyTopling](https://market.aliyun.com/products?k=mytopling) 1. [Todis](https://github.com/topling/todis)(Redis on ToplingDB) ## ToplingDB 组件 通过 SidePlugin 的实现机制,插件(组件)可以与 ToplingDB 的核心代码实现物理隔离 1. 可以编译为一个单独的动态库,实现运行时动态加载 1. 应用代码不需要为插件做任何改变,只需要修改 json/yaml 配置 ### git 仓库的目录结构 ```bash toplingdb \__ sideplugin \__ rockside (submodule , sideplugin core and framework) \__ topling-zip (auto clone, zip and core lib) \__ cspp-memtab (auto clone, sideplugin component) \__ cspp-wbwi (auto clone, sideplugin component) \__ topling-sst (auto clone, sideplugin component) \__ topling-rocks (auto clone, sideplugin component) \__ topling-zip_table_reader (auto clone, sideplugin component) \__ topling-dcompact (auto clone, sideplugin component) \_ tools/dcompact (dcompact-worker binary app) ``` 仓库 | 权限 | 说明 -------------- | ---------- | ----------- [ToplingDB](https://github.com/topling/toplingdb) | public | 顶级仓库,分叉自 [RocksDB](https://github.com/facebook/rocksdb),增加了我们的改进与修复 [rockside](https://github.com/topling/rockside) | public | ToplingDB 子模块,包含: