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

posted @ 2019-05-27 12:00  zhaotianff  阅读(1491)  评论(0编辑  收藏  举报