当前位置: 代码迷 >> 综合 >> Berkeley DB in kernel for linux-3.13
  详细解决方案

Berkeley DB in kernel for linux-3.13

热度:99   发布时间:2024-01-15 17:14:01.0

BDB最初开发目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现。BDB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法。在1992年,BSD UNIX第4.4发行版中包含了DB1.85版。基本上认为这是DB的第一个正式版。在1996年中期,Sleepycat软件公司成立,提供对DB的商业支持。目前BDB作为一个开源数据库项目由oracle维护。

BDB支持LINUX、UNIX、WINDOWS等操作系统,也提供了丰富的应用程序接口,支持C、C++、JAVA、PERL、TCL、PYTHON、PHP等。BDB的应用十分广泛,在很多知名的软件中都能看到其身影。

由于BDB的高性能,也有将BDB移植到内核以获取更高性能的实验和项目。stony brook大学的Aditya Kashyap基于bdb-4.1.25移植到了linux-2.4内核。但目前的linux内核版本大部分都已经是3.0以上版本,因为项目需要(高性能分布式文件系统),最近化了些时间将bdb-4.1.25移植到ubuntu的linux-3.13内核下,测试了下性能,性能比在用户层提升10%以上,测试数据整理中,整理完后发表。

先附上Kernel BDB的源码:http://download.csdn.net/detail/seacracker/8477659 编译方法为./build_unix/mk

用户层调用代码如下(create_db,open_db):

 #include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>




#define NEW_CTL_ADD             0xBEAD
#define NEW_CTL_REMOVE          0xDEAD


struct db_cmd {
        int     dc_cmd;
        unsigned long   dc_handle;
};




int
main(int argc, char *argv[])
{
int fd,ret=0;
struct db_cmd dbs;


fd = open("newnode",O_RDONLY);
if ( fd < 0 ) {
printf("open fail[%d]\n",fd);
exit(1);
}
ret = ioctl(fd,NEW_CTL_ADD,&dbs);
if ( ret < 0 ) {
printf("ioctl fail[%d]\n",fd);
exit(2);
}
ret = ioctl(fd,NEW_CTL_REMOVE,&dbs);
if ( ret < 0 ) {
printf("ioctl fail[%d]\n",fd);
exit(2);
}
close(fd);


return(0);
}

另外也有基于KBDB实现的文件系统kbdbfs:http://download.csdn.net/detail/seacracker/8477667