首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Berkeley DB 入門實戰:安裝配置與核心CRUD操作全解析

     編輯:關於C語言

Berkeley DB 入門實戰:安裝配置與核心CRUD操作全解析

前言

Berkeley DB (BDB) 是 Oracle 旗下高性能嵌入式鍵值存儲引擎,廣泛應用於需要本地持久化存儲的場景。本文從安裝部署到核心API操作,提供完整的入門指南。

一、環境搭建與編譯配置

1. 下載與安裝

# 官網下載:https://www.oracle.com/database/technologies/berkeleydb-downloads.html
wget https://download.oracle.com/berkeley-db/db-6.0.20.tar.gz
tar -xzf db-6.0.20.tar.gz
cd db-6.0.20/build_unix
../dist/configure --prefix=/opt/bdb
make && make install

2. 環境變量配置

export BDB_HOME=/opt/bdb
export LD_LIBRARY_PATH=$BDB_HOME/lib:$LD_LIBRARY_PATH
export PATH=$BDB_HOME/bin:$PATH

3. 編譯鏈接命令

g++ -o test test.cpp -I$BDB_HOME/include -L$BDB_HOME/lib -ldb -lpthread

二、核心數據結構與設計思想

  • DB 結構體:所有數據庫操作的句柄,由 db_create() 創建
  • 存取方法:支援 Btree、Hash、Queue、Recno 四種底層數據結構
  • 鍵值對模型:Key/Data 皆為 DBT 結構,支援任意二進制數據
  • 事務支援:可選的 ACID 事務機制

三、核心 CRUD 操作詳解

1. 打開/創建數據庫

DB* dbp;
int ret = db_create(&dbp, NULL, 0);
if (ret != 0) { /* 錯誤處理 */ }

ret = dbp->open(dbp, NULL, "demo.db", NULL, DB_BTREE, DB_CREATE, 0664);
if (ret != 0) {
    dbp->err(dbp, ret, "無法打開數據庫");
    exit(1);
}

關鍵參數:DB_BTREE 選擇 B+樹存取,DB_CREATE 表示不存在時創建。

2. 插入數據

DBT key, data;
char* keyStr = "username";
char* valStr = "zhangsan";

memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = keyStr;
key.size = strlen(keyStr) + 1;  // 包含結束符
data.data = valStr;
data.size = strlen(valStr) + 1;

// 覆蓋模式(默認)
ret = dbp->put(dbp, NULL, &key, &data, 0);

// 防覆蓋模式
// ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);

3. 查詢數據

memset(&data, 0, sizeof(data));
ret = dbp->get(dbp, NULL, &key, &data, 0);

if (ret == 0) {
    printf("查詢成功: %s\n", (char*)data.data);
} else if (ret == DB_NOTFOUND) {
    printf("鍵不存在\n");
} else {
    dbp->err(dbp, ret, "查詢失敗");
}

4. 刪除數據


ret = dbp->del(dbp, NULL, &key, 0);
if (ret == 0) printf("刪除成功\n");
else if (ret == DB_NOTFOUND) printf("鍵不存在,無法刪除\n");

5. 關閉數據庫(關鍵步驟)


dbp->close(dbp, 0);  // 確保緩衝區刷新到磁盤,資源釋放

6. 手動同步緩衝區


// 運行期強制落盤(BDB 4.3+ 版本)
dbp->sync(dbp, 0);

四、進階主題:多索引與性能優化

1. 二級索引實現思路

BDB 原生不支援 SQL 風格的多索引,需應用層維護:

  • 主表:主鍵 → 完整記錄
  • 索引表:次要鍵 → 主鍵列表
  • 查詢時:先查索引表獲取主鍵,再查主表獲取完整數據

2. 性能調優關鍵參數

參數建議值說明
Cache Size物理記憶體 25%-50%set_cachesize(),減少磁盤 I/O
Page Size4KB-64KB根據記錄大小調整,影響 Btree 高度
Transaction按需啟用事務帶來額外開銷,唯讀場景可關閉
Sync PolicyDB_TXN_NOSYNC高吞吐場景犧牲耐久性換性能

五、學習資源與文檔

六、總結

Berkeley DB 以輕量級、高性能、無需獨立進程的特點,成為嵌入式存儲首選。掌握其核心 API(open/put/get/del/close)與存取方法選擇(Btree/Hash),配合合理的緩存與頁面配置,即可構建高可靠的本地存儲方案。進階學習方向包括:事務處理、複製集群、二級索引設計、從 SQL 遷移到 NoSQL 的建模差異等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved