Berkeley DB是歷史悠久的嵌入式數據庫系統
主要應用在UNIX/LINUX操作系統上
Berkeley DB的存儲的是key/value鍵值對
可以理解為硬盤上的超級hash表
其可以管理
TB數據
而且能支撐幾千個並發訪問
目前Berkeley DB有C++版和Java版
所以
我們需要一個訪問的中間轉換
已經有人發布了C#的API
可以從 Berkeley DB for
NET 上面找到
現在最新版是
版本
可以支持
和
版
本篇將以
版做實例
BerkeleyDB的版本可以在http://www
oracle
com/technology/products/berkeley
db/index
html下載
當前最新版本為
版
C++版的Berkeley DB可以在http://www
oracle
com/technology/software/products/berkeley
db/db/index
html這裡下載
下載到Berkeley DB for
Net的API——libdb
dotnet_
_
zip後
就可以開始使用了
首先在libdb
dotnet_
_
zip解壓縮的bin目錄找到libdb_dotNET
dll
這個就是
版本使用的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
);
txn = env
TxnBegin(null
Txn
BeginFlags
None);
db = env
CreateDatabase(DbCreateFlags
None);
btree = (DbBTree)db
Open(txn
dbName
null
DbType
BTree
Db
OpenFlags
Create
);
}
另外Berkeley DB數據庫的操作需要借助於序列化
/// <summary>
/// 二進制序列化
/// </summary>
private BinaryFormatter formatter;
/// <summary>
/// 鍵內存流
/// </summary>
private MemoryStream keyStream;
/// <summary>
/// 內容內存流
/// </summary>
private MemoryStream dataStream;
private void StreamInit()
{
formatter = new BinaryFormatter();
keyStream = new MemoryStream();
dataStream = new MemoryStream();
}
[] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/net/201311/14802.html