这篇文章就简单介绍怎么在macOS下使用RocksDB。
1. RocksDB简要介绍
RocksDB是一个可嵌入的、持久型的Key-Value存储。
不像MySQL,PostgreSQL这样数据库分客户端与服务器端。实际上,可以把它当作一个第三方库,在自己的代码中进行引用,调用相应的接口就可以使用,比如使用C/C++语言,直接在源代码中include相应的头文件就可以。
与嵌入式数据库SQLite的使用比较类似。
目前: RocksDB使用LSM存储引擎,纯C++编写。Java版本RocksJava也已经完美支持。
更多有关RocksDB的介绍参考:
- 英文官网: https://rocksdb.org/
关于RocksDB的详细使用介绍:
- Github Wiki: https://github.com/facebook/rocksdb/wiki
2. RocksDB 安装
macOS上安装RocksDB非常简单,不用单独安装其他任何依赖。直接使用brew工具安装即可。
1 |
$ brew install rocksdb |
可以运行一下命令来查看安装信息。
1 |
$ brew info rocksdb |
安装结果如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ brew info rocksdb rocksdb: stable 7.0.3 (bottled), HEAD Embeddable, persistent key-value store for fast storage https://rocksdb.org/ /usr/local/Cellar/rocksdb/7.0.3 (138 files, 40.4MB) * Poured from bottle on 2022-06-20 at 14:18:52 From: https://mirrors.ustc.edu.cn/homebrew-core.git/Formula/rocksdb.rb License: GPL-2.0-only or Apache-2.0 ==> Dependencies Build: cmake ✔ Required: gflags ✔, lz4 ✔, snappy ✔, zstd ✔ ==> Options --HEAD Install HEAD version ==> Analytics install: 605 (30 days), 2,584 (90 days), 12,941 (365 days) install-on-request: 561 (30 days), 2,247 (90 days), 10,385 (365 days) build-error: 1 (30 days) |
其他操作系统上的安装可以参考:
- 官方安装教程:https://github.com/facebook/rocksdb/blob/master/INSTALL.md
- CentOS 7上安装:https://www.jianshu.com/p/f233528c8303
3. 使用示例
代码目录:
- main.cpp
- Makefile
main.cpp文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <iostream> #include <cassert> #include "rocksdb/db.h" using namespace std; int main() { rocksdb::DB* db; rocksdb::Options options; options.create_if_missing = true; rocksdb::Status status = rocksdb::DB::Open(options, "/tmp/testdb", &db); assert(status.ok()); cout << "Open rocksdb success." << endl; string key1 = "1"; string value1 = "aaaaa"; status = db->Put(rocksdb::WriteOptions(), key1, value1); assert(status.ok()); printf("Put[%s,%s] success.\n", key1.c_str(), value1.c_str()); string value; status = db->Get(rocksdb::ReadOptions(), key1, &value); assert(status.ok()); printf("Put key[%s] = %s\n", key1.c_str(), value.c_str()); status = db->Delete(rocksdb::WriteOptions(), key1); assert(status.ok()); printf("Delete key[%s] success.\n", key1.c_str()); delete db; return 0; } |
Makefile文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
CXX=g++ -std=c++11 CXXFLAGS=-lrocksdb # 注意添加链接库 all: main main: main.cpp $(CXX) $(CXXFLAGS) -o $@ $< run: main ./main clean: rm -f main *.o |
运行结果:
1 2 3 4 5 6 7 |
make run g++ -std=c++11 -lrocksdb -o main main.cpp ./main Open rocksdb success. Put[1,aaaaa] success. Put key[1] = aaaaa Delete key[1] success. |
编译时需要注意两点:
- 支持C11, 添加选项-std=c++11
- 添加链接库: -lrocksdb