RocksDB内部数据组织方式介绍及性能压测-转载

转载于:RocksDB内部数据组织方式介绍及性能压测 - 知乎

RocksDB属于嵌入式数据库,没有网络交互接口,必须和服务部署在同一台服务器。RocksDB是Facebook公司在LevelDB基础之上开发的一个嵌入式KV系统,在很多方面对LevelDB做了优化和增强,更像是一个完整的产品。比如:

  • LevelDB只能单线程合并文件,RocksDB可以支持多线程,充分利用服务器多核来加快文件合并的速度。
  • LevelDB只有一个Memtable,若Memtable满了还没有来得及Flush到sst文件,则会引起系统停顿,RocksDB可以根据服务器内存情况开辟多个Immutable Memtable,有效缓解这一问题。
  • LevelDB每次只能获取1个KV,RocksDB支持批量获取。
  • LevleDB不支持备份和恢复,RocksDB支持增量备份、全量备份和恢复。
  • RocksDB增加了对列族的支持。
  • RocksDB增加了Merge特性,对于Read-Modify-Update场景,不需要Read操作,只需要写入修改的类型和数据,在Get、Iterator、Compaction操作的时候进行具体的Merge操作。
  • 在RocksDB中,许多参数开关可动态调整,例如:Index Block和Bloom Filter Block是否加载到内存、L0文件的Index Block和Bloom Filter Block是否常驻内存、触发Flush的Slowdown和Stop行为的L0文件数目。
  • 可监听RocksDB内部的多种行为,包括Immutable Memtable Flush到L0 sst文件结束的时间点、sst文件合并完成的时间点、sst文件创建开始和创建完成的时间点、sst文件删除的时间点等。

在实际项目或者产品中,可以将RocksDB或者LevleDB作为单机数据存储引擎,在其上层实现分片和多副本功能,从而实现一个高可靠的分布式存储系统。例如:

  • 微信开源的PaxosStore,上层通过Paxos协议来保证多副本之间的数据一致性。
  • 开源数据库TiDB,其中的TiKV组件(Server)负责Key-Value的读写,上层通过Raft协议来保证多副本之间的数据一致性。

下面是先前我在组内做的一个关于RocksDB的分享,包括实际的性能压测数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值