CN1430148A - 嵌入式数据库存储和访问的方法 - Google Patents
嵌入式数据库存储和访问的方法 Download PDFInfo
- Publication number
- CN1430148A CN1430148A CN 01138093 CN01138093A CN1430148A CN 1430148 A CN1430148 A CN 1430148A CN 01138093 CN01138093 CN 01138093 CN 01138093 A CN01138093 A CN 01138093A CN 1430148 A CN1430148 A CN 1430148A
- Authority
- CN
- China
- Prior art keywords
- page
- buffer
- record
- class
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了嵌入式数据库存储和访问的方法,所述存储方法包括以下步骤:将嵌入式数据库按照需要分为第一类表和第二类表,所述每个第一类表和第二类表都具有唯一的表存储类型标识;以及同时在嵌入式数据库创建第一系统表和第二系统表,所述第一系统表存储了所述第一类表和第二类表对应的表的定义,所述第二系统表存储了所述第一类表和第二类表对应的表的所有字段的定义;将第一类表和所述两个系统表存储在硬盘或FLASH中;以及同时将第二类表存储在内存的缓冲池中。采用本发明的方法,可以根据需要将数据库存储在不同的存储介质中,同时还可以在应用时根据存储空间的情况,合理安排表的大小。
Description
技术领域
本发明涉及嵌入式数据库领域,提供了嵌入式数据库存储的方法及基于该存储方法的数据库访问的方法。
背景技术
传统的数据库系统一般都是运行在大型的计算机设备上,包括主机系统和各种各样的服务器,随着计算技术在各种设备上的应用,数据库的小型化也日益迫切,如嵌入式数据库。与大型计算机设备相比,这些设备内存较少,硬盘也较少,因此简单地将原来的大型数据库移植到小型设备上效果并不好,必须依据这些设备的特点专门设计数据库系统。
目前嵌入式数据库的存储方法都是建立在一个文件系统之上,以一个文件或多个文件的形式存在,这种存储方式限定了数据库只能存储在一个介质之上,亦即或者全部存储在硬盘,或者全部存储在内存,这类数据库存储方法只适应于没有硬盘的设备。但大量的设备不仅需要永久性存储部分数据,同时也要大量存储和高频率地访问临时性数据。一个典型地应用实例是同步数字体系(SDH)设备,SDH在网元层(AGENT)需要保存大量的配置数据及临时性的数据如告警、性能等,由于FALSH空间有限,只能存储配置数据,大量地临时性数据,如告警、性能等只能在内存中存储。也就是说,某些情况下不仅硬盘空间不能存储所有的数据,而且也不能存储在硬盘中,因为某些数据的访问频率很高,对性能要求苛刻,而硬盘的访问速度达不到此类要求。
另一方面,由于设备的存储空间有限,应用需要限制某些表所占用的空间大小,以防止某些表占用过多的空间,目前的嵌入式数据库没有提供限制表空间的方法。
发明内容
本发明所要解决的技术问题是为了克服目前嵌入式数据库的存储方法限定了数据库只能存储在一个介质之上,亦即或者全部存储在硬盘,或者全部存储在内存中的技术问题。
进一步地,本发明所要解决的技术问题是为了克服目前嵌入式数据库的存储方法没有提供限制数据库表占用空间的技术问题。
相应地,本发明还提供了提供一种基于上述嵌入式数据库存储方法的数据库表访问方法。
实现本发明所要解决的技术问题而采取的技术方案概括如下:
提供一种嵌入式数据库的存储方法,包括采用下列步骤:
将嵌入式数据库按照需要分为第一类表和第二类表,所述每个第一类表和第二类表都具有唯一的表存储类型标识;以及同时
在嵌入式数据库创建第一系统表和第二系统表,所述第一系统表存储了所述第一类表和第二类表对应的表的定义,所述第二系统表存储了所述第一类表和第二类表对应的表的所有字段的定义;
将第一类表和所述两个系统表存储在硬盘或FLASH中;以及同时
将第二类表存储在内存的缓冲池中。
另一方面,提供一种与基于嵌入式数据库的存储方法相应的数据库的访问方法,包括下列步骤:
内存缓冲池初始化;
从硬盘或FLASH中读取所述第一系统表和第二系统表,并存储在内存的缓冲池中;
在内存的缓冲池中查找所访问的第一类表页面,若查到,将该页面对应缓冲页面放到最近访问页面链表的开头,若查找不到,从硬盘或FLASH中读取第一类表该页面并存储到内存的缓冲池中;
为第二类表在内存缓冲池中分配空间;
在内存的缓冲池中对数据库进行读和写的操作。
进一步地,所述的第一类表和第二类表又可以按需要被择一地设定为动态表、覆盖表和非覆盖表。
采用本发明的技术方案,提供一种嵌入式数据库的存储方法和相应的访问方法,根据应用需要,可以将数据库同时存储在硬盘(或FLASH)和内存中,用户根据需要可以将数据库表分别放在硬盘中和内存中,对需要永久保存的数据存储在建立在硬盘上的表,临时性的数据存储在建立在内存上的表;由于仅仅需要保存的数据存储在硬盘中,可以大大减少对这类设备空间的需求,尤其对这类存储设备比较少的设备;某些表在内存中实现,对那些临时性的、访问频率较高的数据大大提供了访问速度,因为永久性设备的访问速度远远低于内存的访问速度。同时实现了多种表类型的存储,覆盖表和非覆盖表可以限制表的空间大小,应用时可以根据存储空间情况,合理安排表的大小;覆盖表记录了记录的生成顺序,并按照顺序自动覆盖最早的记录,可以处理与时间有关的记录。
附图说明
图1是实现本发明的嵌入式数据库的基本层次结构示意图
图2是本发明的表的逻辑地址空间图
图3是本发明的一个页面的结构图
图4是本发明的动态表和非覆盖表的记录结构图
图5是本发明的覆盖表的记录结构图
图6是本发明的缓冲池的结构图
图7是本发明的缓冲池的缓冲页面的结构图
图8是本发明在缓冲池访问一个页面的处理流程图
图9是本发明创建数据库表的处理流程图
图10是本发明打开数据库的处理流程图
图11是本发明的覆盖表插入记录的处理流程图。
具体实施方式
下面将结合附图,举例说明本发明的一个实施的方式。
首先,本发明所述的第一类表是指FLASH表,第二类表是指RAM表,本发明所说的FLASH表指存储在文件系统中的表(文件系统可以基于硬盘、FLASH或RAM等),RAM表指存储在内存中的表。本发明所述的动态表是指空间不受限制的表;覆盖表是指表的最大记录数固定,当表的空间满后,新插入的数据自动覆盖最早产生的记录;非覆盖表是指表的最大记录数固定,当表的空间满后,再插入数据失败。
一方面,本发明所提供的一种嵌入式数据库的存储方法,具体来说是这样实现的:
将数据库分为两类表:FLASH表和RAM表,FLASH表存储在文件系统(文件系统可以基于硬盘、FLASH或RAM等),RAM表只存储于内存。每一个表都有唯一的表存储类型标识ID(取值为大于零的整数),并且FLASH表和RAM表的表存储类型标识ID取值范围不同,例如0~1000为FALSH表,1001~2000为RAM表,则整个数据库最多可以有2000个表,表存储类型标识ID取值范围根据数据库大小可以自行配置。根据表的表存储类型标识ID及取值范围,可以唯一确定某一个表及其存储类型。
数据库中有两个系统表,即第一系统表systables和第二系统表sysfields,这两个表都是FLASH表和动态表,两个表的表存储类型标识ID是固定分配的(如FLASH表ID取值范围的最小的两个ID数值)。第一系统表systables存储了数据库中所有用户表的定义,其每一行是一个表的定义;第二系统表sysfields存储了数据库中所有用户表的所有字段定义,其每一行是一个字段的定义。关于表的定义包含了如下几个重要的特征信息:(1)表存储类型标识ID,根据该ID,可以唯一确定一个表及其存储介质和位置(2)表名,是一个字符串,整个数据库表名字域不允许重名(3)表类型,表类型标识了表的存储与访问方法,共有动态表、覆盖表和非覆盖表三种类型(4)最大记录数,表示该表可以存储的最大记录数,动态表的记录数是不受细限制的,该信息无效,该信息用于实现覆盖表和非覆盖表的空间限制(5)页面大小,每一个表的页面大小可以根据需要设置大小。关于表的字段定义包含如下几个重要的特征信息:(1)表存储类型标识ID,表示该字段是某表的字段定义(2)字段类型,即是整数、字符等数据类型(3)字段长度,用于字符串类型的最大长度,根据字段类型和字段长度,可以计算出记录的长度。
所有的FLASH表存储在硬盘上的一个目录下,每一个表对应唯一的文件,文件名与表名相同。当创建一个数据库后,有两个系统表的文件第一系统表systables和第二系统表sysfields。
所有的RAM表存储在内存中的一个缓冲池中,后面将详细介绍。
表的逻辑存储空间结构。表的地址空间由一个或多个大小相等的页面组成,为了标识页面将一个表的页面从1开始编号,如某表有n个页面,则页面号从1到n。每一个页面由大小相等的记录组成,每一个页面可以存储的记录数=页面大小/记录大小,一个表的所有记录从1开始编号,根据记录号、页面号和每页面存储的记录数,可以确定记录的存储位置,通过表ID和记录号,可以唯一确定数据库中的一个记录。由于一个页面只能存储整数个记录,所以每一个页面最后有小于记录大小的空间浪费,但在本发明方案中,每一个表的页面是可以调节的,根据需要可以调大或调小页面以减少空间浪费。同时将页面调大,可以实现存储足够大的记录。由于涉及到读写硬盘,页面的过大将影响性能,因此根据应用需要对该参数做适当调节。
记录的结构。一个记录包括记录头和记录体两部分,记录体为存储的应用实际数据,记录头用于数据库维护。所有表类型的记录头都有一个字节的标志位Flag,表示该记录是空闲或已经存储数据,对覆盖表记录头还包括两个指针,分别指向其前面一条生成的记录和其后面一条生成的记录,该链表记录了记录的生成先后顺序。
RAM表的存储。RAM表指存储在内存中的表,其逻辑存储空间结构与FLASH表完全相同,即有n个相等大小的页面组成,每个页面有m个大小相等的记录组成,与FLASH表不同之处在于其只存储在内存,在硬盘上并没有与之向对应的文件。RAM表存储在一个内存缓冲池,RAM表的所有页面存储在该缓冲池,缓冲页面包括两个部分:页面头和页面体,页面头包含了表ID、表页面号、标志位IsFix和修改表示IsDirty等,这些信息唯一确定了一个表的数据页面,页面体存储了表的数据页面。标志位IsFix用于区分该页面是RAM表还是FLASH表的页面。
FLASH表的访问也必须通过该缓冲池,当访问页面不在缓冲池时,则调入该数据页面再访问,缓冲页面的结构与RAM表相同,当某个页面被修改后,则从缓冲池写入硬盘,关于FALSH表缓冲页面的数量可以达到存储整个数据库的FLASH表数据,也可以提供固定个数的缓冲页面数,这些页面按照最近访问原则循环使用,该参数的配置应考虑应用对速度的要求与内存的限制。
因为RAM表和FLASH表都存储在同一个缓冲池中,所以用缓冲页面头的标志位IsFix区分RAM表页面和FLASH表页面,RAM表的页面不允许重用,RAM表的缓冲页面应动态从内存中分配。正是这个标志,实现了RAM表在内存中的存储,并与FLASH表统一处理。
缓冲池的结构。缓冲池由缓冲页面构成,缓冲页面包括页面头和页面体。缓冲池的关键是缓冲页面的组织与查找,本方案应用了哈希函数(HASH)技术,将表存储类型标识ID、表页面号输入一个哈希函数(HASH)(如将表ID和页面号组成一个整数并取余数等)得到HASH表的入口,在该入口下比较缓冲页面的页面头与表存储类型标识ID和页面号,得到待访问的缓冲页面。HASH表的大小对查询的速度影响至关重要,应用根据数据库的大小动态调整该参数以提高数据库的访问速度。FLASH表的缓冲页面可以采取全缓冲方式,即数量达到可以容纳整个FLASH表的页面,该方法比较简单,速度很高;也可以采用部分缓冲方式,数量有限,只能容纳需要读取的页面,该方式涉及到页面的动态调入与调出,并且需要两个链表:空闲缓冲链表和最近访问缓冲链表,空闲链表管理所有的空闲FLASH缓冲页面,最近访问链表的头是最近访问的页面,尾是最近不访问的页面,相应的缓冲页面头需要增加一个链表。
动态表、覆盖表和非覆盖表的存储方式。动态表的空间是不受限制的,跨度很大,创建动态表时只分配一个页面,当记录满后再重新分配一个新的页面。覆盖表和非覆盖表的空间是固定的,创建时根据记录数和记录大小,计算需要的页面数,一次性分配所有的页面。
以上介绍了本发明的数据库存储方法,其意旨是如何将一个嵌入式数据库同时存储在硬盘和内存中。
另一方方面,提供一种基于所述嵌入式数据库的存储方法的相应的数据库访问方法,具体来说是这样实现的:
创建数据库。在指定硬盘目录下创建两个系统表文件第一系统表systables和第二系统表sysfields,并各分配一个页面,初始化页面,即页面的所有记录头的Flag置为空闲。
打开数据库,打开指定硬盘目录下的数据库。首先初始化缓冲池,根据应用需要配置的HASH表大小,创建HASH表,若是非全缓冲方式,则创建空闲缓冲页面链表和最近访问缓冲页面链表,根据配置创建缓冲页面并加入空闲链表,最近访问链表为空。然后装载数据库,读取第一系统表systables和第二系统表sysfields,初始化所有的数据库用户表,若表是FLASH表,则只需将表定义信息装载到内存,若是RAM表,除将表定义装载到内存外,还需要为其在缓冲池中分配空间,若是动态表,则只分配一个页面并初始化,若是覆盖表和非覆盖表,则根据据记录数和记录大小,计算需要的页面数,一次性分配所有的页面,并初始化所有的页面。装载完成后,即可进行数据库管理和访问操作,若创建表,删除表及操作表记录等。
数据库表的创建。在表第一系统表systables中插入一条记录,该记录定义了创建的数据库表,表的每一个字段的定义插入到表第二系统表sysfields;若是FLASH表,则创建表文件;若是动态表,则分配一个缓冲页面,并初始化;若是覆盖表和非覆盖表,则计算需要的缓冲页面数,一次性分配所有的缓冲页面;注意RAM表的页面存储在缓冲池中,FALSH表分配页面的操作是为表文件增加一个缓冲页面空间。
数据库表的删除。从系统表第一系统表systables和第二系统表sysfields删除表的定义,若是FLASH表,则删除其文件,并将占用的缓冲池页面加入空闲链表;若是RAM表,则将占用的页面释放内存。
表记录的操作,包括插入,删除,修改和检索。对表的访问都是在内存缓冲池中进行的,当访问FLASH表的某个页面时,若在缓冲池中找不到,则从硬盘中调入,其使用的缓冲页面优先从空闲页面链表取得,若没有则使用最近访问链表中的最近不访问的缓冲页面,如果该页面被修改,则需要调出内存写表文件。插入记录时,首先查找空闲的记录,若没有,不同表类型有不同的操作,对动态表再分配一个页面,对覆盖表则覆盖最早的记录,对非覆盖表则失败,将新记录插入到空闲记录。删除时只需定位表的页面号和记录号,复位记录头的标志位Flag。修改记录时定义记录的存储位置,并用新的数据代替以前的数据。记录的检索,根据待检索的记录地址,查找缓冲池对应的页面,并找到对应的记录存储地址。覆盖表的操作除上述外,还需要维护一个记录生成顺序的链表。
以上介绍了数据库访问方法,该方法的关键是系统表的操作和缓冲池的操作。
以下结合附图,对本发明的具体实施方式作进一步详细的描述。
图1所示是本发明数据库基本的处理模块。一个典型的数据库应用分为三个层次:S100数据库应用层、S200数据库层和S300文件系统层,S100通过数据库层提供的数据库接口,完成与具体应用相关的数据库处理,比如创建一个用户表,检索用户表及插入记录等。S200层向S100提供数据库访问接口,通过S300层提供的文件系统操作接口,实现数据库的存储和文件访问。
S200数据库层完成具体的数据库操作,维护数据库,在本实施例中包含三个基本模块:S201数据库访问模块、S202数据库管理模块和S203数据库缓冲池模块。S201数据库访问模块完成数据库表的浏览、插入、修改和删除操作等基本的数据库操作。根据表的定义信息和动态信息,如表的总页面数等,从S202缓冲池模块调入表的数据页面,实现记录浏览、插入、删除和修改操作。不同表的类型有不同的操作方式:(1)浏览记录对三种表类型是相同的,根据表的地址空间信息如总的页面数据、页面大小和记录大小等,从缓冲池中调入需要访问的数据页面,并转换为一条条记录。(2)插入操作,当表未满时,为插入记录分配空闲记录空间,存储数据,若是覆盖表,需要维护记录的生成顺序链表;当表满时,非覆盖表插入失败,覆盖表将新记录插入到最早生成的记录的位置,动态表再分配新的数据页面。(3)修改操作三种表类型相同,定位记录的位置,从缓冲池中调入记录所在的页面修改数据。(4)删除操作,对动态表和非覆盖表相同,从缓冲池中调入记录所在的页面,释放记录空间,对覆盖表除上述操作外,还需要维护记录生成顺序链表。S202数据库管理模块完成数据库表的创建和删除等,当创建覆盖表和非覆盖表时,根据记录的大小和总的记录数,计算总的页面数,并一次分配所需的空间;创建动态表时,不为该表分配空间。S203是数据库缓冲池模块,对文件系统中的FLASH表的访问必须通过缓冲池,当访问某页面时,首先到缓冲池中查找,若没有找到,则调入内存,RAM表的数据只存储在缓冲池中,根据缓冲页面的IsFix标志区分时RAM表的数据页面还是FLASH表的缓冲页面,当调入FLASH表数据页面时不允许使用RAM表的数据页面,这样实现了RAM表和FLASH表的统一处理。
图2所示是本发明一个数据库表的逻辑存储空间图,每一个表的地址空间由从1开始编号的n个大小相等页面组成,不同的表页面大小可以自行配置。每一个表都有唯一的表存储类型标识ID,并且FLASH表和RAM表的ID取值范围不同,数据库表ID结合数据库表的页面就可以唯一确定数据库中的某一个页面。
图3所示是一个页面的结构,其由m个大小相等的记录组成,由于一个页面大小可能不能恰好被m个记录分割,所有最后有小于记录大小的空间被浪费,但创建表时增大页面大小可以减少该空间的浪费。
图4所示是一个动态表和非覆盖表的记录结构,包括记录头和记录体两部分,记录头只有一个标志本记录空间是否空闲的标志flag,该标志用于数据库空闲空间的管理,当搜索空闲记录时,可根据该标志进行,当释放记录空间时,复位该标志,当使用该记录空间时,置位该标志,记录体存储应用的实际记录数据。
图5所示是一个覆盖表的记录结构,与上述记录结构不同之处在于记录头增加了两个信息:前一记录和后一记录。前一记录指向本记录插入时的前一个记录,若新插入的记录是第一个记录,则该信息填充一个无效的值,表示是第一条记录;后一记录指向在本记录插入后新插入的记录地址,新插入的记录的本信息填充一个无效的值,表示是最后一条记录。这两个字段组成一个双向链表,按照先后顺序记录了记录的生成顺序,主要用于表记录满时,覆盖最早的记录。
图6所示是缓冲池的基本结构,表ID结合表页面号可以唯一确定数据库中的页面,FLASH表的缓冲和RAM表的数据页面组织在一起。将表ID、表页面号输入一个HASH函数(如将表ID和页面号组成一个整数并取余数等)得到HASH表的入口,在该入口下有一个冲突页面的链表,每一个缓冲页面的页面头包括表ID和页面号,从链表头依次与待访问的页面的页面号和表ID比较,即可确定待访问的页面。对FLASH表,若没有找到,说明本页面还没有被调入内存,执行调入任务重复以上过程。FLASH表的缓冲方案可以采用全缓冲或部分缓冲方式。全缓冲方式要求缓冲池大到足以容纳所有的FLASH表页面,该方式速度比较高,但耗费大量的内存。部分缓冲方式,初始化时分配固定个数的缓冲页面供FLASH表使用,调入页面时首先使用空闲的缓冲页面,若没有空闲则使用最近不访问的缓冲页面,因此该方式需要两个额外的链表:空闲缓冲链表和最近访问页面链表。RAM表的数据页面存放在缓冲页面的页面体部分,这些缓冲页面不允许被FLASH表执行调入或重用,其一旦生成,直至该表被删除或系统关闭才释放。
图7是一个缓冲页面的结构。每一个缓冲页面都有一个标志IsFix,表示该页面是RAM表使用,FLASH表的缓冲页面,正是这个标志,实现了RAM表在内存中的存储,并与FLASH表统一处理,为数据库访问模块提供了统一的接口。修改标志IsDirty,若本页面被修改,若插入记录、删除记录和修改记录等,置位该标志,以后需要将该页面调出内存写到硬盘,保存数据的修改,对RAM表可以不使用该标志。表ID和页面号表示本缓冲页面属于哪一个表的哪一个页面。下一个页面(HASH链表),将HASH表某入口下的所有缓冲页面组成一个链表。下一个页面(空闲链表或最近访问链表)只用于部分缓冲方式,若页面是空闲的,则指向下一个空闲的缓冲页面,若是FLASH表的缓冲页面,则指向下一个最近不访问的缓冲页面。表的数据页面存储在表数据页面字段。
以下将本发明实施缓冲池处理步骤作详细的描述。
缓冲池的初始化。缓冲池模块根据配置参数,分配一系列的缓冲页面以后仅用于FLASH表的缓冲,并用空闲链表组织在一起,此时HASH表、最近访问页面链表为空。
图8所示是从缓冲池查找某一个页面的处理流程。具体处理步骤为:步骤801,根据页面号,用HASH函数查找入口;步骤802,在该入口查找访问的页面;步骤803,判断是否找到页面;步骤804,判断是否RAM表;步骤805,产生新的页面并初始化;步骤806,判断访问页面是否超过文件大小;步骤807,产生新页面并初始化,得到空闲或最近不访问缓冲页面,并将访问页面从文件读入内存;步骤808,判断标识IsFix;步骤809,将该页面放到最近访问链表开头。该流程的入口参数有两个:表ID和页面号,根据表ID可以区分是RAM表的数据页面还是FLASH表的缓冲页面,表ID结合页面号组成缓冲池内的页面编号,唯一确定数据库空间的页面。如图8所示,在801根据HASH函数和缓冲池内部页面编号PageNo,计算HASH表的入口,然后在该入口下查找页面PageNo,若找到则转至808步骤;否则转至804步骤,根据表ID判断是FLASH表还是RAM表,若是RAM表,则转至805步骤,生成新的RAM表数据页面并置标志IsFix为TRUE,转至808步骤;否则转至806步骤,若读取的页面超过表的地址空间,则为该表分配新的页面并初始化,从空闲页面链表或最近访问链表得到缓冲页面,并将访问页面从文件系统中调入该缓冲页面,置标志为FALSE,转至808步骤;在808步骤,判断缓冲页面的IsFix标志,若是TRUE,则结束,否则转至809,在809将该缓冲页面放到最近访问页面链表的开头,结束。
图9所示是创建数据库表的处理流程。创建表时,在步骤901根据表的类型分配唯一的表ID,注意FLASH表和RAM表的ID范围不相交,然后执行步骤902,将表的定义作为一条记录保存到系统表第一系统表systables,然后执行步骤903,将表的所有字段定义保存到系统表第二系统表sysfields,在步骤904判断是FLASH表还是RAM表,若是FLASH表则转至905步骤,在文件系统上创建该表的数据文件,然后转至906;否则转至906;在步骤906判断表的类型,若是动态表,则结束;否则,转至907步骤,根据记录大小和表的最大记录数及页面大小,计算表的总页面数,并分配所有的数据页面。
图10所示是打开数据库的处理流程。系统首先执行1001步骤初始化缓冲池,接着执行1002步骤,执行初始化系统表的定义,比如表ID,页面大小,字段信息等,用于读取系统表的记录,然后执行1003步骤,从系统表中读取表的定义,继续执行1004步骤,并保存到内存,继续执行1005步骤,判断是否RAM表,若不是,则转1010步骤,结束;否则转1006步骤,判断是否动态表,若是则转1007步骤,为该表在缓冲池中分配一个数据页面并初始化,接着转1010步骤,结束;否则转1008步骤,计算表的总页面数据,接着执行1009步骤,从缓冲池中分配并初始化所有的数据页面。
图11所示是覆盖表的插入记录流程。如图5所示,覆盖表的记录与其他类型表的记录不同之处在于数据前面有一个记录头,该记录头有两个字段,第一个字段指向前一条记录,第二个字段指向后一条记录,若当前记录是最早的记录则第一个字段为无效地址,若当前记录是最近生成的记录,则第二个字段为无效地址。其插入记录的处理流程如图11所示。在1101步骤遍历表的地址空间,检查每一个数据页面寻找空闲记录,若找到,则转至1103步骤,将新记录插入到该空闲记录处,接着执行1105步骤,将新插入的记录放到记录生成顺序链表的开头;否则转至1104步骤,此时表的空间已满,新记录直接覆盖最早的记录,并更改链表的头尾。
动态表和非覆盖表的插入记录流程与图11基本相同,只是不需要维护记录生成顺序的链表。
本发明实施方式可具体应用于同步数字体系(SDH)设备。同步数字体系(SDH)具有强大的网络管理能力,在网元层(AGENT)需要保存大量的配置数据及临时性的数据如告警、性能等,随传输设备的日趋复杂,需要保存的数据量不断增加,数据结构越来越复杂,引入嵌入式数据库管理数据是必然的选择。AGENT上的存储介质通常包括两部分:永久性存储介质通常采用FLASH或FLASH DISK,内存RAM存储量很少,通常只能保存配置数据,但对于大量的临时性数据,如告警、性能等只能在内存中存储,原因是:FLASH空间有限,不可能存储全部数据;这些数据访问频率很高,FLASH的访问速度远远低于内存,为了提高访问性能必须保存在内存;这些数据并不需要永久保存,当系统掉电时,这些数据已经没有意义。同时,由于设备存储空间有限,迫切需要数据库能够限制空间大小,甚至某一个表所使用的空间。配置类信息表如单板信息表存储本网元安装的所有单板信息,每一个记录即为一个安装板的信息,该信息必须永久性保存,以便网元复位重新初始化时读取单板信息并初始化单板。从其特征看,是典型的FLASH表。所有配置类表均为FLASH表。历史告警表存储了本网元发生的历史告警,通常历史告警存储数量非常大,需要频繁访问,一旦系统调电,这些数据不需要保存,因此历史告警表保存在内存中是最佳的方案,另外为了限制本网元存储的历史告警数量,迫切需要限制最大记录数,并且表满后,新插入的记录直接覆盖最早产生的历史告警。RAM覆盖表可以满足该要求。本网元的AGENT应用基于本发明提供的嵌入式数据库方案,将需要保存的信息如单板等配置信息保存在FLASH,大量的临时性数据如历史告警等保存在内存。创建数据库时,指定数据库定义存储在FLASH上,然后创建所有的数据库表,将单板信息表等配置类信息表定义为FLASH表,历史告警表等不需要永久保存的信息表定义为RAM表,并根据需求将表类型分别定义为动态表、覆盖表和非覆盖表等。利用本发明提供的数据库访问方法执行数据库表记录的插入、删除、修改和检索操作。
图12所示是SDH应用方案示意图。配置类表存储在FLASH,其他类表如历史告警、性能等存储在内存缓冲池,对FLASH表的访问通过内存池中的缓冲页面,并且与RAM表的数据页面同处一个缓冲池。数据库层负责维护和访问缓冲池,应用层调用数据库层提供的管理接口和访问接口分别管理数据库和访问数据库,表的存储对应用层是透明的。
尽管参照实施方式对所公开涉及嵌入式数据库存储和访问方法进行了特别描述,本领域技术人员将能理解,在不偏离本发明的范围和精神的情况下,可以对它进行形式和细节的种种修改。因此,以上所建议的但不局限的修改都在本发明的范围之内。
Claims (10)
1、一种嵌入式数据库存储的方法,其特征在于采用下列步骤:
将嵌入式数据库按照需要分为第一类表和第二类表,所述每个第一类表和第二类表都具有唯一的表存储类型标识;以及同时
在嵌入式数据库创建第一系统表和第二系统表,所述第一系统表存储了所述第一类表和第二类表对应的表的定义,所述第二系统表存储了所述第一类表和第二类表对应的表的所有字段的定义;
将第一类表和所述两个系统表存储在硬盘或FLASH中;以及同时
将第二类表存储在内存的缓冲池中。
2、根据权利要求1所述的存储方法,其特征在于所述第一类表和第二类表根据需要择一地设定为动态表、覆盖表或非覆盖表,所述动态表的空间不受限制;所述覆盖表的空间是固定的,当表满后,新插入的数据自动覆盖最早产生的记录;所述非覆盖表的空间是固定的,而且表的最大记录数固定,当表的空间满后,再插入数据失败。
3、根据权利要求1所述的存储方法,其特征在于所述第一类表和第二类表中每一个表的地址空间由若干大小相等地页面组成,所述页面的大小是每一个表可以调节的。
4、根据权利要求2所述的存储方法,其特征在于所述覆盖表的记录头还包括两个指针,分别指向其前面一条生成的记录和其后面一条生成的记录。
5、根据权利要求1所述的存储方法,其特征在于还包括将所述第一类表和第二类表中的表存储类型标识和表页面号输入HASH函数处理后得到HASH表入口的步骤。
6、一种与基于嵌入式数据库的存储方法相应的数据库访问的方法,其特征在于采用下列步骤:
内存缓冲池初始化;
从硬盘或FLASH中读取所述第一系统表和第二系统表,并存储在内存的缓冲池中;
在内存的缓冲池中查找所访问的第一类表页面,若查到,将该页面对应缓冲页面放到最近访问页面链表的开头,若查找不到,从硬盘或FLASH中读取第一类表该页面并存储到内存的缓冲池中;
为第二类表在内存缓冲池中分配空间;
在内存的缓冲池中对数据库进行读和写的操作。
7、根据权利要求6所述的访问方法,其特征在于所述为第二类表在内存缓冲池中分配空间的步骤还包括以下步骤:
若所述第二类表是动态表,则只分配一个缓冲页面并初始化;
若所述第二类表是覆盖表和非覆盖表,则根据表的记录数和记录大小,计算需要的页面数,一次性分配所有的缓冲页面,并初始化所有的缓冲页面。
8、根据权利要求6所述的访问方法,其特征在于所述缓冲池的缓冲页面包含标志位,用以区分第一类表页面和第二类表页面。
9、根据权利要求6所述的访问方法,其特征在于还包括根据HASH函数查找被访问页面的步骤。
10、根据权利要求6所述的访问方法,其特征在于内存缓冲池初始化的步骤还包括将缓冲池设定为全缓冲方式或部分缓冲方式,所述全缓冲方式要求缓冲池大到足以容纳所有的FLASH表页面,所述部分缓冲方式,初始化时分配固定个数的缓冲页面供FLASH表使用,调入页面时首先使用空闲的缓冲页面,若没有空闲则使用最近不访问的缓冲页面。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 01138093 CN1430148A (zh) | 2001-12-31 | 2001-12-31 | 嵌入式数据库存储和访问的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 01138093 CN1430148A (zh) | 2001-12-31 | 2001-12-31 | 嵌入式数据库存储和访问的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1430148A true CN1430148A (zh) | 2003-07-16 |
Family
ID=4674380
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 01138093 Pending CN1430148A (zh) | 2001-12-31 | 2001-12-31 | 嵌入式数据库存储和访问的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1430148A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100367241C (zh) * | 2005-03-05 | 2008-02-06 | 腾讯科技(深圳)有限公司 | 一种数据存储的方法、系统及设备 |
CN101980325A (zh) * | 2010-09-20 | 2011-02-23 | 北京腾瑞万里科技有限公司 | 地图图幅的读取方法及装置 |
CN103064849A (zh) * | 2011-10-19 | 2013-04-24 | 腾讯科技(深圳)有限公司 | 一种层叠样式表处理方法和装置 |
CN104866577A (zh) * | 2015-05-26 | 2015-08-26 | 深圳市六度人和科技有限公司 | 一种基于嵌入式数据库的数据处理方法及装置 |
CN109918373A (zh) * | 2019-02-02 | 2019-06-21 | 上海达梦数据库有限公司 | 数据存储方法、装置、服务器和存储介质 |
CN110019229A (zh) * | 2017-12-25 | 2019-07-16 | 航天信息股份有限公司 | 数据库配置系统 |
CN110263060A (zh) * | 2019-06-06 | 2019-09-20 | 零搜科技(深圳)有限公司 | 一种erp电子附件管理方法及计算机设备 |
CN108710552B (zh) * | 2018-05-04 | 2022-04-12 | 北京航天控制仪器研究所 | 一种基于VxWorks的惯性器件图形化测试系统 |
-
2001
- 2001-12-31 CN CN 01138093 patent/CN1430148A/zh active Pending
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100367241C (zh) * | 2005-03-05 | 2008-02-06 | 腾讯科技(深圳)有限公司 | 一种数据存储的方法、系统及设备 |
CN101980325A (zh) * | 2010-09-20 | 2011-02-23 | 北京腾瑞万里科技有限公司 | 地图图幅的读取方法及装置 |
CN101980325B (zh) * | 2010-09-20 | 2012-08-22 | 北京腾瑞万里科技有限公司 | 地图图幅的读取方法及装置 |
CN103064849A (zh) * | 2011-10-19 | 2013-04-24 | 腾讯科技(深圳)有限公司 | 一种层叠样式表处理方法和装置 |
CN103064849B (zh) * | 2011-10-19 | 2017-04-12 | 深圳市世纪光速信息技术有限公司 | 一种层叠样式表处理方法和装置 |
CN104866577A (zh) * | 2015-05-26 | 2015-08-26 | 深圳市六度人和科技有限公司 | 一种基于嵌入式数据库的数据处理方法及装置 |
CN110019229A (zh) * | 2017-12-25 | 2019-07-16 | 航天信息股份有限公司 | 数据库配置系统 |
CN110019229B (zh) * | 2017-12-25 | 2022-04-15 | 航天信息股份有限公司 | 数据库配置系统 |
CN108710552B (zh) * | 2018-05-04 | 2022-04-12 | 北京航天控制仪器研究所 | 一种基于VxWorks的惯性器件图形化测试系统 |
CN109918373A (zh) * | 2019-02-02 | 2019-06-21 | 上海达梦数据库有限公司 | 数据存储方法、装置、服务器和存储介质 |
CN110263060A (zh) * | 2019-06-06 | 2019-09-20 | 零搜科技(深圳)有限公司 | 一种erp电子附件管理方法及计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6571261B1 (en) | Defragmentation utility for a shared disk parallel file system across a storage area network | |
CN101187901B (zh) | 一种实现文件访问的高速缓存系统和方法 | |
US9047301B2 (en) | Method for optimizing the memory usage and performance of data deduplication storage systems | |
US7734891B2 (en) | Robust index storage for non-volatile memory | |
CN110119425A (zh) | 固态驱动器、分布式数据存储系统和利用键值存储的方法 | |
EP2147380A1 (en) | System and method of managing indexation of flash memory | |
CN101039278A (zh) | 数据管理方法及系统 | |
US20030028739A1 (en) | Method and apparatus of storage allocation/de-allocation in object-oriented programming environment | |
Nath et al. | Online maintenance of very large random samples on flash storage | |
CN1975731A (zh) | 用于管理对数据库中数据的访问的系统和方法 | |
GB2416225A (en) | Dynamically partitioning a storage device for mixed applications | |
CN101030165A (zh) | 一种磁盘空间管理方法及系统 | |
CN110968269A (zh) | 基于scm与ssd的键值存储系统及读写请求处理方法 | |
EP2122450A1 (en) | Method and apparatus for storing and accessing data records on solid state disks | |
CN1845093A (zh) | 一种属性可扩展的对象文件系统 | |
CN1282108C (zh) | 消除指针存储以减少ram大小的散列技术 | |
CN1430148A (zh) | 嵌入式数据库存储和访问的方法 | |
KR100907477B1 (ko) | 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법 | |
CN1614591A (zh) | 一种组织和访问分布式文件系统目录的方法 | |
CN1255748C (zh) | 一种存储虚拟化系统的元数据层次管理方法及其系统 | |
CN1908937A (zh) | 一种闪存中的flash文件的管理方法及系统 | |
Lee et al. | An efficient buffer management scheme for implementing a B-tree on NAND flash memory | |
Chen et al. | A unified framework for designing high performance in-memory and hybrid memory file systems | |
Xiang et al. | A reliable B-tree implementation over flash memory | |
Li et al. | A new dynamic hash index for flash-based storage |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
ASS | Succession or assignment of patent right |
Owner name: SHENZHENG CITY ZTE CO., LTD. Free format text: FORMER OWNER: SHENZHENG CITY ZTE CO., LTD. SHANGHAI SECOND INSTITUTE Effective date: 20030723 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20030723 Applicant after: Zhongxing Communication Co., Ltd., Shenzhen City Applicant before: Shanghai Inst. of No.2, Zhongxing Communication Co., Ltd., Shenzhen City |
|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |