C# 使用Berkeley DB
Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间。简称BDB
Berkeley DB是嵌入式键值数据库库,为应用程序提供可扩展的高性能数据管理服务。 Berkeley DB产品使用简单的函数调用API进行数据访问和管理。
它使用C开发,C#调用是以P/Invoke的形式,不过Oracle发行了C#的版本,里面封装了API的调用,所以我们只需要引用程序集直接调用就行。
更加详细的介绍,请访问Oracle Berkeley DB官网https://www.oracle.com/database/technologies/related/berkeleydb.html
下面开始介绍如何在C#中使用BerkeleyDB(由于官方并未提供编译好的dll,所以我们需要下载源码自己编译)
1、打开官方下载页面(需要登陆Oracle账号,文末提供了Windows平台源码的下载链接),三个链接任选一个,前面两个是压缩包,后面一个是安装包。推荐下载zip格式的
https://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
2、解压源码文件,打开build_windows目录,根据自己vs版本打开相应的sln文件
3、编译
这里要注意的两点是编译的版本以及输出目录
版本:如果我们需要64位版本的dll,就需要单独把每个工程都选成64位。32位也如此。如果位数不一致,就会调用不成功。
值得注意的是,在编译之前,要看清当前是Debug模式还是Release模式,是32位设置还是64位设置。 如果你当前活动的是Release模式,却改的是Debug模式的设置,这样就会导致编译出来的库有问题。
输出目录:这个解决方案中C#和C++编译输出的目录是不一样的,推荐把它们设置到一个目录,这样找文件方便,也不会搞乱。
我这里是把截图中的三个工程输出到了同一个目录,其它的工程是示例程序,可以忽略。
编译完成后,打开编译目录,可以看到以下文件
4、调用(这里只提供了简单使用的代码,更加详细的使用可以看上述解决方案中的其它工程)
新建一个C#控件台程序,将libdb_csharp181.dll,libdb_dotnet181.dll和libdb181.dll复制到程序输出目录,并引用libdb_dotnet181.dll
输入以下代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using BerkeleyDB; 7 8 namespace BDBDemo 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 BTreeDatabaseConfig bTreeDatabaseConfig = new BTreeDatabaseConfig(); 15 //文件不存在则创建 16 bTreeDatabaseConfig.Creation = CreatePolicy.IF_NEEDED; 17 //页大小 18 bTreeDatabaseConfig.PageSize = 512; 19 //缓存大小 20 bTreeDatabaseConfig.CacheSize = new CacheInfo(0, 64 * 1024, 1); 21 BTreeDatabase bTreeDatabase = BTreeDatabase.Open("demo.db", bTreeDatabaseConfig); 22 string content = "HelloWorld"; 23 DatabaseEntry key = new DatabaseEntry(BitConverter.GetBytes(1)); 24 DatabaseEntry value = new DatabaseEntry(Encoding.ASCII.GetBytes(content)); 25 bTreeDatabase.Put(key, value); 26 Console.WriteLine("写入成功"); 27 KeyValuePair<DatabaseEntry, DatabaseEntry> pair = bTreeDatabase.Get(key); 28 Console.WriteLine("读取写入"); 29 Console.WriteLine(Encoding.ASCII.GetString(pair.Value.Data)); 30 bTreeDatabase.Close(); 31 } 32 } 33 }
运行结果:
示例程序:
https://files-cdn.cnblogs.com/files/zhaotianff/BDBDemo.zip
Berkeley DB 编译源码
https://files-cdn.cnblogs.com/files/zhaotianff/build_windows.zip