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. eclipse如何配置tomcat

    依次点击Window->Show View->Other   找到Server,点击OK,看到控制台旁边已有Server了.   点击server下面的链接,依次选择Apache,根据自己 ...

  2. VS Code 通过文件名查询文件并打开

    On Windows press Ctrl+p or Ctrl+e On Mac press Cmd+p on the Linux press also Ctrl+p works Older Mac ...

  3. 无法调用到appcode下的类

    解决方法: 右键 appp_code下的类, 点击 “属性”, 里面 [生成操作] 一项 由内容 改为 编译 即可

  4. flutter FloatingActionButton组件

    import 'package:flutter/material.dart'; class FloatingActionButtonDemo extends StatelessWidget { @ov ...

  5. OpenBLAS编译 Release x64 Win10 vs2015

    >------ 已启动生成: 项目: ZERO_CHECK, 配置: Release x64 ------ > Checking Build System > CMake does ...

  6. 为什么NtReadVirtualMemory 硬件断点无法下断

    win7 x64为例 nt!NtReadVirtualMemory ----- nt!MmCopyVirtualMemory NTSTATUS NTAPI MmCopyVirtualMemory(IN ...

  7. Fragment already added问题的解决

      问题 当快速点击切换不同的Fragment的时候部分手机的app竟然挂了,报出了下面的错误 Fragment already added java.lang.IllegalStateExcepti ...

  8. 将MySQL一张表的数据迁移到MongoDB数据库的Java代码示例

    Java代码: package com.zifeiy.snowflake.handle.etl.mongodb; import java.sql.Connection; import java.sql ...

  9. 【error】OutOfRangeError (see above for traceback): RandomShuffleQueue

    前言 在使用tensorflow TFRecord的过程中,读取*.tfrecord文件时出现错误,本文解决这个错误. 错误描述: OutOfRangeError (see above , curre ...

  10. html 图标和文字一行对齐

    原图: 效果图: 备注:vertical-align:middle <div> <p class="time tl-size12" style="pad ...