设为首页 加入收藏

TOP

BerkeleyDB数据访问算法说明
2014-11-23 17:51:30 】 浏览:6719
Tags:BerkeleyDB 数据 访问 算法 说明

  DB数据访问算法


  在数据库领域中,数据访问算法对应了数据在硬盘上的存储格式和操作方法。在编写应用程序时,选择合适的算法可能会在运算速度上提高1个甚至多个数量级。大多数数据库都选用B+树算法,DB也不例外,同时还支持HASH算法、Recno算法和Queue算法。接下来,我们将讨论这些算法的特点以及如何根据需要存储数据的特点进行选择。


  B+树算法:B+树是一个平衡树,关键字有序存储,并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,DB没有实现对关键字的前缀码压缩。B+树支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构。


  HASH算法:DB中实际使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。关键字可以为任意的数据结构。


  Recno算法: 要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。实际上,这和关系型数据库中逻辑主键通常定义为int AUTO型是同一个概念。Recho建立在B+树算法之上,提供了一个存储有序数据的接口。记录的长度可以为定长或不定长。


  Queue算法:和Recno方式接近, 只不过记录的长度为定长。数据以定长记录方式存储在队列中,插入操作把记录插入到队列的尾部,相比之下插入速度是最快的。


  对算法的选择首先要看关键字的类型,如果为复杂类型,则只能选择B+树或HASH算法,如果关键字为逻辑记录号,则应该选择Recno或Queue算法。当工作集关键字有序时,B+树算法比较合适;如果工作集比较大且基本上关键字为随机分布时,选择HASH算法。Queue算法只能存储定长的记录,在高的并发处理情况下,Queue算法效率较高;如果是其它情况,则选择Recno算法,Recno算法把数据存储为平面文件格式。


  DB常用函数使用范例(C)


  #include


  #include


  #include


  #include


  /* DB的函数执行完成后,返回0代表成功,否则失败 */


  void print_error(int ret)


  {


  if(ret != 0)


  printf("ERROR: %s\n",db_strerror(ret));


  }


  /* 数据结构DBT在使用前,应首先初始化,否则编译可通过但运行时报参数错误 */


  void init_DBT(DBT * key, DBT * data)


  {


  memset(key, 0, sizeof(DBT));


  memset(data, 0, sizeof(DBT));


  }


  void main(void)


  {


  DB *dbp;


  DBT key, data;


  u_int32_t flags;


  int ret;


  char *fruit = "apple";


  int number = 15;


  typedef struct customer


  {


  int c_id;


  char name[10];


  char address[20];


  int age;


  } CUSTOMER;


  CUSTOMER cust;


  int key_cust_c_id = 1;


  cust.c_id = 1;


  strncpy(cust.name, "javer", 9);


  strncpy(cust.address, "chengdu", 19);


  cust.age = 32;


  /* 首先创建数据库句柄 */


  ret = db_create(&dbp, NULL, 0);


  print_error(ret);


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C/C++qsort()快速排序的用法 下一篇专家讲解用.NET编写串口程序的一..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目