一种嵌入式数据库变长字段存储的实现方法及装置的制作方法

文档序号:6460287阅读:125来源:国知局
专利名称:一种嵌入式数据库变长字段存储的实现方法及装置的制作方法
技术领域
本发明涉及计算机数据库存储领域中嵌入式系统的数据库存储,特别涉及 一种嵌入式数据库中变长字段存储的实现方法及装置。
背景技术
数据库广泛应用在各种计算机数据存储系统中,随着嵌入式设备的发展, 嵌入式终端上的应用也变得越来越复杂,对大量数据的存储管理需求使得嵌入 式数据库应运而生。与桌面计算机不同的是,嵌入式终端硬件资源受限,所以 往往内存比较小,另外由于缺乏虚拟存储管理,频繁的申请释放内存会造成内 存碎片,最终导致即使有内存却由于碎片过多也无法分配到。上述两点是考虑 嵌入式数据库设计的重要因素。字段是数据库记录中的一个数据单元,变长字 段即表示该字段的数据长度是不固定的,且会动态变化,它的设计是嵌入式数 据库设计中的难点部分,现有技术的方法有以下两种参考图h —种是为变长字段准备固定大小的内存,为了满足变长的需要, 这个固定的长度往往要准备的比较大,它能在一定程度上满足需要,但是本质 上它仍然是固定长度的字段,只是对于用户来说,它可以是变长的。它的优点 是不需要动态申请小内存块,不会产生内存碎片,但是不管该字段实际用了多 少内存,该字段始终会占据一块较大内存区,造成内存利用率低,浪费严重。参考图2,第二种方法是用动态申请内存的方式来存放变长字段,对每一 个变长字段记录根据需要的大小分配一块相应的内存。该方法对内存的利用效 率高,几乎没有浪费现象,但是对于嵌入式系统而言却不是好的方法。如果数 据库中存在大量的带有变长字段的数据记录,那么会动态分配出大量的小内存 块,如果这些字段被不停的更新,那么对小块内存的释放分配将更加频繁,由 于嵌入式系统的资源受限特性,这会产生大量内存碎片,最终导致系统内存无 法分配。因此,设计一个良好的变长字段实现方法对改善嵌入式数据库的性能是至关重要的。 发明内容本发明所要解决的技术问题在于,提供一种嵌入式数据库变长字段存储的 实现方法及装置,有效的解决了内存碎片问题,同时提高了内存利用率。为达到上述目的,本发明提供的嵌入式数据库变长字段存储的实现方法, 为所述数据库的每张数据表分配一个作为该表变长字段的专有内存区的大内存块,并将该内存块划分为若干个固定大小的BLOCK,该若干BLOCK可以 通过索引前后相连形成BOLCK链。上述嵌入式数据库变长字段存储的实现方法,当所述变长字段的实际长度 小于等于一个BLOCK的长度时,分配一个BLOCK来存储该变长字段;当所 述变长字段的实际长度大于一个BLOCK的长度时,分配由多个BLOCK形成 的BLOCK链来存储该变长字段。上述嵌入式数据库变长字段存储的实现方法,当所述变长字段更新时,将 原分配给该变长字段的BOLCK归还给所述专有内存区,然后重新从给专有内 存区分配出一定数据的BLOCK来存储更新后的变长字段。上述嵌入式数据库变长字段存储的实现方法,当所述变长字段要存储一段 数据时,从所述变长字段的专有内存区中寻找未被使用的BLOCK,根据数据 长度将该数据存储在一个BLOCK或若干的BLOCK形成的BLOCK链中,然 后记录该变长字段的起始BLOCK索引号和数据长度。上述嵌入式数据库变长字段存储的实现方法,当变长字段的数据被释放 时,依次遍历所述BLOCK链并将BLOCK置为未使用状态。上述嵌入式数据库变长字段存储的实现方法,所述起始BLOCK索引号表 示所述变长字段的数据起始存储位置的BLOCK。上述嵌入式数据库变长字段存储的实现方法,所述数据长度表示所述变长 字段的数据长度时多少。上述嵌入式数据库变长字段存储的实现方法,所述数据表中的所有变长字 段存储区都从所述变长字段的专有内存区获取。上述嵌入式数据库变长字段存储的实现方法,所述每个BLOCK是一个变 长字段的存储单元。进一步的,本发明还提供了一种采用上述方法的实现装置,包括 一内存配置模块,用于在创建数据表时,从系统中分配一块内存作为该表 变长字段的专有内存区,并将该专有内存区划分为若干个固定大小的BLOCK,该若干BLOCK可以通过索引前后相连形成BOLCK链;一存储控制模块,用于在所述变长字段需要存储一段数据时,从所述变长 字段的专有内存区中寻找未被使用的BLOCK,根据数据长度将该数据存储在 一个BLOCK或若干的BLOCK形成的BLOCK链中,然后记录该变长字段的 起始BLOCK索引号和数据长度。与现有技术相比,本发明提供的嵌入式数据库变长字段存储的设计实现方 法,通过变长字段之间共享专有内存块的方式,有效地避免了嵌入式系统中内 存碎片的产生,同时提高了内存利用率。


