首页 > 其他分享 >leveldb学习笔记之一——clion调用leveldb使用示例

leveldb学习笔记之一——clion调用leveldb使用示例

时间:2022-11-07 13:05:29浏览次数:96  
标签:std leveldb cout 示例 db 编译 源码 clion


前言

2018年杀入区块链,算是接触了分布式、数据存储这一系列的知识,前段时间接触某手机厂商的技术人员,才发现自己在存储方面知识的不足,因此这段时间准备沉下心来学习学习。接下来就从leveldb开始,来研究研究其相关机制,不求看的人多,但求自勉而已。
而立未立,却又要进入人到中年的尴尬,但是不管到什么年级,对于一个it从业人员来说,提升技术都不可辜负!

工具选择

工欲善其事必先利其器,高效的工具能让人事半功倍。

  • 源码阅读工具
    我选择sourceinsight,无他,唯熟尔。十年前还在上大学的时候就已经在用了,用来阅读源码一直觉得很顺手,喜欢的小伙伴可以试试。
  • 调试编译工具
    关于调试编译工具,我选择clion,和对sourceinsight熟悉相反,刚好我对clion不怎么熟悉,以前在linux下都是使vim,编译调试使用gcc gdb就ok了,这次算是借着这个机会学一项新技能。

安装leveldb

下载源码

通过以下命令从github上面拉下源码

git clone https://github.com/google/leveldb

编译源码

此处为linux编译方式,如在windows下编译,按照github上面的说明进行即可。
在源码目录下调用以下命令:

mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .

编译成功后在build目录下能看到一个libleveldb.a的库文件。
##安装
通过如下命令进行安装

sudo make install

在clion导入leveldb库

打开clion,创建一个工程,在工程目录下,有一个CMakeLists.txt,我们通过此文件导入要调用的leveldb库。此文件的内容如下:

cmake_minimum_required(VERSION 3.6)
project(useLevelDb) #useLevelDb为我的工程名
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
set(INC_DIR /usr/local/include) #新加行,设置leveldb头文件所在位置
add_executable(useLevelDb ${SOURCE_FILES})
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/usr/local/lib") #新加行,编译选项,添加库路径
include_directories(${INC_DIR}) #新加行,设置头文件目录
target_link_libraries(useLevelDb libleveldb.a) #新加行,链接库,格式为target_link_libraries(工程名 库名)
find_package(Threads REQUIRED)#新加行,依赖于threads库
target_link_libraries(useLevelDb Threads::Threads)#新加行,链接库

对照上述文件进行修改即可。

源码示例

新建main.cpp,编写如下源码:

#include <cassert>
#include <iostream>
#include "./leveldb/db.h"

int main() {
leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &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;

//std::cout << "Hello, World!" << std::endl;
return 0;
}

今天算是leveldb学习的开端,接下来会对源码进行学习。

学习是一种慰藉,编程是一种情怀,技术提升永不可辜负!


标签:std,leveldb,cout,示例,db,编译,源码,clion
From: https://blog.51cto.com/u_15862521/5828914

相关文章