BerkeleyDBC编程入门教程.docx
《BerkeleyDBC编程入门教程.docx》由会员分享,可在线阅读,更多相关《BerkeleyDBC编程入门教程.docx(102页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、BeikebyDB数据库C语言入门教程12 版本 1 LbiaiVersbn 12L60丿予目4关于本手册9第一章 Berkeley DB 概念10访问方式13如何选择访问方式14在BTree和Hash之间选择15在 Queue 和 Recno之间选择16数据库的限制与可移植性17环境18错误返回信息19获取和使用DB20第二章数据库21打开数据库21前期编译准备21新建项目23项0源代hT25关闭数据库28数据库打开标志29管理用的方法29报错函数30在环境中管理数据库32数据库例子33Gettingstarted_common.h34Gettingstarted_common.c35第三章
2、数据库记录40使用数据库记录40读写数据库记录42获取记录44删除记求45数据持久性46使用C结构体47使用指针的C结构体49数据库使用例子51Example_database_load.c 文件52第四章使用游标59打开和关闭游标59搜索记录61乍R 64使用游标存储数据66使用游标覆盖记录69游标例子71第五章备用库(索引库)78打开和关闭备用库(索引库)80索引库提取关键词81使用多个key84从索引库中读取86删除索引记录88在索引库中使用游标89数据库连接90使用 Join Cursors91索引库的例子93第六章数据库配置94设置页面大小94Overflow Pages(溢出页)9
3、5Locking (锁定)96I/O效率97定义页大小的建议97选择缓冲大小98BTree 配置98允许冗余记录集99非排序的冗余记录99设置比较提取的回调函数错误!未定义书签。附录1: Linux下设置lib信息104附求 2: Linux 下个完整的例子105操作系统安装106女装 Berkeley DB106设置操作系统环境107修改初始化文件107设置链接库路径107写程序108序言这个文章是我参考Oracle网站的官方英文版Oracle Berkeley DB Getting Starged with Berkeley DB for C 12c Release 1文件进行的翻译 描述
4、。我个人是希望通过翻译这个资料,把我们学习BarkeleyDB所 需要的技术做个完整的梳理,完成这个文档后,希望能够把安装和 编译BerkeleyDB所需的技术做个相对完整的描述。能为大家今后 学习做个铺垫。实验室段吉民2014-7-11欢迎来到Berkeley DB的世界,这篇文档对Berkeley DB12c第一 版进行介绍,提供的数据库版本是12.1.6.0 本文作为介绍DB API的设置与使用的快速入门手册,目标是提 供个快速有效地机制,能让你进入BerkeleyDB研发的世界。在本 文中侧重于C语言的研发人员,以及研究进城内数据管理解决方案 的资深架构师。研究本文无需特定的Berke
5、ley DB的基础或者前提。 (不过最起码的C语言基础和数据库知识,还是需要的。)首先介绍的是排版格式与内容描述,一般会用加粗字体表示函数 名称。例如:DB-open()就是个函数名称,或者变量名称。对于变量,或者些定义类的,用斜体字表示,例如DBJNSTALL 目录名称对于展现的源代码信息,一般使用特殊背景色表示,例如:/*File: gettingstarted_common.h*/Typedef struct stock_dbs DB *inventory_dbp; /* Database containing inventory information*/DB *vendor_dbp;
6、 /*Database containing vendor information */Char *db_home_dir; /Directory containing the database files */Char *inventory_db_name ;Char * vendor_db_name;STOCK_DBS;获取更多信息,可以参考以下资料:Getting Started with Transaction Processing for CBerkeley DB Getting Started with Replicated Applications for CBerkeley D
7、B C API Reference GuideBerkeley DB C+ API Reference GuideBerkeley DB STL API Reference GuideBerkeley DB TCL API Reference GuideBerkeley DB Installation and Build GuideBerkeley DB Upgrade GuideBerkeley DB Getting Started with the SQL APIs以上书籍的英文版可以在网上下载。后期会根据实际需求,逐步 翻译完成这些书籍的。第一章 简介Berkeley DB欢迎来到Ber
8、keley DB (简称DB)。DB是个通用的嵌入式数据 库引擎。能够提供海量数据管理服务。它从萌芽设计开始,就是为了 应对嵌入进程的高吞吐量应用,高可用性数据管理(bullet-proof - 防弹的 mission critical关键业务)。DB能够从容应对从少数字节处 理到TB级数据的业务。在绝大多数情况下,对DB唯一的限制是你 的硬件资源。你可以通过编程操作DB提供的AP!完成一系列的数据库操作, 包括读、写数据,管理多个数据库,执行高级的数据操作活动(例如 事物处理 Transactions )由于DB是个嵌入式的数据库引擎,它是极为高速快捷的。(亙 以做实时数据库,效率绝非现在我
9、们使用的大多数臃肿的关系型数据库可比。- 港法)可以做为第三方的代码库或者直接编译到你的应用软件里面。 这意味着数据库将与你的应用程序在相同的内存空间中运行。与使用 独立运行的数据库服务器相比,DB为你节省大量的交互操作开销。(想象一下你的程序调用各种接口 (包括ADO, ODBC, JDBC等层层包装), 然后再通过拥塞的网络发送请求,服务费接收请求再反向编译成可执行的代码, 再提交服务器进程解析,后面一系列的操作直到最后把数据再通过网络返回来, 重新通过接口返回到你的应用程序内存。译者注)如果还嫌不够快,还有更快的,可以直接把DB放在内存中。通 过把经常使用的数据放入内存的方法,一次性设置
10、,后面会自动处理 该数据库的缓冲,它的操作无需牵扯程序员太大的精力。除了高速度,DB也提供极为便捷的可配置性(这里的可配置性,是 指数据存储的方式,并非指数据库的编译方式译者注)。它提供了不同的数 据组织方式,命名为Access Methodsv (访问方式)。DB对于不同 存储特性的数据结构,提供了不同的访问方式(截止12C版本,提 供四种,BTree, Hash, Queue, Recno),程序员可以根据数据的不 同组织方式,为每个数据库选择其适合的访问方式。(注意本书把精 全部集中在Btree的访问方式上,涉及的应用程序以BTree方式为 主。)另一特性是DB提升了它的可配置性(是指附
11、加的子系统模块,也不 是编译方式译者注)。DB提供了多个不同的子系统,每个子系统都能 在某些方面扩展DB的能力。比如某些应用,要求具有数据写保护功 能,来确定数据不会因为某些异常因素造成不一致性。(比如突然的 断电或者硬件故障造成的数据不一致)。为了某些应用系统,启动事 物子系统(Transaction Subsystem)能够启动事物级的数据库写保护。DB能够支持的操作系统太多以至于不方便在这里列出(好有自信 的描述译者注),但可以肯定的是Berkeley DB支持所有的商用操作系 统,以及众多的嵌入式平台。最后,DB支持大量的程序开发语言。除了明确指出的C语言, C+语言,Java语言接口
12、之外,编译后的Libarary在众多的编程语言, 脚本语言(例如Perl, Python)上得到完美的支持。注:在继续了解DB之前,必须明确DB不是个关系型的数据 库系统,虽然可以通过它构建一个关系型数据库系统(比如使用 BerkeleyDB作为数据库引擎的Mysql),同样,DB也不支持诸如SQL(结构化查询语言),触发器等高级结构体。但是作为替代的解决方案,DB提供了最少的AP!操作要求来完成存储和获取数据的操作, 以最咼效率为追求目标。关于本手册本手册介绍了 Berkeley DB象这样的一本手册不能够完全涵盖 DB的所有中级和高级功能,例如线程库的使用或者事物的使用。但 是本手册提供了
13、一个导航式的一步一步介绍DB的基础内容和库的用 法。而且,本手册特别介绍了关于DB environments (数据库环境), 数据库,数据库记录,存储和获取数据库记录。并且本书介绍了游标 和他的用法,并且描述了辅助数据库的概念。本书中的大部分篇幅,描述集中在使用BTree访问方法。最后使 用一个专门的章节介绍了使用BTree用法,描述记录复制和比较例 程。本书中给出的所有例子都是被设计为使用API的举例。每个章 节的结束,都会给出个复杂的例子,重点培养你对这一章节内容的 理解和使用。并且这些例子,你可以在DB_INSTALL/examples/c/getting_started 目录下找到,
14、并且,此类 用法与C+, Java的语言环境相似。第一章Berkeley DB概念在继续介绍DB之前,有必要对BerkeleyDB的诸多概念进行个 梳理,尤其是以前使用关系型数据库的读者,这是入门的第一关。(基 种嵌入式数据库的概念与传统我们接触过的Oracle, DB2, Mysql, SqlServer, Access等数据库都不一样,尤其是基础概念的差距非常大,但是可以用Mysql 做个中转站,因为Berkeley DB曾经是Msql5版本以前选择的数据库引擎! 一学者注)关于数据库记录(records)的概念:DB数据库包含有记录,理论 上讲,每个记录相当于数据库中的一个单独的条目(e
15、ntry,或者翻译 成入口)。每个记录包含两个信息片段:Key和Data。本书中用记 录的Key和记录的Data来描述它们。(可以这样理解,Key是用来在个 表中描述唯一值的属性,相当于。rack表中RowID的概念,或者说Mysql表中 的主键;而Data是个数据结构,这个数据结构中的每个值都对应表的一列。 可以把个MW表中,除了主键以外的所有列,用个数据结构描述,这个 数据结构的整体就是Data。详细的说明本文后面的例子会描述译者注)正是由于DB数据库中使用了 Key/Data配对的方式描述记录,因 此有时可以被理解为个包含有两列的表。然而,Data (有时是Key, 这个要依赖于访问模式
16、)能够保存任意复杂的数据。通常情况下,C 的结构体或者其他类似机制能够在记录中保存。把个具有N列的 表,分为1 (Key)和N-1 (Data)歹,然后作为个有两列的表来操 作。注意BerkeleyDB的数据库的概念非常接近关系型数据库中表 的概念。因此个DB的应用程序,往往要调用到多个数据库,就好 像在个RDBMS的应用中(关系型数据库管理系统)要用到多个表 样。与关系型系统不同,个BerkeleyDB的数据库,只能包含一种数 据组织方式,它可以(也只能是)下面四种方式之一:BTree, Hash, Queue, Recno而在关系型数据库系统中,底层的数据访问方式通 常是被隐藏起来的。无论
17、如何,大多数的DB数据库应用,要求为每种单独的数据 应用设计个独立的数据库来存储此类数据,因而大多数DB应用要 求会存在多种类型的数据。举例来讲,在个用户管理系统中,可能会要求管理银行客户, 检查客户信息,存储,地区等等资料。在关系型数据库中,会要求多 个表来进行操作。而在DB中,要求设计多个数据库来满足要求。既然会存在多个数据库,那么如何才能有效管理这些数据库呢? DB应用能够使用个名为环境(environment)的子系统扩展来有限的 管理多个数据库系统。有关“环境”的概念后面会详细介绍,这里是 借着多个库管理的问题引入一下。当你使用特定的结构体,调用DB API接口与数据库交互时,这 些
18、接口通常被称为“方法”(Method),因为他们与C+类的方法是如 此相似。同样,用来访问数据库的变量通常被称为handle (句柄)。 举例:要使用个数据库,你必须获取这个数据库的句柄!从数据库获取结果集,通常被称为getting,因为使用get()这个函 数来获取。同样,向数据库保存记录,被称为put,因为使用put()函 数。当你想数据库存储一条记录,这条记录会按照预定的排序方式, 被有序的存放入数据库。排序的一句往往依赖于Key,但有时也会去 参考Data的数值。如果你存储的数据与已有的Key相同,现有记录 的Data将被新记录的Data所取代。然而,如果数据库支持duplicate
19、records (多重记录,即个Key和多个Data),那么新记录将被作为 多重记录保存,不会覆盖已有的记录。同样,如果数据库支持了多重 记录,当使用数据库句柄获取时,只能获取结果集中的第一条记录。(从多重记录的概念引发需求,然后讲解解决方案游标译者注)另一个扩展机制是游标,你可以使用游标读写特定的数据。游标 是用来操作数据的基本的重复者,使用游标可以对个数据库进行从 头到尾(或者从尾到头)的遍历。还可以使用游标定位特定记录。在 支持多重记录的数据库中,游标是唯一的方法。最后介绍一下Secondary Database Berkeley DB提供种特定的 数据库,名为辅助库(Secondary
20、单词翻译含义:二级,辅助,备用,由于 后面用了Primary这个词,与之对应,翻译为辅助一译者注)。按照功能描述, 辅助库作为索引而存在,为普通库(为了与辅助库区分,这里称为 Primary Database主库)提供索引服务。由于DB的记录能够包含复 杂数据类型,也就是前面我们说的,把多个列(比如:姓名,年龄, 籍贯,住所,邮编)包装成一个数据结构X,然后把这个数据结构X 作为个整体存进去,但是对一个给定结果的检索,只能基于这个记 录的Key。通过这个Key找到个X,再把X提取出来,由我们的 程序进行分解,提取出姓名,年龄,籍贯,住所,邮编等信息。但是 如果我们想查查姓名等于“张无忌”的信息
21、,这时候就需要引入辅助 库来进行操作了。Q这里举例Oracle的表和索引来对应一下。Oracle 的Row ID相当于BerkeleyDB的Kev,是个唯一的值,这时表tbljusers就相当 于Berkeley DB的数据库dbjuser。我们在表tbl u$er$上面建立一个索引 idx user,针对用户姓名建立索引,索引本身就是个数据段,相当于Berkeley DB的辅助库dbsec jusers。索弓idx_users中会存储对应tbljusers的Row)和用 户名,而不是存全部的tbljusers的数据。同样,dbec usem里面会存储db jisers 的Key和用户名,也不
22、会存储整个用户的数据结构一译者注)访问方式虽然本书着重介绍BTree访问方式,但是依然会对所有DB能够支持的访问方式做一个简短的介绍。需要注意对于个数据库来讲,访问方式在创建数据库的时候就被确定了。一旦选中,实际的API操作就都会通过这个方式来访问这 个数据库。即使是在某些异常事件发生的时候,也只能通过选中的方 式对数据库进行访问。(特定的访问方式决定了数据库文件的格式,用BTree 方式创建的数据库,当然无法用。ueue的算法解释译者注)确定访问方式的第一个把关者是对Key的使用方式,或者说Key 的结构类型。第二个是考虑性能。首先对四种访问方式进行下描述: BTree数据被存储在个排序过的
23、,平衡的树状结构中。对BTree中的Key或者Data的数据复杂度,不做限制。也就是说,他们可以包含一个简单的字符串或者数字,也可以是一个复杂的数据结构体。另外,虽然不是默认的行为,但是确实存在两个记录使用个相同的Key的情况。在这种情况下,会根据数据库设置的条件,是否启用了允许重复记录,来判断是覆盖掉,还是允许多重 记录的情况。 Hash数据被存储在一个可扩展的线性哈西表中。与BTree相似, 使用Hash存储方式的数据库,Key和Data记录都可以存储复杂 的数据结构。同样,Hash存取方式的数据库也支持多重记录(duplicate records) Queue数据存储在队列中,每个成员都
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BerkeleyDBC 编程 入门教程
限制150内