文献综述
信息与计算科学 通用数据库的C语言实现
通用数据库是现今数据管理的普遍技术, 是计算机科学的重要分支. 现今数据库的实现
通常由三个模式组成, 概念模式, 逻辑模式和内模式[1]. 本文主要研究的领域就是数据库的内模式. 而对内模式的研究本文是通过dbm数据库函数库来实现的.
dbm是在UNIX系统中很流行的数据库函数库, 它是由Ken Thompson开发的, 当时使用了动态散列结构. 最初, dbm与V7系统一起提供, 并在所有的BSD版本中出现, 其也包含在SVR4的BSD兼容函数库中[AT&T 1990c]. BSD的开发者扩充了dbm函数库, 并将其改名为ndbm. ndbm函数库包括在BSD和SVR4中. ndbm函数被标准化后成为Single UNIX Specification的XSI扩展部分[3]. 而在Linux系统上, 开发者们用gdbm库来支持dbm函数库和ndbm函数库[7].
dbm函数库所管理的数据库是一个轻量级的数据库, 不是标准意义上的数据库, 不支持SQL(不过可以在它的基础上开发), 纯粹以二进制储存的一种数据库, 常用于系统底层的数据库, 在其他一些很少更新内容的地方也可以使用[9].
dbm函数库主要的两个特点是动态散列算法和键值查找方式. Seltzer和Yigit[1991]中详细介绍了dbm函数库使用的动态散列算法的历史. 采用动态散列算法时在查找数据时非常快速, 当然其付出的代价就是插入数据异常的缓慢[2]. 另外对于键值查找方式, dbm数据库是通过包括两个基本元素数据块, 一块是想要保存起来的数据, 另一块是对其进行检索时用做关键字的数据. 对于每个dbm数据库而言, 保存在其中的每一个数据块都必须有一个独一无二的关键字. 对于关键字和数据本身倒没有什么限制, 对使用超长数据或超长关键字的情况也没有定义什么错误. 技术规范里倒是允许在具体实现时版关键字/数据对的最大长度限制在1024个字节, 但这个限制通常并没有什么意义, 因为具体实现出来的东西往往比技术规范的要求更灵活[10]. 关键字的取值被用做检索储存数据的索引, 就如同书签一般.
dbm数据库适合于储存相对比较静态的索引话数据, 是一个索引化得文件存储系统. 它的优点是非常容易被编译进一个可发布的二进制可执行程序, 因为它无需安装独立的服务器, 而且即使它需要的底层文件还未安装, 也不会有什么危险. dbm数据库允许你通过使用
索引来存储可变长数据结构, 然后通过索引或简单的顺序扫描数据库来检索结构. dbm数据库适用于处理那些被频繁访问但却很少被更新的数据, 因为它创建数据项时非常慢, 而检索时非常快.
至今, dbm有许多版本, 许多的不足的得到改进. 但是, 这些实现都有一个根本的缺点是: 他们都不支持多个进程对数据库的并发更新. 它们都没有提供并发控制(如记录锁).绝大部分商用数据库函数库提供多进程同时更新数据库所需要的并发控制[5]. 这些系统一般都使用建议记录锁, 不过, 它们也常常实现自己的锁原语, 以避免为获得一把无竞争的锁而需的系统调用开销[6].
本文主要介绍了dbm数据库的一些基本概念. 如上文所示, dbm具备了不少优点, 但dbm缺乏几乎所有商用数据库的特性, 使用hash快仅仅是指检索的时间复杂度理论值很优秀, 商用数据库的各种锁机制, 索引机制, 缓冲机制等等都不具备, 而这些都是影响效率的极重要因素, 搜索的速度只是其中很小的一个部分[1]. 本文就针对其锁机制提出改进策略, 其他功能有待开发, 但需考虑这些功能添加之后, dbm原语的简单, 轻便的优点能否保存, 也许需要到开发时权衡利弊, 选择则中的方案[8].
参考文献
[1] 萨师煊, 王珊. 数据库系统概论(第四版) [M]. 高等教育出版社, 2006. 5.
[2] (英)Neil Matthew, Richard Stones著. 杨晓云等译. Linux程序设计(第二版)[M]. 机械工业
出版社, 2002. 1.
[3] (美)W.Richard Stevens, Setphen A Rago. Advanced Programming in the UNIX Environment
[M]. 人民邮电出版社, 2006. 2.
[4] 王珊, 孟小峰. 数据库系统导论(第七版) [M]. 机械工业出版社, 2000. 10. [5] Abnhrmx Silbersehaa. 数据库系统概念 [M]. 机械工业出版, 2006. 10.
[6] (美)沃尔特, 本-甘, 萨卡. Microsoft SQL Server 2005技术内幕-T-SQL程序设计 [M]. 北
京:电子工业出版社, 2007: 50-80.
[7] 微软公司著. 熊盛新, 许志庆, 李钦译. Visual C# .NET语言参考手册 [M]. 北京:清华大
学出版社, 2002年: 160-180.
[8] (美)Kaili Watson . C#2005数据库编程经典教程 [M]. 人民邮电出版社, 2007: 90-120. [9] 刘乃丽. 精通ASP.NET2.0+SQLServer 2005项目开发 [M]. 北京:人民邮电出版社,
2007: 100-150.
[10] Craig Hunt. Linux Sendmail Administration (Craig Hunt Linux Library) [M]. Sybex, 2001-2 [11] 欧立奇, 康祥顺, 马煜编著. Visual C# .NET 案例开发集锦 [M].北京:电子工业出版社,
2006:233-245.