图1是现有技术固定长度内存实现变长字段存储示意图; 图2是现有技术动态内存实现变长字段存储示意图; 图3是本发明BLOCK共享内存实现变长字段存储的示意图; 图4是本发明变长字段记录存储实施例;图5是本发明嵌入式数据库变长字段存储的实现装置的示意框图。
具体实施方式
下面结合附图和具体实施例对本发明技术方案进行详细的描述,以更进一 步了解本发明之目的、方案及功效,但并非作为对本发明所附权利要求保护范围的限制。本发明的核心思想是为变长字段划分共享专有内存块。参考图3,数据库一般以表为组织单位, 一张表拥有多条记录,为每张表分配一个大内存块作为变长字段的专有内存区30,同时将这块内存划分成若 干固定大小的BLOCK300,表中所有的变长字段存储区都从这块专有内存区 30中获取。每个BLOCK是一个变长字段的存储单元,这些BLOCK可以通过 索引前后相连形成BLOCK链。当变长字段的实际内容较小时(不足一个 BLOCK的长度),可以通过分配一个BLCOK来容纳。当变长字段实际内容的数据长度超过一个BLOCK的长度后,可以分配多个BLCOK来存储,多个 BLOCK链接起来存储实际的数据。当字段内容需要更新时,只需要将BLOCK 归还给专有内存区30,然后重新从里面分配出一定数量BLCOK链,因为 BLOCK都是在专有内存区里分配的,所以可以避免系统内存碎片的产生。由 于表中所有记录的变长字段共享专有内存,当变长字段的实际长度大小不一时 可以最大限度的共享内存区域,在考虑最坏情况时每条记录的内存浪费也只是 一个BLOCK的零头,因此内存使用效率很高。采用本发明的方法,当变长字 段需要存储一段数据时,从专有内存区30中寻找没有被使用的BLOCK,如 果一个BLOCK不够,那么再寻找下一个BLOCK并将其链接在第一个BLOCK 的后面,直至可以容纳下变长字段的数据,然后将第一块BLOCK的索引号和 数据长度记录在record中。当释放变长字段数据时,依次遍历BLOCK链并将 BLOCK置为未使用状态即可。下面以实施例具体说明本发明方法的
具体实施例方式创建数据表时从系统分配一块内存作为变长字段专有内存,这块内存假定 为100K的大小,可以将这块内存划分成若干BLOCK,如果每个BLOCK为 20个字节,那么可以分成5000个BLOCK。这5000个BLOCK可以被所有的 变长字段共享,每个BLOCK的索引号就是BLOCK的顺序号。记录中的变长 字段用起始BLOCK索引号和数据长度来表示,起始BLOCK索引号表示变长 字段的数据起始存储位置的BLOCK, BLOCK本身可以相串成链以存储大容 量数据,数据长度表示该变长纪录的数据长度是多少。 一个含有变长字段的记 录存储示意图如图4所示,其中recordl中的(100/31)表示BLOCK索引号为 100,变长字段的长度为31("This book is about lovelyshark")。record2的BLOCK 索引号为90,变长字段的数据长度为5 ( "Hello")。其中recordl占用2个 BLOCK,浪费9个字节,record2占用一个BLOCK,浪费15个字节。平均来 看,每个变长字段浪费半个BLOCK大小的内存,内存使用效率较高。参考图5,本发明还提供了一种上述方法的实现装置50,包括 一内存配 置模块501,用于在创建数据表时,从系统中分配一块内存作为该表变长字段 的专有内存区,并将该专有内存区划分为若干个固定大小的BLOCK,该若干 BLOCK可以通过索引前后相连形成BOLCK链; 一存储控制模块502,用于 在所述变长字段需要存储一段数据时,从所述变长字段的专有内存区中寻找未被使用的BLOCK,根据数据长度将该数据存储在一个BLOCK或若干的 BLOCK形成的BLOCK链中,然后记录该变长字段的起始BLOCK索引号和 数据长度。虽然本发明已以一较佳实施例揭露如上,然其并非用以限定本发明,在 不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明 作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的 权利要求的保护范围。
权利要求
1、一种嵌入式数据库变长字段存储的实现方法,其特征在于,为所述数据库的每张数据表分配一个作为该表变长字段的专有内存区的大内存块,并将该内存块划分为若干个固定大小的BLOCK,该若干BLOCK可以通过索引前后相连形成BOLCK链。
2、根据权利要求1所述的嵌入式数据库变长字段存储的实现方法,其特 征在于,当所述变长字段的实际长度小于等于一个BLOCK的长度时,分配一 个BLOCK来存储该变长字段;当所述变长字段的实际长度大于一个BLOCK 的长度时,分配由多个BLOCK形成的BLOCK链来存储该变长字段。
3、 根据权利要求2所述的嵌入式数据库变长字段存储的实现方法,其特 征在于,当所述变长字段更新时,将原分配给该变长字段的BOLCK归还给所 述专有内存区,然后重新从给专有内存区分配出一定数据的BLOCK来存储更 新后的变长字段。
4、 根据权利要求2所述的嵌入式数据库变长字段存储的实现方法,其特 征在于,当所述变长字段要存储一段数据时,从所述变长字段的专有内存区中 寻找未被使用的BLOCK,根据数据长度将该数据存储在一个BLOCK或若干 的BLOCK形成的BLOCK链中,然后记录该变长字段的起始BLOCK索引号 和数据长度。
5、 根据权利要求2所述的嵌入式数据库变长字段存储的实现方法,其特 征在于,当变长字段的数据被释放时,依次遍历所述BLOCK链并将BLOCK 置为未使用状态。
6、 根据权利要求4所述的嵌入式数据库变长字段存储的实现方法,其特 征在于,所述起始BLOCK索引号表示所述变长字段的数据起始存储位置的 BLOCK 。
7、 根据权利要求4所述的嵌入式数据库变长字段存储的实现方法,其特 征在于,所述数据长度表示所述变长字段的数据长度时多少。
8、 根据权利要求1所述的嵌入式数据库变长字段存储的实现方法,其特 征在于,所述数据表中的所有变长字段存储区都从所述变长字段的专有内存区 获取。
9、 根据权利要求1所述的嵌入式数据库变长字段存储的实现方法,其特征在于,所述每个BLOCK是一个变长字段的存储单元。
10、 一种采用上述权利要求1 9中任一项所述方法的实现装置,其特征在于,包括一内存配置模块,用于在创建数据表时,从系统中分配一块内存作为该表变长字段的专有内存区,并将该专有内存区划分为若干个固定大小的BLOCK, 该若干BLOCK可以通过索引前后相连形成BOLCK链;一存储控制模块,用于在所述变长字段需要存储一段数据时,从所述变长 字段的专有内存区中寻找未被使用的BLOCK,根据数据长度将该数据存储在 一个BLOCK或若干的BLOCK形成的BLOCK链中,然后记录该变长字段的 起始BLOCK索引号和数据长度。
全文摘要
本发明公开了一种嵌入式数据库变长字段存储的实现方法及装置,所述方法为数据库的每张数据表分配一个作为该表变长字段的专有内存区的大内存块,并将该内存块划分为若干个固定大小的BLOCK,该若干BLOCK可以通过索引前后相连形成BOLCK链。当所述变长字段的实际长度小于等于一个BLOCK的长度时,分配一个BLOCK来存储该变长字段;当所述变长字段的实际长度大于一个BLOCK的长度时,分配由多个BLOCK形成的BLOCK链来存储该变长字段。本发明的应用有效的解决了内存碎片问题,同时提高了内存利用率。
文档编号G06F17/30GK101226553SQ200810057598
公开日2008年7月23日 申请日期2008年2月3日 优先权日2008年2月3日
发明者飞 殷, 童晓演, 薛晨曦 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1