一种基于定长记录的数据库的数据存取方法

文档序号:6563652阅读:247来源:国知局
专利名称:一种基于定长记录的数据库的数据存取方法
技术领域
本发明涉及移动终端的数据库技术领域,具体涉及一种基于定长记录的数据库的数据存 取方法。
背景技术
数据库是移动终端最为有效的数据管理方式,鉴于移动终端存储空间的限制,以往要维 护多种类型的批量数据,主要采取以下两种方式基于存储器扇区的数据存取和基于变长记 录的数据库存取。
第一种方式,需要直接访问存储器驱动程序,非常不便于代码的移植和维护,也容易造 成存储空间的浪费,所以现在已经很少使用。
第二种方式,采用变长记录数据库,可以有效地避免存储空间的浪费,并且基于文件的 数据库也很方便移植,但随着移动终端功能的增强,需要维护的数据量大幅增加,变长记录 数据库对移动终端的性能影响也日益凸现,主要表现在以下几方面
1、 数据随机访问效率低下这是变长数据库记录存储方式决定的,随机访问需要遍历操 作;虽然可以通过建立索引方式提高速度,但索引表需要经常维护以保持同步。
2、 数据修改效率低下变长记录在修改时,如果体积增大就需要追加到文件尾部,旧记 录标记无效;多次操作后,会形成大量无效记录,数据库体积也会增大。
3、 数据库经常需要紧縮,影响移动终端设备的性能和可靠性,为了克服前述数据修改效 率低下的缺陷,需要通过紧缩来挤掉无效记录,但这个过程可能引起数据库文件的大段搬移, 可能引起设备长时间无响应,此过程被强制打断并引起数据库破坏的可能性也较大。
鉴于以上现有技术的不足,目前需要更为有效的数据维护手段,能够实现大批量数据的 高效访问和存取。

发明内容
为了克服现有技术中对数据库进行维护的缺陷,本发明提供了一种基于定长记录的数据 库的数据存取方法。 本发明具体是这样实现的
一种基于定长记录的数据库的数据存取方法,包括如下步骤
第1步,创建数据库文件,并写入头信息,所述头信息包括,文件头、数据库描述信息、 记录状态表,所述文件头包含数据库版本号;
第2步,根据指定的数据库的文件名,打开数据库,打开数据库后返回数据库实例指针; 并根据数据库版本及数据库描述信息,构造重要信息的内存实例; 第3步,对数据库进行数据存取;
第4步,关闭数据库,将所有对数据库的修改都回写到存储实体。 所述第l步中-
所述文件头,采用特殊标记标识,还包含创建文件的计算机系统的字长、高低位顺序, 所述文件头以字节为单位访问;
所述数据库描述信息,用来记录数据库关键信息,包含最大记录数,单个记录大小,当 前有效记录个数,记录类型;
所述记录状态表,用来表示当前数据库中所有记录的状态。 所述记录状态表,包括记录项; 所述记录项,包括记录项头和记录数据体, 所述记录项头,表示记录数据体的实际大小。 所述第2步包括如下步骤
根据打开数据库的参数的要求可以控制是否创建指定文件名不存在的数据库; 打开数据库时,还需对数据库版本、有效性进行检査,若出现版本不兼容或格式无效时, 则返回失败。
所述第3步中对数据库进行数据存取,可以是增加记录,具体包括如下步骤 首先根据数据记录状态表来查找是否有无效记录位置可进行数据存储,如果找到,则把 新记录写入无效记录位置处,否则,需要在文件后追加空间来写入新记录;
更新记录状态表以标识该位置已被占用,并保证记录状态表内存实例的同步。 所述第3步中对数据库进行数据存取,可以是删除记录,具体为
把记录状态表对应位置置为无效,真正的记录内容可以根据参数的需求来决定是否擦除, 若决定擦除,则用全零填充记录所占区域。
所述第3步中对数据库进行数据存取,可以是更新数据库记录,具体为 根据数据库描述信息及记录的id计算出该记录在数据库文件中的实际偏移; 把该记录写入旧记录位置;
根据该记录所对应的记录状态表位置,将其置为有效。 所述第3步中对数据库进行数辯存取,可以是査找数据库记录,具体为 根据数据库描述信息及记录的id计算记录的偏移,定位文件到该偏移位置, 读取定长记录的大小到输入缓冲,从而完成记录的査找。 所述第3步中对数据库进行数据存取,可以是枚举数据库记录,具体为 根据输入参数来决定是按照记录的id从0开始逐条枚举或是从指定的记录的id开始枚
举,直到遍历完整个数据库,
枚举到一条记录后,根据数据库描述信息及记录的id计算记录的偏移,定位文件到该偏 移位置,
读取定长记录的大小到输入缓冲,从而完成记录的枚举。 提供记录总数查询函数以获取数据库记录个数, 所述数据库记录总数是根据记录状态表进行统计。 采用本发明所述方法,具有如下有益效果-
对于频繁需要增加、删除和修改数据,且记录大小差异不会过大时,本发明所述数据库 可以提供优异的随机访问性能,数据随机访问时间受记录数多少的影响较小,在数据量较大 时这种优势体现的更明显;
对于数据量较大的应用,数据的随机检索性能仅受文件系统管理方式影响,对基于链式 存储结构的文件系统,会随数据量变大,性能逐渐下降,但链式存储还与链所维护的块大小 有关,块越大性能下降越慢;对基于表式存储结构的文件系统,数据量变大引起的性能下降 更是微乎其微,因为一级表查询耗时没有差别,二级表也仅仅多一次读过程,三级表在嵌入 式系统中使用的可能性就更小了。
总之,不论何种文件系统管理方式,相对于传统的变长数据库,本发明所述方法对定长 记录的数据库提供性能优异的随机访问性能,特别是删除和更新操作。


