存储引擎RocksDB相关

在之前Hugegraph中, 我们看到了它单机默认使用的后端存储引擎是Rocksdb ,并且不少性能测试也是基于它去实现的, 但是对于它估计大部分人也不台熟悉, 不过如果你之前用过Mysql .应该知道早些时候Mysql大名鼎鼎的InnoDBMyisam 引擎, 其实仔细下拉会发现, 它的某些版本也是支持RocksDB作为底层引擎的 ~

那么接下来结合HG, 来顺便学习一下RocksDB的相关知识, 因为RocksDB背后的东西太多, 所以这篇文章只是先提纲汇总一下, 之后细节和底层分个去学习.

0x00.前身

RocksDBFacebook基于LevelDB1.5上fork改造而来的, 大量复用了levelDB的代码, 并借鉴了Hbase的不少设计理念, 用C++编写并允许支持任意长度的二进制KV数据, 对SSD(Flash存储而言性能会很高), 设计之初的目的就是为了在高速存储介质(见官网说明)下能有很好的性能.

补充: LevelDB 是一款Google开源, 主由大名鼎鼎的Google最强技术之一Jeff Dean用C++编写的KV存储引擎, 它的底层使用LSM-Tree (Cassandra/Hbase同理) ,所以很大程度上可理解为BigTable 在单节点上的实现(BigTable论文核心就是提出了Log Structured-Merge Tree 这种新文件存储结构), 对深入理解整个分布式体系都是非常重要的一环.

关键词: LSM-tree , Compaction ,Version set

0x01.如何访问

习惯而言 ,大家用多了mysql之后, 总会觉得至少有一个shell 通过某种DSL来访问DB, 不过因为RocksDB定位是一个存储引擎(就像Lucene), 偏模块化, 并没有直接供shell给大家CURD , 官方是提供一个C++/Java 的API去访问, 所以对初学上手就不太友好, 那这里我找到了两种方式避开这问题:

  1. 采用通用的支持RocksDB的客户端keylord(图形化但只能访问本机, 因为连接要直接读取文件….太裸了,比如下面的)

    rocksdbST00

  2. 采用官方提供的NodeJS写的RocksDB Shell (不友好..)

8月更新:

距离最早接触RocksDB 已经有了很一段时间, 不过一直没来填坑… 因为我觉得个人的理解还远不足矣全面的写… 不过还是那句话, 先把前辈写过的好文章/代码看看, 总比自己从0开始摸索强的多, 推荐以下系列(尤其是TiDB官方blog):

  1. TiDB相关介绍
  2. TiKV & Titan的相关(底层rocksdb)
  3. Nebula-Graph(使用raft+rocksdb)
  4. rocksdb独有的merge (延时更新)操作.

未完待续


参考资料:
  1. LevelDB结构设计与思路分析-2018.07
  2. RocksDB官方旅程
  3. LSM知乎相关(推荐)
  4. 数据库从0到0.1 (一): LSM-Tree VS B-Tree (推荐)