从事数据库底层研究领域时,经常听到RocksDB这个数据库名。
我想大多数人和我一样,知道这个名字,却迟迟没有动手去了解它。
这篇文章就简单介绍怎么在MacOS下,使用RocksDB,并对一些基本知识进行简要介绍。
RocksDB是一个可嵌入的、持久型的Key-Value存储。
它可不像MySQL,PostgreSQL这样数据库分客户端与服务器端。实际上,可以把它当作一个第三方库,在自己的代码中进行引用,调用相应的接口就可以使用,比如使用C/C++语言,直接在源代码中include相应的头文件就可以。这也就是嵌入式的含义。
与嵌入式数据库SQLite的使用比较类似。
目前: RocksDB使用LSM存储引擎,纯C++编写。Java版本RocksJava正在开发中。
在使用C++版本的库时,最好在C++代码下进行使用,C语言下不知道可不可以使用,没有试过。
更多有关RocksDB的介绍参考:
关于RocksDB的详细使用介绍:
Mac上安装RocksDB非常简单,不用单独安装其他任何依赖。直接使用brew
工具安装即可。
brew install rocksdb
可以运行一下命令来查看安装信息。
brew info rocksdb
安装结果如下。
zzh@zzhdeMBP ~ % brew info rocksdb
rocksdb: stable 6.7.3 (bottled)
Embeddable, persistent key-value store for fast storage
https://rocksdb.org/
/usr/local/Cellar/rocksdb/6.7.3 (106 files, 65.2MB) *
Poured from bottle on 2020-06-20 at 21:37:50
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/rocksdb.rb
==> Dependencies
Required: gflags ✔, lz4 ✔, snappy ✔, zstd ✔
==> Analytics
install: 481 (30 days), 3,107 (90 days), 17,874 (365 days)
install-on-request: 379 (30 days), 1,581 (90 days), 7,980 (365 days)
build-error: 0 (30 days)
zzh@zzhdeMBP ~ %
其他操作系统上的安装可以参考:
更多内容可以参考前面所说的中文版Wiki的基本操作章节:
https://rocksdb.org.cn/doc/Basic-Operations.html
代码目录:
#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;
}
CXX=g++ -std=c++11
CXXFLAGS=-lrocksdb # 注意添加链接库
all: main
main: main.cpp
$(CXX) $(CXXFLAGS) -o $@ $<
run: main
./main
clean:
rm -f main *.o
zzh@zzhdeMBP 使用入门 % 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.
zzh@zzhdeMBP 使用入门 %
编译时需要注意两点: