目录
关于leveldb
下载leveldb源码
链接: leveldbGit地址
增加测试文件
使用clion打开项目,在根目录下新建一个app目录,app目录下新建一个main.cpp。代码如下:
//
//
#include <cassert>
#include <iostream>
#include "include/leveldb/db.h"
int main() {
//std::cout << "leveldb open success!" << std::endl;
//return 0;
leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "c://myLevelDB", &db);
assert(status.ok());
std::cout << "leveldb open success!" << std::endl;
std::string value;
std::string key1 = "testkey1";
leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
if (s.IsNotFound()) {
std::cout << "can not found for key:" << key1 << std::endl;
db->Put(leveldb::WriteOptions(), key1, "testvalue1");
}
s = db->Get(leveldb::ReadOptions(), key1, &value);
if (s.ok()) {
std::cout << "found key:" << key1 << ",value:" << value << std::endl;
}
s = db->Delete(leveldb::WriteOptions(), key1);
if (s.ok()) {
std::cout << "delete key success which key:" << key1 << std::endl;
}
s = db->Get(leveldb::ReadOptions(), key1, &value);
if (s.IsNotFound()) {
std::cout << "can not found after delete for key:" << key1 << std::endl;
}
delete db;
return 0;
}
更新cmake文件
在CMakeList.txt里面寻找leveldbutil字符串,然后在下面增加
add_executable(myTest "app/main.cpp")
target_link_libraries(myTest leveldb)
最终效果如下:

运行

关于RocksDB
下载RocksDB代码
同上,在根目录的app目录下增加测试文件main.cpp,代码如下:
//
// Created by on 2024/1/11.
//
#include <iostream>
#include <string>
#include "rocksdb/db.h"
#include "rocksdb/options.h"
#include "rocksdb/slice.h"
using ROCKSDB_NAMESPACE::DB;
using ROCKSDB_NAMESPACE::Options;
using ROCKSDB_NAMESPACE::PinnableSlice;
using ROCKSDB_NAMESPACE::ReadOptions;
using ROCKSDB_NAMESPACE::Status;
using ROCKSDB_NAMESPACE::WriteBatch;
using ROCKSDB_NAMESPACE::WriteOptions;
// rocksdb存储路径
std::string kDBPath="c://myrocksdb";
int main()
{
DB* db;
Options options;
options.IncreaseParallelism();
//文件夹没有数据就创建
options.create_if_missing=true;
// 打开数据库,加载数据到内存
Status s=DB::Open(options,kDBPath,&db);
assert(s.ok());
// 写key-value
s=db->Put(WriteOptions(),"key01","value");
assert(s.ok());
std::string value;
s=db->Get(ReadOptions(),"key01",&value);
assert(s.ok());
std::cout<<"get value "<< value<<std::endl;
assert(value=="value");
// 管道,原子方式更新
{
WriteBatch batch;
batch.Delete("key01");
batch.Put("key02",value);
s=db->Write(WriteOptions(),&batch);
}
s=db->Get(ReadOptions(),"key01",&value);
assert(s.IsNotFound());
s=db->Get(ReadOptions(),"key02",&value);
assert(value=="value");
{
PinnableSlice pinnable_val;
// 列族方式读取
db->Get(ReadOptions(),db->DefaultColumnFamily(),"key02",&pinnable_val);
assert(pinnable_val=="value");
}
{
std::string string_val;
PinnableSlice pinnable_val(&string_val);
// 列族方式读取
db->Get(ReadOptions(),db->DefaultColumnFamily(),"key02",&pinnable_val);
assert(pinnable_val=="value");
assert(pinnable_val.IsPinned() || string_val == "value");
}
PinnableSlice pinnable_val;
s=db->Get(ReadOptions(),db->DefaultColumnFamily(),"key01",&pinnable_val);
assert(s.IsNotFound());
pinnable_val.Reset();
db->Get(ReadOptions(),db->DefaultColumnFamily(),"key02",&pinnable_val);
assert(pinnable_val=="value");
pinnable_val.Reset();
delete db;
return 0;
}
修改CMakelist.txt
增加如下内容:
add_executable(myTest "app/main.cpp")
target_link_libraries(myTest ${ROCKSDB_STATIC_LIB})
效果如下:

运行

已经安装好rocksdb的情况
上面的case是咱们直接下载了Rocksdb,然后把测试代码就放到原生的rocksdb代码内部进行验证。
假定有一种case是,我们已经安装好了rocksdb,那么该怎么写CMakeList呢?
CMakeLists.txt如下:
find_library(GFLAGS_LIB123 gflags)
message(STATUS "find succ b ${GFLAGS_LIB123}")
find_library(ROCKSDB_LIB123 rocksdb)
message(STATUS "find succ b ${ROCKSDB_LIB123}")
add_executable(TestRocksdb3 "test/TestRocksdb.cpp")
target_link_libraries(TestRocksdb3 ${ROCKSDB_LI123B} ${GFLAGS_LIB123})
上面的find_library(ROCKSDB_LIB123 ROCKSDB_LIB) 就是在系统的bin目录去查找rocksdb,然后把路径保存到ROCKSDB_LIB123 。
至于为什么我们在源代码里验证不需要gflags,而安装之后就要gflags。我也不清楚。
编译结果如下:

windows下看不到头文件
如果我们是在window下通过远程部署代码到linux上的时候,上面的代码在linux能正常运行,但是我们在windows会发现找不到rocksdb/slice.h这些文件。怎么办呢?
因为windows下这个目录没有rocksdb的头文件,那怎么办呢?把这个文件夹删除,让clion从linux重新同步一下代码。

参考资料:
https://zhuanlan.zhihu.com/p/653465714
https://zhuanlan.zhihu.com/p/611450548
博客介绍了LevelDB和RocksDB的编译运行方法。对于LevelDB,需下载源码、增加测试文件、更新cmake文件后运行;对于RocksDB,同样要下载代码、修改CMakelist.txt并运行。还提及已安装RocksDB时CMakeList的写法,以及Windows下看不到头文件的解决办法。
824

被折叠的 条评论
为什么被折叠?