图1为数据库的基本存储结构示意图2为创建后的数据库示意图3为数据库更新第1条记录的状态示意图4为数据库删除第5条记录的状态示意图5为数据库査找第5条记录的状态示意图6为数据记录状态表的示意图; 图7为本发明基于定长记录的数据库的数据存取方法的流程图。
具体实施例方式
下面结合附图对本发明所述方法进行详细描述
如图1所示,为数据库的基本存储结构。
文件头用特殊标记标识,包含版本号等信息,以便数据库打开时判断其有效性;还包括 创建文件的计算机系统的字长、高低位顺序等,文件头部分必须以字节为单位访问。
数据库描述信息用来记录数据库关键信息,如最大记录数,单个记录大小,当前有效记 录个数,记录类型等;
记录状态表用来表示当前数据库中所有记录的状态,如有效、.无效、空间未分配等。
记录项包括记录项头和记录数据体,记录项头表明记录数据体的实际大小。
数据库提供为应用程序提供一个通用的数据存储手段,并未对存储内容进行任何限制和 假设,可以是文本、数字、图片、音视频或二进制流等;针对不同应用,数据库可以方便地 进行扩展功能,如增加记录检索、排序、校验、加/解密等。
数据库文件采用分段方式保存各类信息,可以方便地对不同应用设置合适的参数设置, 以避免或减少空间浪费。
数据库代码移植到不同平台主要考虑的是文件系统访问方式的修改,其它操作基本属于 平台无关;数据库文件头规定了必须以字节为单位访问,这就避免了不同平台之间字长及高 低位差异带来的影响。
数据库文件头包含版本信息,以便版本升级后能够向下兼容,不会引起数据库文件解析 问题。
对于频繁需要增加、删除和修改数据,且记录大小差异不会过大时,本数据库可以提供 优异的随机访问性能,数据随机访问时间受记录数多少的影响较小,这也意味着数据量较大 时更能体现其优势。
对于数据量较大的应用,数据的随机检索性能仅受文件系统管理方式影响。对基于链式 存储结构的文件系统,会随数据量变大性能逐渐下降,但链式存储还与链所维护的块大小有 关,块越大性能下降越慢;对基于表式存储结构的文件系统,数据量变大引起的性能下降更 是微乎其微,因为一级表查询耗时没有差别,二级表也仅仅多一次读过程,三级表在嵌入式 系统中使用的可能性就更小了。
不论何种文件系统管理方式,相对于传统的变长数据库,本数据库都能提供性能优异随 机访问性能,特别是删除、更新操作。
如图7所示,本发明所述方法的操作步骤,包括
第1步,创建数据库文件,并写入头信息,所述头信息包括文件头、数据库描述信息、 记录状态表,所述文件头包含数据库版本号;
第2步,根据指定的数据库的文件名,打开数据库,打开数据库后返回数据库实例指针, 并根据数据库版本及数据库描述信息,构造重要信息的内存实例;
第3步,对数据库进行数据存取;
第4步,关闭数据库,将所有对数据库的修改都回写到存储实体。 所述数据库的详细操作步骤包括-
数据库使用前先创建数据库文件,并写入头信息,包括文件头、数据库描述信息及完整 的数据记录状态表,此时状态表中均为空,记录项的空间并不分配,创建后的数据库如图2 所示。
(1) 数据库增加/删除记录过程
A、 打开数据库
根据指定的数据库文件名,打开数据库,根据打开参数的要求可以控制是否创建指定文 件名不存在的数据库。打开数据库还包括数据库版本、有效性等检査,当出现版本不兼容或 格式无效时会返回失败。另外根据版本及数据库描述信息,构造重要信息的内存实例以提供 高效的随机访问性能,打开后返回数据库实例指针以供其他操作使用。
B、 添加记录
增加记录时,首先根据数据记录状态表来查找一个无效记录位置进行存储;如果找到则 把新记录写入无效记录位置处;否则需要在文件后追加空间来写入新记录。更新或是追加后, 都需要更新记录状态表以标识该位置已被占用,并保证记录状态表内存实例的同步,数据库 添加第1条记录的状态如图3所示。
C、 删除记录
本数据库删除记录时,操作非常简单,只需要把记录状态表对应位置置为无效即可,真 正的记录内容可以根据参数的需求来决定是否擦除,擦除过程就是用全零填充记录所占区域, 数据库删除第5条记录的状态如图4所示。
D、 关闭数据库
完成访问后,需要关闭数据库,主要操作就是保证数据库文件的正常关闭,以及其所有 修改都回写到存储实体。
(2) 数据库更新/査找/枚举记录过程 打开和关闭数据库是所有操作的前提,具体内容同上,因为是定长记录,无需担心新记
录无法写入旧记录的位置。更新时首先根据数据库描述信息及记录的id算出该记录在数据库 文件中的实际偏移,把新记录写入旧记录位置,然后该记录所对应的记录状态表位置,将其 置为有效,数据库更新第1条记录的状态同图3。
查找过程也是根据数据库描述信息及记录的id计算记录的偏移,定位文件到该偏移位置, 读取定长记录的大小到输入缓冲,从而完成记录的查找。数据库査找第5条记录的状态同图
枚举过程根据输入参数来决定是按照id从0开始逐条枚举或是从指定id开始枚举,直到 遍历完整个数据库。枚举到某一条记录后,操作和查找过程完全一样。 (3)数据库辅助操作过程
为了便于获取数据库记录个数,提供记录总数查询函数,与普通数据库不同,记录的个 数并非直接存储在数据库的某一位置,而是根据记录状态表进行统计,如图6所示,共有5 条有效记录,2条无效记录,其他空间尚未分配,这样可以保证得到的总数是准确的,并有 助于剔除数据库异常操作时带来的无效数据。
本发明所实现的数据库基于定长记录,这也限制了其应用范围,比如不适用数据量很少、 记录只增加不用修改或记录大小差异过大的情况,本数据库就难以体现其优势了,如日志数 据。
权利要求
1.一种基于定长记录的数据库的数据存取方法,其特征在于,包括如下步骤第1步,创建数据库文件,并写入头信息,所述头信息包括文件头、数据库描述信息、记录状态表,所述文件头包含数据库版本号;第2步,根据指定的数据库的文件名,打开数据库,打开数据库后返回数据库实例指针,并根据数据库版本及数据库描述信息,构造重要信息的内存实例;第3步,对数据库进行数据存取;第4步,关闭数据库,将所有对数据库的修改都回写到存储实体。
2. 如权利要求1所述的基于定长记录的数据库的数据存取方法,其特征在于,第1步中 所述文件头,采用特殊标记标识,还包含创建文件的计算机系统的字长、高低位顺序; 所述文件头以字节为单位访问;所述数据库描述信息,用来记录数据库关键信息,包含最大记录数,单个记录大小,当 前有效记录个数,记录类型;所述记录状态表,用来表示当前数据库中所有记录的状态。
3. 如权利要求2所述的基于定长记录的数据库的数据存取方法,其特征在于 所述记录状态表,包括记录项;所述记录项,包括记录项头和记录数据体; 所述记录项头,表示记录数据体的实际大小。
4. 如权利要求1所述的基于定长记录的数据库的数据存取方法,其特征在于,所述第2 步包括如下步骤根据打开数据库的参数的要求可以控制是否创建指定文件名不存在的数据库; 打开数据库时,还需对数据库版本、有效性进行检査,若出现版本不兼容或格式无效时, 则返回失败。
5. 如权利要求1所述的基于定长记录的数据库的数据存取方法,其特征在于,所述第3 步中对数据库进行数据存取,可以是增加记录,具体包括如下步骤-首先根据数据记录状态表来查找是否有无效记录位置可进行数据存储,如果找到,则把 新记录写入无效记录位置处,否则,需要在文件后追加空间来写入新记录;更新记录状态表以标识该位置已被占用,并保证记录状态表内存实例的同步。
6. 如权利要求1所述的基于定长记录的数据库的数据存取方法,其特征在于,所述第3 步中对数据库进行数据存取,可以是删除记录,具体为把记录状态表对应位置置为无效,真正的记录内容可以根据参数的需求来决定是否擦除, 若决定擦除,则用全零填充记录所占区域。
7. 如权利要求1所述的基于定长记录的数据库的数据存取方法,其特征在于所述第3 步中对数据库进行数据存取,可以是更新数据库记录,具体为-根据数据库描述信息及记录的id计算出该记录在数据库文件中的实际偏移;把该记录写入旧记录位置;根据该记录所对应的记录状态表位置,将其置为有效。
8. 如权利要求1所述的基于定长记录的数据库的数据存取方法,其特征在于,所述第3 步中对数据库进行数据存取,可以是査找数据库记录,具体为根据数据库描述信息及记录的id计算记录的偏移,定位文件到该偏移位置,读取定长记录的大小到输入缓冲,从而完成记录的查找。
9. 如权利要求1所述的基于定长记录的数据库的数据存取方法,其特征在于所述第3 步中对数据库进行数据存取,可以是枚举数据库记录,具体为根据输入参数来决定是按照记录的id从0开始逐条枚举或是从指定的记录的id开始枚举,直到遍历完整个数据库,枚举到一条记录后,根据数据库描述信息及记录的id计算记录的偏移,定位文件到该偏 移位置,读取定长记录的大小到输入缓冲,从而完成记录的枚举。
10. 如权利要求1所述的基于定长记录的数据库的数据存取方法,其特征在于提供记录总数査询函数以获取数据库记录个数, 所述数据库记录总数是根据记录状态表进行统计。
全文摘要
本发明提供了一种基于定长记录的数据库的数据存取方法,包括创建数据库文件,并写入头信息,所述头信息包括,文件头、数据库描述信息、记录状态表;根据指定的数据库的文件名,打开数据库,打开数据库后返回数据库实例指针;对数据库进行数据存取;关闭数据库,将所有对数据库的修改都回写到存储实体。相对于传统的变长数据库,本发明所述方法对定长记录的数据库提供性能优异的随机访问性能,特别是数据存取中的删除和更新操作。
文档编号G06F17/30GK101192226SQ20061016076
公开日2008年6月4日 申请日期2006年12月1日 优先权日2006年12月1日
发明者勇 张, 玮 张, 裴晓刚 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1