abbshr.github.io icon indicating copy to clipboard operation
abbshr.github.io copied to clipboard

Biter loggers 2:LevelDB

Open abbshr opened this issue 10 years ago • 0 comments

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 GuideGoogle官方示例

abbshr avatar Apr 22 '14 11:04 abbshr