- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
下载
下载
第1 6章 数据库函数库
16.1 引言
8 0年代早期,U N I X环境被认为不适合运行多用户数据库系统(见 S t o n e b r a k e r 〔1 9 8 1〕和
We i n b e rg e r 〔1 9 8 2〕)。早期的系统,如V 7 ,因为没有提供任何形式的I P C机制(除了半双工管
道),也没有提供任何形式的记录锁机制,所以确实不适合运行多用户数据库。新一些的系统,
象S V R 4和4 . 3 + B S D ,则为运行可靠的、多用户的数据库系统提供了一个适合的环境。很多商
业公司在许多年前就已提供这种系统。
本章将设计一个简单的、多用户数据库的函数库。通过此函数库提供的 C语言函数,其他
程序可以访问数据库中的记录。这个 C 函数库只是一个完整的数据库的很小的一部分,并不包
括其他很多部分,如查询语言等,关于其他部分可以参阅专门介绍数据库的书。我们感兴趣的
是一个数据库函数库与U N I X 的接口,以及这些接口与前面各章节的关系(如1 2 . 3节的记录锁)。
16.2 历史
d b m (3 )是一个在U N I X系统中很流行的数据库函数库,它由Ken Thompson开发,使用了
动态散列结构。最初,它与 V 7一起提供,并出现在所有伯克利的版本中,也包含在伯克利的
S V R 4兼容函数库中。 S e l t z e r和Yi g i t 〔1 9 9 1〕中有关于d b m 函数库使用的动态散列算法历史的
详细介绍,以及这个库的其他实现方法。但是,这些实现的一个致命缺点是它们都不支持多个
进程对数据库的并发修改。它们都没有提供并发控制(如记录锁)。
4 . 3 + B S D提供了一个新的库d b ( 3 ) ,这个库支持三种不同的访问方式:面向记录、散列和 B
树。同样, d b也没有提供并发控制(这一点在 d b手册的 B U G S栏中说得很清楚)。S e l t z e r和
O l s o n 〔1 9 9 2〕中说以后的版本将提供像大部分商业数据库系统一样的并发控制功能。
绝大部分商业的数据库函数库提供多进程并发修改一个数据库所需要的并发控制。这些系
统一般都使用 1 2 . 3节中介绍的建议记录锁,并且用B +树来实现他们的数据库。
16.3 函数库
本节将定义数据库函数库的C语言接口,下一节再讨论其实现。
当打开一个数据库时,通过返回值得到一个 D B结构的指针。这一点很像通过 f o p e n得到一
个F I L E结构的指针(见5 . 2节),以及通过o p e n d i r得到一个D I R结构的指针(见4 . 2 1节)。我们将
用此指针作为参数来调用以后的数据库函数。
#include db.h
p a t h n a m e , int o f l a g , int m o d e ) ;
DB *db_open(const char *
返回:若成功则为 D B结构的指针,若失败则为N U L L
void db_close(DB *d b ) ;
第 1 6章 数据库函数库 3 8 7
下载
如果d b _ o p e n成功返回,则将建立两个文件:p a t h n a m e . i d x 和p a t h n a m e . d a t ,p a t h n a m e . i d x
是索引文件,p a t h n a m e . d a t 是数据文件。o f l a g被用作第二个参数传递给 o p e n (见3 . 3节),表明
这些文件的打开模式(只读、读写或如果文件不存在则建立等)。如果需要建立新的数据库,
m o d e将作为第三个参数传递给o p e n (文件访问权限)。
当不再使用数据库时,调用d b _ c l o s e来关闭数据库。d b _ c l o s e将关闭索引文件和数据文件,
并释放数据库使用过程中分配的所有用于内部缓冲的存储空间。
文档评论(0)