Berkeley DB是曆史悠久的嵌入式資料庫系統,主要應用在UNIX/LINUX作業系統上。Berkeley DB的儲存的是key/value索引值對,可以理解為硬碟上的超級hash表。其可以管理256TB資料,而且能支撐幾千個並發訪問。目前Berkeley DB有C++版和Java版。所以,我們需要一個訪問的中間轉換,已經有人發布了C#的API。可以從 Berkeley DB for .NET 上面找到,現在最新版是0.95版本,可以支援4.3和4.5版。本篇將以4.5版做執行個體。BerkeleyDB的版本可以在http://www.oracle.com/technology/products/berkeley-db/index.html下載,當前最新版本為4.7版。4.5 C++版的Berkeley DB可以在http://www.oracle.com/technology/software/products/berkeley-db/db/index.html這裡下載。
By Birdshover@ 部落格園 http://www.cnblogs.com/birdshover/
下載到Berkeley DB for .Net的API——libdb-dotnet_0_95.zip後,就可以開始使用了。首先在libdb-dotnet_0_95.zip解壓縮的bin目錄找到libdb_dotNET45.dll,這個就是4.5版本使用的dll。建立項目,引用這個dll。注意,自己編譯源碼可能會編譯不過,主要是因為裡面一些委託和委託的參數可見度不一致造成的。把那些參數用到的class 或者struct都調成public即可。
BerkeleyDB的資料庫操作需要藉助DbBTree類。因此需要先得到DbBTree的執行個體,但是DbBTree類會對其它幾個類有依賴,必須依賴其它幾個類才能建立。
下面代碼就是初始化得到DbBTree執行個體的一個過程。
/// <summary>
/// 資料庫目錄
/// </summary>
private string directory;
/// <summary>
/// 資料庫檔案名
/// </summary>
private string dbName;
private DbBTree btree;
private Txn txn;
private Db db;
private Env env;
/// <summary>
/// 初始化
/// </summary>
private void Init()
{
env = new Env(EnvCreateFlags.None);
Env.OpenFlags envFlags =
Env.OpenFlags.Create |
Env.OpenFlags.InitLock |
Env.OpenFlags.InitLog |
Env.OpenFlags.InitMPool |
Env.OpenFlags.InitTxn |
Env.OpenFlags.Recover;
env.Open(directory, envFlags, 0);
txn = env.TxnBegin(null, Txn.BeginFlags.None);
db = env.CreateDatabase(DbCreateFlags.None);
btree = (DbBTree)db.Open(txn, dbName, null, DbType.BTree, Db.OpenFlags.Create, 0);
}