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);



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章