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的更多相关文章

  1. Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)

    Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...

  2. 比Redis更快:Berkeley DB面面观

    比Redis更快:Berkeley DB面面观 Redis很火,最近大家用的多.从两年前开始,Memcached转向Redis逐渐成为潮流:而Berkeley DB可能很多朋友还很陌生,首先,我们简单 ...

  3. Berkeley DB分布式探索

    明天回家就没有网络,今晚就将整个编写过程记录下来.顺带整理思路以解决未能解决的问题. 标题有点托大,想将Berkeley DB做成分布式存储,感觉很高端的样子,实际上就是通过ssh将Berkeley ...

  4. Berkeley DB数据处理

    设计一个结构,利用Berkeley DB完成大数据的存储,备份,查询功能. 已有的储备: 1.Berkeley DB的基本操作. 2.数据转存后数据不丢失. 3.过百GB以上数据的存储. 数据流如下, ...

  5. Berkeley DB

    最近用BDB写点东西,写了挺多个测试工程.列下表,也理清楚最近的思路 1.测试BDB程序,包括打开增加记录,查询记录,获取所有记录.将数据转存mysql 程序的不足,增加记录仅仅只有key和value ...

  6. BDB (Berkeley DB)数据库简单介绍(转载)

    近期要使用DBD,于是搜了下相关的资料,先贴个科普性的吧: 转自http://www.javaeye.com/topic/202990 DB综述DB最初开发的目的是以新的HASH訪问算法来取代旧的hs ...

  7. Oracle Berkeley DB Java 版

    Oracle Berkeley DB Java 版是一个开源的.可嵌入的事务存储引擎,是完全用 Java 编写的.它充分利用 Java 环境来简化开发和部署.Oracle Berkeley DB Ja ...

  8. 新浪研发中心: Berkeley DB 使用经验总结

    http://blog.sina.com.cn/s/blog_502c8cc40100yqkj.html NoSQL是现在互联网Web2.0时代备受关注的技术之一,被用来存储大量的非关系型的数据.Be ...

  9. Berkeley DB基础教程

    一.Berkeley DB的介绍 (1)Berkeley DB是一个嵌入式数据库,它适合于管理海量的.简单的数据.如Google使用其来保存账户信息,Heritrix用其来保存froniter. (2 ...

  10. 「JAVA」:Berkeley DB的JAVA连接

    Berkeley DB是一个嵌入式的数据库,它适合于管理海量的.简单的数据.关键字/数据(key/value)是Berkeley DB用来进行数据管理的基础.每个key/value构成了一条记录,而整 ...

随机推荐

  1. ActiveMQ相关API

    一.Producer 1,发送消息 MessageProducer send(Message message)发送消息到默认目的地,就是创建Producer时指定的目的地. send(Destinat ...

  2. php递归注意事项

    /* 循环去除字符串左边的0 */ function removeLeftZero($str){ if($str['0'] == '0'){ $str = substr($str, '1'); rem ...

  3. 小D课堂 - 零基础入门SpringBoot2.X到实战_第7节 SpringBoot常用Starter介绍和整合模板引擎Freemaker、thymeleaf_28..SpringBoot Starter讲解

    笔记 1.SpringBoot Starter讲解     简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-b ...

  4. iptables规则保存

    /etc/init.d/iptables save #查看 vim /etc/sysconfig/iptables #将iptables设置为开机启动 chkconfig iptables on #查 ...

  5. Docs-.NET-C#-指南-语言参考-关键字-值类型:bool

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:bool 1.返回顶部 1. bool(C# 参考) 2015/07/20 bool 关键字是 System.Boolean  ...

  6. Flutter ExpansionPanel 可展开的收缩控件

    文档:https://api.flutter.dev/flutter/material/ExpansionPanel-class.html demo: import 'package:flutter/ ...

  7. shell编程系列3--命令替换

    shell编程系列3--命令替换 命令替换 命令替换总结 方法1 `command` 方法2 $(command) 例子1: 获取系统的所有用户并输出 for循环能以空格.换行.tab键作为分隔符 [ ...

  8. java 读取CSV数据并写入txt文本

    java 读取CSV数据并写入txt文本 package com.vfsd; import java.io.BufferedWriter; import java.io.File; import ja ...

  9. ifc osg施工现场模拟

    基于ifc数据模型的施工现场模拟

  10. ES6深入浅出-10 ES6新增的数据类型-1.Symbol与隐藏属性

    ES5现有的数据类型.7种数据类型. 新的类型是属于Object 最普通的类型.plain object 数组array 函数function 下面这些都属于Object类型. 今天要讲的 set类型 ...