引
Berkeley DB 是嵌入式数据库系统,简单,高效。
虽然使用上个人感觉没有sqllite那么简单方便,但是从效率上来说sqllite是无法和BDB相比的。
BDB根据使用者的设置可以设置成tree型,queue型等,每种有每种不同的特点和优势。
深入研究的同学可去官网研究手册,本文仅是给入门者一个简单的hello world介绍。
本文的程序是从几年前代码里抽出来的,具体新版本是否有新函数代替是否有建议废弃的函数没有调查过,事先声明。
例子
main.c
/**
* @file tt_bdb.c
* @brief Simple example of BDB (QUEUE type)
* @author cjx
* @version
* @date
*/
#include <string.h>
#include <stdlib.h>
#include "tt_bdb.h"
#define COMMAND_MAX_SIZE 256
#define DB_FILENAME_MAX_SIZE 256
#define DB_NAME "my_db"
DB_ENV *myEnv; /* Env structure handle */
DB *dbp;
inline void init_DBT(DBT *key, DBT *data)
{
memset(key, 0, sizeof(DBT));
memset(data, 0, sizeof(DBT));
}
/**
* @brief Set the env content
*
* @return OK:0 / NG:other
*/
static int init_bdb_env(const char *db_path)
{
int ret = db_env_create(&myEnv, 0);
if (ret != 0) {
return 1;
}
u_int32_t g = 0; // The size of the cache is set to gbytes gigabytes plus bytes
u_int32_t b = 32 * 1024; // The size of the cache is set to gbytes gigabytes plus bytes
int n = 1; // The ncache parameter is the number of caches to create
if (myEnv->set_cachesize(myEnv, g, b, n) != 0) {
return 1;
}
u_int32_t env_flags = DB_CREATE|DB_INIT_MPOOL|DB_INIT_TXN|DB_REGISTER|DB_RECOVER;
if (myEnv->open(myEnv, db_path, env_flags, 0) != 0) {
return 1;
}
if (myEnv->get_cach