berkeley db 安装

NoSQL是现在互联网Web2.0时代备受关注的技术之一,被用来存储大量的非关系型的数据。Berkeley DB作为一款优秀的Key/Value存储引擎自然也在讨论之列。最近使用BDB来发一个KV系统,并将这段时间的BDB的学习和使用经验记录如下。(项目中使用了BDB4.8.30版本,本文所有涉及的具体问题都基于该版本)。

 

1. Berkeley DB的简介

Berkeley DBBDB)是一个高性能的嵌入式数据库编程库(引擎),它可以用来保存任意类型的键/值对 (Key/Value Pair),而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时操作数据库,支持最大256TB的数据。

BDB提供诸如C语言,C++JavaPerlPythonTcl等多种编程语言的API,并且广泛支持大多数类Unix操作系统和Windows操作系统以及实时操作系统(如 VxWorks)。

1991年,Berkeley DB的第一个版发行(Linux系统也在这一年诞生),其最初的开发目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现,该版本还包含了B+树数据访问算法。

1992年,BSD UNIX4.4发行版中包含了Berkeley DB1.85版。基本上认为这是Berkeley DB的第一个正式版。

1996年,Sleepycat软件公司成立,提供对Berkeley DB的商业支持。

2006年,SleepycatOracle收购,当时最新版本是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

 

 

 

 

 

 

猜你喜欢

转载自zzgthk.iteye.com/blog/2033558