abbshr.github.io
abbshr.github.io copied to clipboard
Biter loggers 2:LevelDB
Log 3:拆Blocks之前
BitCoin Explorer环境配置就绪,下一步就可以利用Blocks做任何想做的了。
insight-api和bitcoinjs都使用Google出品的LevelDB作Transaction持久化。因此有必要了解一下LevelDB。
Key Words:
- NoSQL
- Key-Value
- embed
- one process
- C++
- libleveldb
- high performance
- open source
关键词中描述了LevelDB的主要特性。很明了,这里不再赘述。
作为一个嵌入式数据库,像SQLite和Node embed nosql database一样。没有服务进程一说,这也恰恰凸显embed database目标——轻量级。
虽说是小型的数据库,但从关键词描述中可以看出——其性能仍很强劲。Google的一个benchmarks给出了levelDB和SQLite的性能测试图表。
使用
作为一个开源项目,levelDB自然提供了不同编程语言的Wrapper。这里有两种基本使用方式:
- 直接使用LevelDB提供的C++ lib
- 使用其他语言的Wrapper
为了尽快了解它,可以先用用它的lib。
编译
过程与其他项目大同小异。
git clone https://code.google.com/p/leveldb/ && cd leveldb
其Makefile将它编译为静态链接库.a
,也可以选择编译为动态链接库.so
,这就需要修改一下Makefile:_CTRL + F_查找:
LIBRARY = libleveldb.a
$(AR) -rs $@ $(LIBOBJECTS)
分别改为:
LIBRARY = libleveldb.so
gcc -shared -fPIC -o $@ $(LIBOBJECTS)
开始编译:
make
cp libleveldb.so /usr/local/lib/
cp -r include/leveldb /usr/local/include/
sudo ldconfig
这时就可以在C/C++ 代码中引用libleveldb了:
#include "leveldb/db.h"
Note:g++需要包含-lleveldb
和-lpthread
参数编译程序:
g++ -o leveldbtest leveldbtest.cc -lleveldb -lpthread
之后可以写个test练习练习什么的~ example可以参见Quick Guide或Google官方示例