BDB的事务处理(C++版)

1.Transactional Data Store (TDS)
TDS是使用BDB的终极方式,它适用于多读多写,并且支持Recoveriablity等任何你能想到的常见数据库特性。
BDB整体的体系结构,包含五个子系统:1)数据存取子系统,2)事务子系统,3)锁子系统,4)内存池管理子系统,5)日志子系统。

//创建TDS Environment的env_flags如下:
env_flags=DB_CREATE | DB_INIT_MPOOL | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_TXN;
if (envp.open(envHome, env_flags, 0) != 0) return -1;  // 打开环境

//TDS的任何DB相关的操作都必须是事务性的,包括打开db时,都需要先创建txn:
DbTxn *txn = NULL;
Dbc *cursorp;

db = new Db(NULL, 0);
if (db->set_flags(DB_DUP) != 0) return -1;
if (db->open(NULL, "test.db", NULL, DB_BTREE, DB_CREATE, 0664) != 0) return -1; // 打开db

envp.txn_begin(NULL, &txn, 0); // begin API启动事务处理

ret = db->cursor(txn, &cursorp, 0); // 打开游标
if (ret) return -1;
			
ret = cursorp->put(&key, &data, DB_KEYFIRST);
if (ret) return -1;
if (cursorp) cursorp->close();

txn->commit(0);
// 如果仅仅有读操作,其实可以无需调用commit,直接abort即可。
// 如果使用 DB_AUTO_COMMIT 打开db,则关于db handle的操作,不需要额外指定txn参数,此时使用了BDB的autocommit特性。
2.设置共享内存缓冲池大小(在open之前设置好,默认缓冲池大小为256KB)
int envp.set_cachesize(u_int32_t gbytes, u_int32_t bytes, int ncache); 
int envp.get_cachesize(u_int32_t *gbytesp, u_int32_t *bytesp, int *ncachep);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值