存储引擎RocksDB相关
在之前Hugegraph中, 我们看到了它单机默认使用的后端存储引擎是
Rocksdb
,并且不少性能测试也是基于它去实现的, 但是对于它估计大部分人也不台熟悉, 不过如果你之前用过Mysql
.应该知道早些时候Mysql大名鼎鼎的InnoDB
和Myisam
引擎, 其实仔细下拉会发现, 它的某些版本也是支持RocksDB作为底层引擎的 ~那么接下来结合HG, 来顺便学习一下RocksDB的相关知识, 因为RocksDB背后的东西太多, 所以这篇文章只是先提纲汇总一下, 之后细节和底层分个去学习.
0x00.前身
RocksDB是Facebook基于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去访问, 所以对初学上手就不太友好, 那这里我找到了两种方式避开这问题:
采用通用的支持RocksDB的客户端keylord(图形化但只能访问本机, 因为连接要直接读取文件….太裸了,比如下面的)
采用官方提供的NodeJS写的RocksDB Shell (不友好..)
8月更新:
距离最早接触RocksDB
已经有了很一段时间, 不过一直没来填坑… 因为我觉得个人的理解还远不足矣全面的写… 不过还是那句话, 先把前辈写过的好文章/代码看看, 总比自己从0开始摸索强的多, 推荐以下系列(尤其是TiDB官方blog):
- TiDB相关介绍
- TiKV & Titan的相关(底层rocksdb)
- Nebula-Graph(使用raft+rocksdb)
- rocksdb独有的
merge
(延时更新)操作.
未完待续