【SQL开源代码栏目提醒】:网学会员--在 SQL开源代码编辑为广大网友搜集整理了:Berkeley DB 开源嵌入式数据库使用说明(上) - 讲义教程绩等信息,祝愿广大网友取得需要的信息,参考学习。
Berkeley DB:
开源嵌入式数据库使用说明上 像MySQL这类基于C/S结构的关系型数据库系统虽然代表着目前数据库应用的主流但却并不能满足所有应用场合的需要。
有时我们需要的可能只是一个简单的基于磁盘文件的数据库系统。
这样不仅可以避免安装庞大的数据库服务器而且还可以简化数据库应用程序的设计。
Berkeley DB正是基于这样的思想提出来的。
Berkeley DB简介 Berkeley DB是一个开放源
代码的内嵌式数据库管理系统能够为应用程序提供高性能的数据管理服务。
应用它程序员只需要调用一些简单的API就可以完成对数据的访问和管理。
与常用的数据库管理系统如MySQL和Oracle等有所不同在Berkeley DB中并没有数据库服务器的概念。
应用程序不需要事先同数据库服务建立起网络连接而是通过内嵌在程序中的Berkeley DB函数库来完成对数据的保存、查询、修改和删除等操作。
Berkeley DB为许多编程语言提供了实用的API接口包括C、C、Java、Perl、Tcl、Python和PHP等。
所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。
这样无论是系统中的多个进程或者是相同进程中的多个线程都可以在同一时间调用访问数据库的函数。
而底层的数据加锁、事务日志和存储管理等都在Berkeley DB函数库中实现。
它们对应用程序来讲是完全透明的。
俗话说“麻雀虽小五脏俱全。
”Berkeley DB函数库本身虽然只有300KB左右但却能够用来管理多达256TB的数据并且在许多方面的性能还能够同商业级的数据库系统相抗衡。
就拿对数据的并发操作来说Berkeley DB能够很轻松地应付几千个用户同时访问同一个数据库的情况。
此外如果想在资源受限的嵌入式系统上进行数据库管理Berkeley DB可能就是惟一正确的选择了。
Berkeley DB作为一种嵌入式数据库系统在许多方面有着独特的优势。
首先由于其应用程序和数据库管理系统运行在相同的进程空间当中进行数据操作时可以避免繁琐的进程间通信因此耗费在通信上的开销自然也就降低到了极低程度。
其次Berkeley DB使用简单的函数调用接口来完成所有的数据库操作而不是在数据库系统中经常用到的
SQL语言。
这样就避免了对结构化查询语言进行解析和处理所需的开销。
基本概念 Berkeley DB简化了数据库的操作模式同时引入了一些新的基本概念从而使得访问和管理数据库变得相对简单起来。
在使用Berkeley DB提供的函数库编写数据库应用程序之前有必要先了解以下这些基本概念。
关键字和数据 关键字Key和数据Data是Berkeley DB用来进行数据库管理的基础由这两者构成的Key/Data对见表1组成了数据库中的一个基本结构单元而整个数据库实际上就是由许多这样的结构单元所构成的。
通过使用这种方式开发人员在使用Berkeley DB提供的API来访问数据库时只需提供关键字就能够访问到相应的数据。
Key Data sport football Fruit orange Drink beer 表1 Key/Data对 如果想将第一行中的“sport”和“football”保存到Berkeley DB数据库中可以调用Berkeley DB函数库提供的数据保存接口。
此时“sport”和“football”将分别当成关键字和数据来看待。
之后如果需要从数据库中检索出该数据可以用“sport”作为关键字进行查询。
此时Berkeley DB提供的接口函数会返回与之对应的数据“football”。
关键字和数据在Berkeley DB中都是用一个名为DBT的简单结构来表示的。
实际上两者都可以是任意长度的二进制数据而DBT的作用主要是保存相应的内存地址及其长度其结构如下所示 typedef struct void data u_int32_t size u_int32_t ulen u_int32_t dlen u_int32_t doff u_int32_t flags DBT 在使用Berkeley DB进行数据管理时缺省情况下是一个关键字对应于一个数据但事实上也可以将数据库配置成一个关键字对应于多个数据。
对象句柄 在Berkeley DB函数库定义的大多数函数都遵循同样的调用原则首先创建某个结构然后再调用该结构中的某些方法。
从程序设计的角度来讲这一点同面向对象的设计原则是非常类似的即先创建某个对象的一个实例然后再调用该实例的某些方法。
正因如此Berkeley DB引入了对象句柄的概念来表示实例化后的结构并且将结构中的成员函数称为该句柄的方法。
对象句柄的引入使得程序员能够完全凭借面向对象的思想来完成对Berkeley DB数据库的访问和操作即使当前使用的是像C这样的结构化语言。
例如对于打开数据库的操作来说可以调用DB的对象句柄所提供的open函数其原型如下所示 int DB-openDB db DB_TXN txnid const char file const char database DBTYPE type u_int32_t flags int mode 错误处理 对于任何一个函数库来说如何对错误进行统一的处理都是需要考虑的问题。
Berkeley DB提供的所有函数都遵循同样的错误处理原则即函数成功执行后返回零否则的话则返回非零值。
对于系统错误如磁盘空间不足和访问权限不够等返回的是一个标准的值而对于非系统错误返回的则是一个特定的错误编码。
例如如果在数据库中没有与某个特定关键字所对应的数据那么在通过该关键字检索数据时就会出现错误。
此时函数的返回值将是DB_NOTFOUND表示所请求的关键字并没有在数据库中出现。
所有标准的errno值都是大于零的而由Berkeley DB定义的特殊错误编码则都是小于零的。
要求程序员记住所有的错误代号既不现实也没有什么实际意义因为Berkeley DB提供了相应的函数来获得错误代号所对应的错误描述。
一旦有错误发生只需首先调用db_strerror函数来获得错误描述信息然后再调用DB-err或DB-errx就可以很轻松地输出格式化后的错误信息。
上一篇:
Springmvc+hibernate+freemarker(开源项目)
下一篇:
学院规定:严禁元旦春节期间公款购买赠送土特产、烟酒等年货节礼