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
输入以下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BerkeleyDB; namespace BDBDemo
{
class Program
{
static void Main(string[] args)
{
BTreeDatabaseConfig bTreeDatabaseConfig = new BTreeDatabaseConfig();
//文件不存在则创建
bTreeDatabaseConfig.Creation = CreatePolicy.IF_NEEDED;
//页大小
bTreeDatabaseConfig.PageSize = ;
//缓存大小
bTreeDatabaseConfig.CacheSize = new CacheInfo(, * , );
BTreeDatabase bTreeDatabase = BTreeDatabase.Open("demo.db", bTreeDatabaseConfig);
string content = "HelloWorld";
DatabaseEntry key = new DatabaseEntry(BitConverter.GetBytes());
DatabaseEntry value = new DatabaseEntry(Encoding.ASCII.GetBytes(content));
bTreeDatabase.Put(key, value);
Console.WriteLine("写入成功");
KeyValuePair<DatabaseEntry, DatabaseEntry> pair = bTreeDatabase.Get(key);
Console.WriteLine("读取写入");
Console.WriteLine(Encoding.ASCII.GetString(pair.Value.Data));
bTreeDatabase.Close();
}
}
}
运行结果:

示例程序:
https://files-cdn.cnblogs.com/files/zhaotianff/BDBDemo.zip
Berkeley DB 编译源码
https://files-cdn.cnblogs.com/files/zhaotianff/build_windows.zip
C# 使用Berkeley DB的更多相关文章
- Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)
Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...
- 比Redis更快:Berkeley DB面面观
比Redis更快:Berkeley DB面面观 Redis很火,最近大家用的多.从两年前开始,Memcached转向Redis逐渐成为潮流:而Berkeley DB可能很多朋友还很陌生,首先,我们简单 ...
- Berkeley DB分布式探索
明天回家就没有网络,今晚就将整个编写过程记录下来.顺带整理思路以解决未能解决的问题. 标题有点托大,想将Berkeley DB做成分布式存储,感觉很高端的样子,实际上就是通过ssh将Berkeley ...
- Berkeley DB数据处理
设计一个结构,利用Berkeley DB完成大数据的存储,备份,查询功能. 已有的储备: 1.Berkeley DB的基本操作. 2.数据转存后数据不丢失. 3.过百GB以上数据的存储. 数据流如下, ...
- Berkeley DB
最近用BDB写点东西,写了挺多个测试工程.列下表,也理清楚最近的思路 1.测试BDB程序,包括打开增加记录,查询记录,获取所有记录.将数据转存mysql 程序的不足,增加记录仅仅只有key和value ...
- BDB (Berkeley DB)数据库简单介绍(转载)
近期要使用DBD,于是搜了下相关的资料,先贴个科普性的吧: 转自http://www.javaeye.com/topic/202990 DB综述DB最初开发的目的是以新的HASH訪问算法来取代旧的hs ...
- Oracle Berkeley DB Java 版
Oracle Berkeley DB Java 版是一个开源的.可嵌入的事务存储引擎,是完全用 Java 编写的.它充分利用 Java 环境来简化开发和部署.Oracle Berkeley DB Ja ...
- 新浪研发中心: Berkeley DB 使用经验总结
http://blog.sina.com.cn/s/blog_502c8cc40100yqkj.html NoSQL是现在互联网Web2.0时代备受关注的技术之一,被用来存储大量的非关系型的数据.Be ...
- Berkeley DB基础教程
一.Berkeley DB的介绍 (1)Berkeley DB是一个嵌入式数据库,它适合于管理海量的.简单的数据.如Google使用其来保存账户信息,Heritrix用其来保存froniter. (2 ...
- 「JAVA」:Berkeley DB的JAVA连接
Berkeley DB是一个嵌入式的数据库,它适合于管理海量的.简单的数据.关键字/数据(key/value)是Berkeley DB用来进行数据管理的基础.每个key/value构成了一条记录,而整 ...
随机推荐
- Linux下java进程CPU占用率高分析方法(二)
1. 通过 top 命令查看当前系统CPU使用情况,定位CPU使用率超过100%的进程ID:2. 通过 ps aux | grep PID 命令进一步确定具体的线程信息:3. 通过 ps -mp pi ...
- INotifyPropertyChanged PropertyChangedEventArgs获取变更属性
INotifyPropertyChanged: 该接口包含一个事件, 针对属性发生变更时, 执行该事件发生. // // 摘要: // 通知客户端属性值已更改. public interface IN ...
- PDF生成类库
from:https://blog.csdn.net/plean/article/details/8097015 最近忙了两个星期的任务了 iTextSharp.dll是个开源的用于生成pdf ...
- openresty开发系列2--nginx的简单安装,正向、反向代理及常用命令和信号控制介绍
openresty开发系列2--nginx的简单安装,正向.反向代理及常用命令和信号控制介绍 一.nginx的安装下载及编译安装1.Nginx下载:nginx-1.13.0.tar.gz,下载到:/u ...
- xcopy命令拷贝文件夹和文件
文件夹: xcopy /r /y 'c:123\' 'D:\123\' 文件: echo f | xcopy /d /r /k c:\index2.htm c:\index.htm
- C#中Invoke的用法(转)
invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...
- [Log4j使用教程] JavaSE/JavaEE/SpringMVC中使用Log4j
要想使用Log4j, 首先需要下载到Log4j的jar, Download: http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log ...
- Swift4.0复习闭包
1.闭包的定义和调用: _ = { (param1: Int, param2: Float, param3: Void) -> return_type in // 闭包执行代码 /* ... * ...
- 《MySQL必知必会》学习笔记——第1章 了解SQL
第1章 了解SQL 本章将介绍数据库和SQL,它们是学习MySQL的先决条件. 1.1 数据库基础 你正在阅读本书,这表明你需要以某种方式与数据库打交道.在深入学习MySQL及其SQL语言的实现之前, ...
- express获取http参数
express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params ( ...