Berkeley DB 是一款歷史悠久的嵌入式資料庫系統,廣泛應用於 UNIX/Linux 平台。它採用鍵值對(Key/Value)存儲模型,可視為硬碟上的超級哈希表,支援高達 256 TB 的數據量與數千併發訪問。官方提供 C++ 與 Java 版本,若要在 .NET 環境下使用,需透過第三方封裝的 C# API(如 libdb_dotNET45.dll)。
bin 目錄找到 libdb_dotNET45.dll 並加入專案參考。class 或 struct 標記為 public 即可解決。操作 Berkeley DB 的核心是 DbBTree 類別,但它依賴 Env、Db、Txn 等類別。以下示範如何初始化一個 DbBTree 實例:
/// <summary>
/// 資料庫目錄
/// </summary>
private string directory;
/// <summary>
/// 資料庫檔案名
/// </summary>
private string dbName;
private DbBTree btree;
private Txn txn;
private Db db;
private Env env;
/// <summary>
/// 初始化資料庫環境與 BTree 實例
/// </summary>
private void Init()
{
// 1. 建立環境物件
env = new Env(EnvCreateFlags.None);
// 2. 設定環境開啟旗標:建立、鎖定、日誌、記憶體池、交易、自動恢復
Env.OpenFlags envFlags =
Env.OpenFlags.Create |
Env.OpenFlags.InitLock |
Env.OpenFlags.InitLog |
Env.OpenFlags.InitMPool |
Env.OpenFlags.InitTxn |
Env.OpenFlags.Recover;
// 3. 開啟環境
env.Open(directory, envFlags, 0);
// 4. 開啟交易
txn = env.TxnBegin(null, Txn.BeginFlags.None);
// 5. 建立資料庫物件
db = env.CreateDatabase(DbCreateFlags.None);
// 6. 以 BTree 類型開啟/建立資料庫檔案
btree = (DbBTree)db.Open(txn, dbName, null, DbType.BTree, Db.OpenFlags.Create, 0);
}
Recover 可在崩潰後自動恢復。完成初始化後,即可透過 btree.Put()、btree.Get()、btree.Delete() 進行鍵值操作。記得在適當時機呼叫 txn.Commit() 提交交易,並在程式結束時關閉 btree、db、env 釋放資源。