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——libdbdotnet__zip后就可以开始使用了首先在libdbdotnet__zip解压缩的bin目录找到libdb_dotNETdll这个就是版本使用的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(EnvCreateFlagsNone);
EnvOpenFlags envFlags =
EnvOpenFlagsCreate |
EnvOpenFlagsInitLock |
EnvOpenFlagsInitLog |
EnvOpenFlagsInitMPool |
EnvOpenFlagsInitTxn |
EnvOpenFlagsRecover;
envOpen(directory envFlags );
txn = envTxnBegin(null TxnBeginFlagsNone);
db = envCreateDatabase(DbCreateFlagsNone);
btree = (DbBTree)dbOpen(txn dbName null DbTypeBTree DbOpenFlagsCreate );
}
另外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();
}
[] [] [] [] [] [] []