NoSQL是现在互联网Web2.0时代备受关注的技术之一,被用来存储大量的非关系型的数据。Berkeley DB作为一款优秀的Key/Value存储引擎自然也在讨论之列。最近使用BDB来发一个KV系统,并将这段时间的BDB的学习和使用经验记录如下。(项目中使用了BDB的4.8.30版本,本文所有涉及的具体问题都基于该版本)。
1. Berkeley DB的简介
Berkeley DB(BDB)是一个高性能的嵌入式数据库编程库(引擎),它可以用来保存任意类型的键/值对 (Key/Value Pair),而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时操作数据库,支持最大256TB的数据。
BDB提供诸如C语言,C++,Java,Perl,Python,Tcl等多种编程语言的API,并且广泛支持大多数类Unix操作系统和Windows操作系统以及实时操作系统(如 VxWorks)。
1991年,Berkeley DB的第一个版发行(Linux系统也在这一年诞生),其最初的开发目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现,该版本还包含了B+树数据访问算法。
1992年,BSD UNIX第4.4发行版中包含了Berkeley DB1.85版。基本上认为这是Berkeley DB的第一个正式版。
1996年,Sleepycat软件公司成立,提供对Berkeley DB的商业支持。
2006年,Sleepycat被Oracle收购,当时最新版本是4.7.25。
以上来自:http://blog.sina.com.cn/s/blog_502c8cc40100yqkj.html
下面说一下实战吧:
1. 安装
http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
下载并解压。
cd db-xxx cd build_unix ./dist/configure --prefix=/home/work/opt/berkeleydb --enable-cxx #其中 --enable-cxx来启动编译c++的相关选项,如果没有enable那么编译出的就不能使用berkeley db c++对应的接口。 之后: make make install
添加对应的环境变量:
C_INCLUDE_PATH=your_dir:$C_INCLUDE_PATH
CPLUS_INCLUDE_PATH=your_dir:$CPLUS_INCLUDE_PATH
LD_LIBRARY_PATH=your_dir:$LD_LIBRARY_PATH
LD_RUN_PATH=your_dir:$LD_RUN_PATH
2. 测试:
#include <iostream> #include <stdio.h> #include <db_cxx.h> #define DATABASE "test.db" using namespace std; int main() { u_int32_t flag = DB_CREATE; Db db(NULL, 0); try { db.open(NULL, DATABASE, NULL, DB_BTREE, flag, 0); } catch (std::exception &e) { printf("std eception happens\n"); return 2; } Dbt key, data; for (int i = 0; i < 100; ++i) { Dbt key(&i, sizeof(int)); Dbt data(&i, sizeof(int)); db.put(0, &key, &data, DB_NOOVERWRITE); } Dbc *dbcp, *dbcp1; db.cursor(NULL, &dbcp, 0); while(dbcp->get(&key, &data, DB_NEXT) == 0 ) { printf("key:%d#value:%d\n",*((int*)key.get_data()), *((int*)data.get_data())); } dbcp->close(); db.sync(0); try { db.close(0); } catch (std::exception &e) { printf("when clsoe std exception happens\n"); } printf("yes\n"); return 0; }
编译: g++ test_bdb.cpp -ldb_cxx
./a.tout
相关推荐
Berkeley DB4.8以上各版本,已经亲测过哪些版本可与redhat6.5兼容,见附件名称备注。
Berkeley DB(BDB)是OpenLDAP后台数据库的默认配置,因此在安装OpenLDAP之前应先安装BDB。
Oracle Berkeley DB Java 版是一个开源的、可嵌入的事务存储引擎,是完全用 Java 编写的。与 Oracle Berkeley DB 类似,Oracle Berkeley DB Java 版在应用程序的地址空间中执行,没有客户端/服务器通信的开销,从而...
嵌入式数据库Berkeley DB Java Edition Berkeley DB的使用 使用Berkeley DB的一般步骤 创建、打开、操作、关闭数据库环境Environment
Berkeley DB 6.2.32_64.msi Windows 64-bit binary installer Berkeley DB是一个嵌入式数据库,为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。 主要特点: 嵌入式:直接链接到应用程序中,与...
BerkeleyDB测试程序 包含散列文件入库,和读取的速度的测试
Berkeley DB 5.3.21.tar,你也可以去http://www.oracle.com/technetwork/products/berkeleydb/downloads/index.html下载最新版
Berkeley DB文章集合
BerkeleyDB的java应用jar包
Berkeley DB6.0.20 Berkeley DB BDB Berkeley DB数据库
介绍DB API的设置与使用的快速入门手册,目标是提供一个快速有效地机制,能让你进入Berkeley DB研发的世界。在本文中侧重于C++语言的研发人员,以及研究进城内数据管理解决方案的资深架构师。
berkeley db 使用手册
sqlite 和Berkeley db各方面 的比较
Java版本的Berkeley DB用户手册,找了好久
本文描述了如何在Berkeley DB中使用事务(Transaction)。它简要介绍了事务是如何保护你的应用的数据的...本书假设你已经了解BerkeleyDB的基本架构知识(这些知识在<Getting Started with Berkeley DB Guide>一书中。)
BerkeleyDB和Sqlite是当前最流行的嵌入式开源数据库。
Berkeley DB 批量插入更新与删除用法示例 Berkeley 函数接口 Berkeley DB 由浅入深 SQL 开发人员 Oracle Berkeley DB 指南 Berkeley DB参考手册
不是所有的 SQL 应用程序都应该在 Oracle Berkeley DB 实施( Oracle Berkeley DB 是一个开放源的嵌入式数据库引擎,提供了快速、可靠、本地的持久性,无需管理),但如果您有一系列相对固定的查询且很关心性能,...
Oracle BerkeleyDB-JE je-6.0.11