聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

RocksDB试用

2020-03-14 11:53 浏览: 903 次 我要评论(0 条) 字号:

RocksDB是FaceBook开放的一种嵌入式、持久化存储、KV型的高性能嵌入式存储引擎。
RocksDB的内核数据结构是基于LSM树(日志结构合并树(Log-Structured Merge-Tree))实现的,因此它的特点是支持高效的点查找以及范围扫描、支持高速写入等。RocksDB目前也可以作为MongoDB的底层数据存储引擎,适合大量的写操作场景。

传统关系型数据库使用BTree或一些变体作为存储结构,能高效进行查找,但保存在磁盘中时它也有一个明显的缺陷,那就是逻辑上相离很近但物理却可能相隔很远,这就可能造成大量的磁盘随机读写。LSM树能让我们进行顺序写磁盘,从而大幅提升写操作,作为代价的是牺牲一些读性能。因此,如果写多读少的应用场景,RocksDB比较适合,比如海量日志记录。

下面试用一下RocksDB,目前RocksDB通过库文件来通过数据存储服务。

一,测试环境
$ cat /etc/issue
Ubuntu 18.04.3 LTS n l
$ uname -a
Linux lenky-virtual-machine 5.0.0-27-generic #28~18.04.1-Ubuntu SMP Thu Aug 22 03:00:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

二,源码编译
1,下载源码:
$ wget https://github.com/facebook/rocksdb/archive/v6.6.4.tar.gz
$ tar xf rocksdb-6.6.4.tar.gz
$ cd rocksdb-6.6.4/
$ make static_lib
$ cd examples/
$ make all

三,程序测试
例子程序已经编译出来了,直接执行./simple_example,什么输出也没有。
$ ./simple_example
查看simple_example.cc源码,它只是在做读写数据测试,正常情况下本来就什么也不输出。改一下代码:
将37行改为:

  assert(value == "value1");

也是写入”value”,读出来后与”value1″进行断言比较,重新编译执行后肯定要报错才对:
$ ./simple_example
simple_example: simple_example.cc:37: int main(): Assertion `value == “value1″‘ failed.
Aborted (core dumped)

程序./simple_example里有指定数据库存储位置kDBPath在/tmp/rocksdb_simple_example,在这个目录下就可以看到各个相关持久化数据文件。

从使用方式上而言,RocksDB类似于SQLite,但SQLite存储的是关系型数据,RocksDB是KV数据,而且RocksDB在性能,多核支持等方面肯定更强劲。因此,如果有类似于使用SQLite这样的场景,但又需要存储KV数据,不妨可以试试RocksDB。

四,其他
RocksDB也可以作为存储引擎嵌入其他DB Server里,比如MySQL,Redis等,这样用户程序就可以使用DB Server的众多其他服务,比如集群、备份等,而不仅仅只是数据存储服务。

基于MySQL的RocksDB:https://github.com/facebook/mysql-5.6

http://myrocks.io/

兼容Redis协议的RocksDB:https://github.com/meitu/kvrocks

参考资料:

https://rocksdb.org.cn/

https://github.com/facebook/rocksdb



网友评论已有0条评论, 我也要评论

发表评论

*

* (保密)

Ctrl+Enter 快捷回复