C# Berkeley DB數(shù)據(jù)庫
Berkeley DB是歷史悠久的嵌入式數(shù)據(jù)庫系統(tǒng),主要應(yīng)用在UNIX/LINUX操作系統(tǒng)上。Berkeley DB的存儲的是key/value鍵值對,可以理解為硬盤上的超級hash表。其可以管理256TB數(shù)據(jù),而且能支撐幾千個并發(fā)訪問。目前Berkeley DB有C++版和Java版。所以,我們需要一個訪問的中間轉(zhuǎn)換,已經(jīng)有人發(fā)布了C#的API。可以從 Berkeley DB for .NET 上面找到,現(xiàn)在***版是0.95版本,可以支持4.3和4.5版。本篇將以4.5版做實例。
下載到Berkeley DB for .Net的 API——libdb-dotnet_0_95.zip后,就可以開始使用了。首先在libdb-dotnet_0_95.zip解壓縮的bin目錄找到 libdb_dotNET45.dll,這個就是4.5版本使用的dll。新建項目,引用這個dll。注意,自己編譯源碼可能會編譯不過,主要是因為里面一些委托和委托的參數(shù)可見性不一致造成的。把那些參數(shù)用到的class 或者struct都調(diào)成public即可。
C# Berkeley DB數(shù)據(jù)庫操作需要借助DbBTree類。因此需要先得到DbBTree的實例,但是DbBTree類會對其它幾個類有依賴,必須依賴其它幾個類才能創(chuàng)建。
下面代碼就是初始化得到DbBTree實例的一個過程。
- /// <summary>
- /// 數(shù)據(jù)庫目錄
- /// </summary>
- private string directory;
- /// <summary>
- /// 數(shù)據(jù)庫文件名
- /// </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);
- }
另外C# Berkeley DB數(shù)據(jù)庫的操作需要借助于序列化。
- ///<summary>
- ///二進(jìn)制序列化
- ///</summary>
- privateBinaryFormatterformatter;
- ///<summary>
- ///鍵內(nèi)存流
- ///</summary>
- privateMemoryStreamkeyStream;
- ///<summary>
- ///內(nèi)容內(nèi)存流
- ///</summary>
- privateMemoryStreamdataStream;
- privatevoidStreamInit()
- {
- formatter=newBinaryFormatter();
- keyStream=newMemoryStream();
- dataStream=newMemoryStream();
- }
鍵值C# Berkeley DB數(shù)據(jù)庫,因此定義一個獲取鍵接口:
- publicinterfaceIPut
- {
- stringKey{get;}
- }
【編輯推薦】