1. leveldb 的部署和使用
1.1. 部署
部署比较简单,按照官网即可
1.1.1. C++
git clone --recurse-submodules https://github.com/google/leveldb.git
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .
make install
1.1.2. python
pip install leveldb
1.1.3. 小插曲
开始用 mac 部署,遇到挺多问题,不管是brew安装还是编译安装都有
leveldb/db.h file not found
实际上在 /usr/local/include/leveldb/db.h 是存在的
stat /usr/local/include/leveldb/db.h
16777221 47682495 -rw-r--r-- 1 root admin 0 6803 "Apr 5 14:55:15 2021" "Apr 5 14:52:17 2021" "Apr 5 14:55:15 2021" "Apr 5 14:52:17 2021" 4096 16 0 /usr/local/include/leveldb/db.h
起初一直怀疑是因为路径问题,查看路径是正确的
clang -x c -v -E /dev/null
# ---
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.15.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -Werror=implicit-function-declaration -E -disable-free -disable-llvm-verifier -discard-value-names -main-file-name null -mrelocation-model pic -pic-level 2 -mthread-model posix -mframe-pointer=all -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=10.15.6 -fcompatibility-qualified-id-block-type-checking -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -target-linker-version 609.8 -v -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/12.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk -I/usr/local/include -internal-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/local/include -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/12.0.0/include -internal-externc-isystem /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include -internal-externc-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -Wno-reorder-init-list -Wno-implicit-int-float-conversion -Wno-c99-designator -Wno-final-dtor-non-final-class -Wno-extra-semi-stmt -Wno-misleading-indentation -Wno-quoted-include-in-framework-header -Wno-implicit-fallthrough -Wno-enum-enum-conversion -Wno-enum-float-conversion -fdebug-compilation-dir /Users/wanggangfeng/work/tstack-code/practice/cpp-prectice/leveldbtest -ferror-limit 19 -fmessage-length 178 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fobjc-runtime=macosx-10.15.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o - -x c /dev/null
clang -cc1 version 12.0.0 (clang-1200.0.32.29) default target x86_64-apple-darwin19.6.0
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/12.0.0/include
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks (framework directory)
End of search list.
# 1 "/dev/null"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 366 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "/dev/null" 2
从新连接时链接报错
clang -Xlinker -v
# ----
@(#)PROGRAM:ld PROJECT:ld64-609.8
BUILD 15:07:46 Dec 18 2020
configured to support archs: armv6 armv7 armv7s arm64 arm64e arm64_32 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em
Library search paths:
/usr/local/lib
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/lib
Framework search paths:
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
花了很多时间最终没有解决这个问题,最终在centos上一次性成功,后面开发工作都搞centos会比mac少出很多问题
1.2. 主要功能
- open – 打开数据库
- put – 插入数据
- get – 获取数据
- Iterator – 遍历数据
其他功能后面再列
1.3. 使用
C++ 参照
- https://blog.youkuaiyun.com/joelcat/article/details/89240584
python 参照 - http://www.idcat.cn/leveldb-python%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E6%96%B9%E6%B3%95.html
1.4. 宏观视角
使用 DB::Open 之后会在本地生成一个数据库目录, 目录路径为db_path 代码中指定的是 /var/tmp/ldb1.ldb
leveldb::DB::Open(options, db_path, &ldbptr)
tree /var/tmp/ldb1.ldb
/var/tmp/ldb1.ldb
├── 000003.log
├── CURRENT
├── LOCK
├── LOG
└── MANIFEST-000002
1.4.1. 首次打开文件解析
首先看看每个文件里面有什么东西
- 000003.log
看内容主要为刚刚写进去的键值,这个文件应该是数据库数据文件
hexdump -Cv 000003.log
00000000 71 69 19 21 20 00 01 01 00 00 00 00 00 00 00 01 |qi.! ...........

本文详细介绍了leveldb的部署过程,包括在C++和Python环境下的安装步骤,以及在Mac和CentOS上的经验分享。文章还探讨了leveldb的主要功能,如open、put、get和Iterator,并通过文件解析展示了数据库目录结构和文件内容。在宏观视角下,作者分析了首次打开数据库时的文件解析情况,解释了各个文件的作用。最后,文章讨论了多次写入数据后数据库的变化。
最低0.47元/天 解锁文章
618

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



