比特币客户端使用的数据库levelDB介绍
2017-06-28 13:58
1451 查看
比特币客户端使用的数据库levelDB介绍
简介
比特币核心客户端使用 Google 的 LevelDB 数据库存储区块链元数据。Leveldb是一个google实现的非常高效的kv数据库,并且是开源的。它的一个主要特点就是写的性能非常好,适用于比特币客户端这种应用场景。
下图是LevelDB运行一段时间后的存储模型快照,
内存中的MemTable和Immutable MemTable以及磁盘上的几种主要文件:Current文件,Manifest文件,log文件以及SSTable文件。
log文件几乎是所有的数据库软件必备的机制了,主要是用于数据异常恢复和数据同步的。
SSTable文件是磁盘上的核心存储结构,它是分层存储的。这也是levelDB名字的由来。
使用示例
levelDB虽然是个数据库,但是并不像其它的主流数据库(mysql ,oracle等)可以提供客户端连接服务。它只是一个基于c++的lib库而已,所以我们使用起来也很简单,直接在工程里链接lib库文件,然后代码中包含头文件就可以使用了。下面是我在windows 10环境下,用vs2010编写levelDB使用示例的步骤。
第一步当然是要获取levelDB的库文件和头文件。由于levelDB是开源的,所以我们可以下载源码吧,然后在windows环境下编译生成库文件。
levelDB开源地址
我这里对编译levelDB不做过多的讲解,网上有很多教程。(注意编译过程需要boost)大家可以从下面这个地址直接下载我编译好的库文件。
levelDB windows库文件下载
下载完后配置到vs2010的工程中(配置过程省略),代码如下:
#include <assert.h> #include <string.h> #include <iostream> #include "leveldb/db.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { leveldb::DB *db; leveldb::Options options; options.create_if_missing = true; // 打开数据库 leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db); assert(status.ok()); string key = "name"; string value = "pony"; // 写 status = db->Put(leveldb::WriteOptions(), key, value); assert(status.ok()); // 读 status = db->Get(leveldb::ReadOptions(), key, &value); assert(status.ok()); cout << value << endl; // 删 status = db->Delete(leveldb::WriteOptions(), key); assert(status.ok()); status = db->Get(leveldb::ReadOptions(), key, &value); if (!status.ok()) { cerr << key << " " << status.ToString() << endl; } else { cout << key << "===" << value << endl; } // 关闭数据库 delete db; return 0; }
运行成功后,到工程目录下的/tmp/testdb下面可以看到生产的数据库文件。
参考
1.怎样操作leveldb数据库,实现增删改查
LevelDB库简介
相关文章推荐
- 比特币客户端Electrum使用介绍
- 使用Tomcat-5.5.20配置数据库连接池详细介绍
- 使用Tomcat-5.5.20配置数据库连接池详细介绍
- 用Instant Client,不安装oracle客户端使用sqlplus连接远程数据库
- [待总结]ldap数据库介绍、搭建、使用例子
- 用Instant Client,不安装oracle客户端使用sqlplus连接远程数据库
- 使用Atlas简化客户端Ajax编程(Atlas 介绍)
- H2db数据库介绍及基本使用
- RHEL4-VNC服务(三)vnc客户端的介绍和使用
- 介绍和使用Berkeley DB Java Edition(嵌入式数据库)
- NoSQL数据库—MongoDB入门使用和c#客户端的访问
- 求助Hibernate问题(我使用Criteria 查询数据库表时,当客户端调用到第3次就出现问题 )
- 使用Java程序连接各种数据库的方法介绍
- 使用技巧:简单介绍JSP数据库高级操作
- 数据库索引介绍及使用
- 介绍如何使用Connection对象连接数据库
- 在客户端使用SQL Query Analyzer操作多个数据库
- 使用ExtJs开发MIS系统(3):使用数据库保存客户端状态
- 用Instant Client,不安装oracle客户端使用sqlplus连接远程数据库
- LevelDB数据库使用