CN100478959C - 嵌入式数据库的存储管理方法 - Google Patents
嵌入式数据库的存储管理方法 Download PDFInfo
- Publication number
- CN100478959C CN100478959C CNB2007100997621A CN200710099762A CN100478959C CN 100478959 C CN100478959 C CN 100478959C CN B2007100997621 A CNB2007100997621 A CN B2007100997621A CN 200710099762 A CN200710099762 A CN 200710099762A CN 100478959 C CN100478959 C CN 100478959C
- Authority
- CN
- China
- Prior art keywords
- data
- section
- storage
- database
- segment
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
嵌入式数据库的存储管理方法,(1)数据在内存存储策略为:逻辑、物理结构相一致,分为***区、主存数据库区、用户工作区、日志区和预留区;数据在外存存储策略为:逻辑结构分为:数据库表、段、数据库块;物理结构包括物理文件和物理块;(2)数据库物理文件组织为:将数据字典放在首部,其后为用户表;(3)数据字典在外存的存储管理为:物理文件的描述信息存储在文件头,外延定义类和属性定义类采用三段式的存储方式;数据字典在内存采用页式存储管理方法;(4)采用T树存取常驻内存数据,采用B+树存取常驻外存数据;采用扩展的段页式存储管理方法对数据本身及其索引进行管理。本发明提高了存储空间的利用率,加快了数据访问的速度。
Description
技术领域
本发明涉及一种嵌入式数据库的管理方法,涉及的具体部分为嵌入式数据库的存储管理技术。
背景技术
嵌入式数据库***是指支持移动计算或某种特定计算模式的数据管理***,它通常与操作***和具体的应用集成在一起,运行在嵌入式或者移动设备上。嵌入式数据库技术涉及嵌入式、数据库以及移动通讯等多个学科,已经成为数据库技术发展的一个新方向。
在嵌入式数据库研究领域,存储管理的研究目的在于运用嵌入式、数据库等多种技术实现数据在存储器上的高效存储和快速存取。嵌入式数据库存储管理涉及的数据信息包括数据字典、数据本身、索引等。存储管理可以分为三个层次:逻辑层、缓冲层和外存存储层。逻辑层代表着数据的逻辑结构(如关系或类定义、索引组织形式等),基于逻辑信息可以提高缓冲池的利用效率。缓冲层缓存物理数据页面在主存中,以减少外存I/O,目前针对缓冲层的内外存置换算法有LRU、MRU、时钟算法等。外存存储层通过合理的布局数据字典、数据库表和索引数据在外存上的存储,减少I/O操作。
存储管理需要重点考虑四个问题:(1)数据的存储策略:包括数据的逻辑存储结构及策略、数据的物理存储结构及策略;(2)数据字典组织与存储管理:数据字典存储了数据对象的描述信息(元数据)及DBMS的控制信息,是DBMS的重要组成部分;存储管理应能够自动建立和更新数据字典;(3)索引组织与存储管理:DBMS存储了大量的数据,如果按无序方式组织,则需要遍历整个文件才能找到指定数据,效率较低;因此,需要借助存取路径(也称索引)访问数据。目前索引技术包括内存索引(索引全部存储在内存中,具有较高的存取效率,如T树,CSS树,CSB树等)、外存索引(索引全部存储在外存,根据应用程序需要动态加载到内存,需要经过若干次I/O操作才能访问到数据,典型的外存索引包括ISAM、B+树、可扩展的哈希);(4)数据库组织与存储管理:根据数据的特征使用相应的数据模型(如层次、网状、关系、面向对象等数据模型)描述、组织和存储数据,使DBMS具有较小的冗余度、较好的数据独立性和易扩展性。
目前嵌入式数据库***大部分基于文件***实现。嵌入式数据库***分为两大类:一类为外存数据库***,如Berkeley DB,SQLite,所有数据均存储在外存,根据应用的需要动态加载数据到内存;采用外存索引;存储管理以减少磁盘I/O操作为主要目的;其缺点在于存储空间利用率不高,如B+树的利用率不到55%。另一类为内存数据库***,如eXtremeDB,FastDB,所有的数据均存储在内存;采用内存索引;不需要考虑磁盘I/O问题,存储管理以提高存储空间利用率和cache命中率为主要目的;数据在内存中采用区段式或页式存储管理方法。
然而,数据有其自身的特征,并非需要在***启动时全部载入内存或全部存放在外存。一个典型应用实例即诊断***中的嵌入式故障数据库,***对于关键性、存取频率高、临时性的故障数据要求较高的存取速度,因此这部分数据需要常驻内存;而对于一般性、存取频率低、永久性的故障数据,其存取速度要求不高,可以常驻外存。因此,目前单纯的外存数据库***和单纯的内存数据库***已经满足不了嵌入式数据库的存储要求。
发明内容
本发明的技术解决问题是:克服现有嵌入式数据库存储管理方法的不足,从数据的存储策略、数据库物理文件的组织、数据字典的存储管理、数据与索引的存储管理四个方面进行了扩展和改进,提出了一种支持数据在内存和外存的嵌入式数据库的存储管理方法,该方法提高了存储空间的利用率,加快了数据访问的速度。
本发明的技术解决方案:嵌入式数据库的存储管理方法,其特点在于:包括四部分:数据的存储策略、数据库物理文件的组织、数据字典的存储管理、数据与索引的存储管理,其中:
(1)数据存储策略分为数据在内存的存储策略(也称为内存的空间组织)和数据在外存的存储策略,其中,
数据在内存的存储策略为:a.逻辑存储结构为将嵌入式数据库***的内存空间分为五个区,按区间首地址从低到高依次为:***区SA,用于存储数据字典;主存数据库区MMDA,用于存储用户表中的数据,是***的缓冲区之一;用户工作区UWA,为数据管理的辅助区间,与主存数据库区MMDA构成双缓冲区;日志区JA,用于存储事务对数据库的更新信息;预留区RA,用于存储应急数据;b.物理存储结构与逻辑存储结构相一致;
数据在外存的存储策略为:a.逻辑存储结构分为:数据库表、段、数据库块,其中,一个数据库包括多个数据库表,一个数据库表包括:数据字典和用户表,一个数据库表对应多个段;段分为表头段,索引段和数据段三种类型,一个段对应多个数据库块;数据库块为逻辑存储结构的最小分配单位;b.物理存储结构包括物理文件和物理块,其中,一个数据库块对应一个或多个物理块,多个物理块构成物理文件,物理块为物理存储结构的最小分配单位;
(2)根据所述的数据存储策略,确定数据库物理文件的组织结构:
将数据字典放在数据库物理文件的首部,其后为用户表;数据字典包括:文件头、数据字典表头段、数据字典索引段、数据字典数据段;用户表包括:用户表表头段、用户表索引段和用户表数据段;
(3)基于上述的数据存储策略和数据库物理文件的组织,确定数据字典在外存的存储管理和在内存的存储管理:
数据字典在外存的存储管理为:数据库物理文件的描述信息存储在文件头,外延定义类和属性定义类采用数据字典表头段、数据字典索引段、数据字典数据段三段式的存储方式;数据字典在内存的存储管理:数据字典在数字库***启动时全部加载到SA,并且保留其在物理文件上的格式,采用页式存储管理方法;
(4)根据上述的数据存储策略、数据库物理文件的组织和数据字典的存储管理,确定用户表中的数据与索引的管理:
对常驻内存数据采用T树进行存取,对常驻外存数据采用B+树索引进行存取,并采用扩展的段页式存储管理方法对建立在数据上的索引及其数据本身进行存储管理。
本发明与现有技术相比的有益效果是:
(1)本发明针对内存索引和外存索引的特征,采用三段式(表头段、索引段和数据段)组织、管理数据,给出了一种数据库物理文件的组织方式。同时,基于本数据库物理文件的组织,给出了一种扩展的段页式存储管理方法,一方面,使得外存中数据可以不需要做任何格式修改即可加载到内存,保证了数据的紧凑性,提高了数据的加载速度。另一方面,传统的段页式存储管理方法需要借助段表、页表来访问数据,至少需要三次内存访问:第一次访问段表,获取页表地址;第二次访问内存中的页表,获取数据地址,第三次才访问相应的数据,并且段表和页表的存储空间需要根据数据的加入动态增加。而本扩展的方法仅需要两次内存操作即可访问到数据,因此,提高了数据访问的速度。
(2)本发明采用面向对象的数据模型描述和存储数据,与采用关系型的数据模型相比,一方面提高了存储空间的利用率;另一方面除支持基本的数据类型外,还支持用户自定义的数据类型。
(3)本发明中,对于常驻内存的数据(用户可以根据应用的需要设置),数据库***在启动的时候自动载入这些数据到内存,并采用T树索引存取这些数据;而对于常驻外存数据,数据库***则根据应用的需要动态加载到内存,并采用B+索引存储这些数据。与所有数据都采用外存索引(如B+树)相比,内存索引在执行、处理时间和吞吐率方面都有显著提高,因此加快了对数据(原本存储在外存,并采用外存索引的数据)访问的速度。
(4)本发明针对内存索引的特点,提出了一种内存索引在外存的存储管理方法。因此,当由于故障***重启时,***能依据存储在数据库物理文件内存索引,以块加载的方式载入内存,然后采用指针混写技术修改物理文件地址为内存地址即可。而不需要逐一遍历数据对象,动态的建立索引(现有内存数据库索引恢复的方法),特别当数据对象集合很大时,可以成倍的缩短索引建立时间(有实验证明)。
附图说明
图1为本发明的流程图;
图2为本发明的内存空间组织结构示意图;
图3为本发明的内存空间组织结构中的双缓冲机制;
图4为本发明的数据在外存的存储结构示意图;
图5为本发明的数据库物理文件格式;
图6为本发明的数据字典的存储管理中外延定义类对象与属性定义类对象的关系示意图;
图7为本发明的数据字典表头段数据格式;
图8为本发明的用户表中数据元素的表示示意图,其中图8a为用户表中数据元素的存储采用类的属性的组织方式示意图,图8b为用户表中数据元素的存储采用类的对象组织方式示意图;
图9为本发明的扩展的段页式存储管理结构示意图;
图10为本发明的扩展的段页式存储管理方法流程图;
图11为本发明中的T树结点;
图12为本发明的建有T树索引的用户表在外存的存储结构;
图13为本发明的建有T树索引的用户表在内存的存储结构;
图14为本发明的B+树结点;
图15为本发明的建有B+树索引的用户表在外存的存储结构;
图16为本发明的建有B+树索引的用户表在内存的存储结构。
具体实施方式
如图1所示,本发明的具体实施方式分为四个步骤:确定数据的存储策略、数据库物理文件的组织、数据字典的存储管理、索引与数据的存储管理。
1、数据的存储策略
本发明数据策略包括两个方面:数据在内存的存储策略(也称内存的空间组织)和数据在外存的存储策略。
(1)内存的空间组织
本发明中数据在内存的逻辑存储结构与其物理存储结构一致,数据在内存采用统一内存分配的策略,即数据库***在操作***之上申请分配一片连续的内存,并对其进行管理,避免了***在运行过程中因动态申请分配内存造成的延时或内存分配失败带来的灾难性后果。同时,对这片连续的内存划分为五个区,如图2所示,按区间首地址从低到高依次为***区(SystemArea,简称SA),主存数据库区(Main-Memory Database Area,简称MMDA),用户工作区(User-Work Area,简称UWA),日志区(JournalingArea,简称JA)和预留区(Reserved Area,简称RA)。五个区间的大小可以***预定义,也可通过配置文件设定。
采用上述分区后,由于每个区存储的数据性质相似或相近,因此只需采用一种存储管理方法,与对一片内存区采用不同的存储管理方法相比,可以直接对存入的数据采用本区上使用的存储管理方法进行管理,提高了存储空间的利用率。
其中:SA用于存储数据字典。数据字典是数据库管理***运行的依据,作为最重要的数据将其存储在内存的低地址区,划定其大小以进行保护。SA中数据修改概率较低,因此采用最佳适应(Best Fit)算法完成内存的分配与回收。此外,本发明还提供内存重新分配功能,当SA已满,可重新申请更大的内存空间,***自动将原内存区内容拷贝到新内存区,并返回新内存区的首地址。
MMDA用于存储用户表中的数据,是***的缓冲区之一。常驻外存数据根据***运行需要动态加载到内存,如果访问的数据不在MMDA,且MMDA没有空闲页,则启动内外存数据交换机制将淘汰页面交换到外存。本发明使用时钟算法选择需要置换的页面,对于常驻内存数据则锁定在内存中。MMDA采用扩展的段页式存储管理方法,具体见第(4)部分叙述。
UWA是数据库***进行数据管理的辅助区间,与MMDA构成双缓冲区如图3所示,MMDA主要负责用户表中存储的索引数据和数据本身,如果数据在内存中格式与其在物理文件中的格式一致,则直接将MMDA中数据写入到物理文件;否则借助UWA,先将MMDA中的数据拷贝到UWA,在UWA中按照物理文件的数据格式重新组织,然后写入到物理文件。另外,对于更新事务,先将事务涉及的数据(在MMDA中)拷贝到UWA中,然后在UWA完成更新事务,如果事务成功完成,那么将UWA中的数据更新到MMDA,否则此次事务失败,MMDA中数据不做修改,从而保证数据的一致性。UWA采用页式存储管理方法。
JA,用于存储事务对数据库的更新信息。具体而言,包括各个事务的开始标记、结束标记及其事务的所有更新操作。当JA没有空闲页时,以页为单位把JA中记录的信息写入到日志文件。JA采用页式存储管理方法。
RA用于存储应急数据。当应用程序由于特殊原因(如紧急故障处理),需要实时的访问不在内存中的数据,而此时MMDA中没有空闲页,如果启动内外存数据交换,显然满足不了应用程序的实时性要求,则将应用程序需要的数据加载到RA,待应用程序完成操作之后,释放RA中的页。RA采用页式存储管理方法。
(2)数据在外存的存储策略
如图4所示,数据在外存的存储策略包括逻辑存储结构和物理存储结构。
逻辑存储结构分为:数据库表、段、数据库块,其中,一个数据库包括N个数据库表,一个数据库表对应N个段;段分为表头段,索引段和数据段三种类型,一个段对应N个数据库块;数据库块为逻辑存储结构的最小分配单位。
上述的一个数据库表包括:数据字典和用户表;段有三种类型:表头段,索引段和数据段,其中:表头段存储了访问数据库表的索引与数据本身所需信息,是***访问数据库表的依据,通过表头段可以快速定位到每个数据库表对应的索引段和数据段的起始块地址;索引段,存储了数据库表上建立的索引数据,通过索引段可以快速定位到数据段中的任意数据;数据段,存放数据库表的数据,其排放顺序由索引段决定。
物理存储结构包括物理文件和物理块,其中,一个数据库块对应一个或多个物理块,多个物理块构成物理文件,物理块为物理存储结构的最小分配单位;所有的数据库表存储在一个物理文件上。
2、根据前述的数据存储策略,确定数据库物理文件的组织结构
如图5所示,将数据字典放在数据库物理文件的首部,其后为N个用户表;数据字典包括:文件头、数据字典表头段、数据字典索引段、数据字典数据段;用户表包括:用户表表头段、用户表索引段和用户表数据段;采用这种方式,数据字典的外延定义类和属性定义类信息的存储管理与用户表的存储管理采用相同的方式,提高了代码的复用度。
3、基于上述的数据存储策略和数据库物理文件的组织,确定数据字典在外存的存储管理和在内存的存储管理
(1)数据字典在外存的存储管理为:数据库物理文件的描述信息存储在文件头,外延定义类和属性定义类采用表头段、索引段和数据段三段式的存储方式。
数据字典的内容包括:数据库物理文件的描述信息、外延定义类信息和属性定义类信息。数据库物理文件的描述信息描述了数据库***的命名、版本、数据库被修改的次数,数据库块的大小,属性所在的开始页,用户表的起始页等;外延定义类信息描述了用户类的定义信息,其属性包括:用户类名字、用户类的字节大小,类的ID、类的表头段的首块编号、类的数据段的首块编号、用户类的属性的块内偏移量、属性个数、类的索引类型;属性定义类描述了用户类属性的结构信息,其属性包括:属性名字、属性类型、属性大小、该属性相对同一个类的第一个属性的偏移量、是否在该属性上建有索引、属性是否是主键、保留字段(字节对其)。
由定义可以得到:外延定义类信息对象同属性定义类信息对象的关系为一对多。一方面,一个外延定义类信息对象对应的属性定义类登信息对象集合是连续存放的,因此,只需存储外延定义类信息对象的第一个属性定义类信息对象的地址,那么通过地址计算即可得到该外延定义类信息对象对应的其他属性定义类信息对象的地址;另一方面,属性定义类信息对象按照外延类定义类信息对象的顺序存放,因此,通过外延定义类信息对象可以定位到属性定义类信息对象。从某种意义上说,外延定义类信息是属性定义类信息的索引,因此,外延定义类信息对象集合构成的段称之为索引段,属性定义类信息对象集合构成的段称之为数据段,如图6所示,外延定义类对象按其创建的顺序存储,属性定义类按照外延定义类对象的存放顺序存储,其中一个外延定义类对象对应的属性定义类对象集合为连续存储。
外延定义类信息和属性定义类信息在数据库物理文件的组织采用数据字典表头段、数据字典索引段、数据字典数据段三段式的存储方式,具体而言:
a.数据字典表头段,为外延定义类、属性定义类的居段的描述信息
数据字典表头段的数据格式如图7所示,包括:头描述信息、1-i个索引段头信息和1-i个数据段头信息。头描述信息为最前端,接着是索引段头信息,索引段信息按段头向段尾的方向增长,而数据段头信息则按相反的方向增长-段尾向段头方向增长。采用这种方式,一方面,索引段头信息和数据段头信息都是连续存放,加快了数据的存取速度(以块的方式);另一方面,索引段头信息和数据段头信息存储在一个段,节省了存储空间。
头描述信息包括:存储下一个***的索引段头信息地址偏移量、索引段个数,所有索引段占据数据库块个数,存放下一个***的数据段头信息的地址偏移量,数据段的个数,所有数据段占据数据库块的个数,当前表头段的首块编号。
索引段头信息和数据段头信息所需要记录的信息相同,包括:索引段或数据段存储的对象个数,索引段或数据段占据的数据库块个数,索引段或数据段包含的对象大小,索引段或数据段存放下一个***对象的地址偏移量,索引段或数据段首块的编号。
b.数据字典索引段
存储外延定义类对象集合。
c.数据字典数据段
存储属性定义类对象集合
(2)数据字典在内存的存储管理
数据字典在数据库***启动时全部加载到SA,并且保留其在物理文件上的格式,采用页式存储管理方法,其中对于建立物理文件地址同内存地址的映射关系,采用指针混写(Pointer Swizzling)方法实现,混写的指针即外延定义类对象中指向其对应的第一个属性定义类对象的地址,本发明方法中采用急求值策略,即外延定义类对象集合和属性定义类对象集合全部加载到内存后,逐一访问外延定义类对象,通过以下公式混写其指针。
memoryAddr=attriFirstAddr+(int)(physicalAddr)*sizeof(Attribute)
其中:memoryAddr 经过指针混写后的内存地址
attriFirstAddr 属性定义类对象集合在内存中的首地址
physicalAddr 属性在外存中的地址,
Sizeof(Attribute) 属性定义类的字节大小
4、根据上述的数据存储策略、数据库物理文件的组织和数据字典的存储管理,确定用户表中的数据与索引的管理
(1)用户表中数据元素的存储方式
用户表中的数据元素的存储采用类的属性的组织方式进行,如图8a所示。属性的组织需要考虑字节对其问题(不同***要求不同,可能是4bytes的整数倍,也可能是8字节的整数倍)。属性又对应多个对象,对象组织方式如图8b所示。
(2)扩展的段页式存储管理方法
如图9所示,主存数据库区MMDA采用扩展的段页式存储管理的结构为:对于加载到内存的类信息(包括头描述信息、索引、数据),在MMDA中建立与外存相对应的三个段(表头段、索引段、数据段)存储这些数据。这样建立的优点在于:内存中也包括这三段,从外存来的数据可以直接放在对应的内存段中,可以缩短索引建立时间。另外,还可以包括最后的修改段,其中修改段是可选的,仅当修改类对象时,修改段才建立。
a.表头段
对应该类在物理文件的表头段,主要存储了类的索引和对象集合的描述信息及其分布情况。
b.索引段
物理文件中索引段不包含段头等说明信息,存储的全部是索引数据,故可以块的方式载入到内存,而不需要做任何格式的修改,大大加快了索引的载入速度,并以块的方式写入物理文件。
c.数据段
同索引段一样,存储的都是类对象,按照原格式以块的方式载入内存,以块的方式写入物理文件。
d.修改段
此段是可选的。如果确定不会修改类的任何信息(首部信息、索引、对象等),则不需要为该段分配内存空间。该段存储了应用对该类所作的修改,当该段需要被置换到外存时,则利用修改段存储的信息,把修改写入到物理文件。
对于每一个段都有一个段头指针,指示该段首地址。采用本发明访问内存中任何一页的数据仅需要两次内存访问-先根据段指针计算所要查找数据的地址,之后就可以根据该地址访问该数据。
本发明扩展的段页式存储管理方法流程如图10所示。
a.在MMDA区申请三个数据库块的大小内存空间,每个数据库块分别标志为表头段-H段、索引段-I段、数据段-D段,并记录每个段的首地址为headAddr,idxAddr,dataAddr。
b.如果***的数据需要常驻内存,那么采用T树作为其索引,否则采用B+树。
c.把***的对象填充到D段,把***对象的索引填充到I段。如果I段或D段无空闲空间,那么申请一个数据库块大小内存作为下一个I段或D段,并链接到前一个I段或D段。如果对象***操作结束,则转到下一步,否则继续***对象。
d.根据I段和D段的数据,填充H段。
(3)常驻内存数据与索引的存储管理
对常驻内存数据采用T树索引进行管理。
a.T树结点的结构
T树结点存储其指向的对象集合在内存中的首地址,而不是存储所有对象的地址集合,实现了索引与数据的分离。如图11所示为T树结点的结构,T树结点的大小与其指向的对象集合大小无关,一旦对象的键大小确定,T树结点的大小即固定。基于此特点,T树结点指向对象集合的大小即为一个数据库块所能容纳对象集合的大小,因此,数据库块与T树结点是一对多的关系;而数据库块与T树结点指向的对象集合为一对一的关系。
通过下面公式可以计算出T树结点指向对象集合包含对象个数,即一个数据库块可存储对象的个数(设为n)。
n=blockSize/sizeof(object)
其中:
blockSize 数据库块的字节大小
sizeof(object) 对象的字节大小
b.T树在外存存储管理
T树在外存的存储管理方法如图12所示,其中一个数据库块最多可存放i个结点,T树结点对应的对象集合包含对象个数为m。按照表头段、索引段、数据段依次存储在物理文件中,其中表头段存储管理为:按照头描述信息、T树索引的段头信息和T树数据段头信息顺序存储表头段数据,其中索引段信息按段头向段尾的方向增长,而数据段头信息则按相反的方向增长-段尾向段头方向增长;索引段存储管理为:T树结点按照创建的顺序存储在数据库物理文件中,以物理块为单位,即当一个物理块剩余的空间不足以存储一个T树结点时,则把该结点存储在下一个物理块,保证结点的存储不会跨越两个物理块。数据段存储管理为:按照结点在索引段的存放顺序存储结点指向的对象集合在一个物理块中。
c.T树在内存的存储管理
建有T树的表空间的索引与数据在内存的存储管理采用前述的扩展的段页式存储管理方法,如图13所示,按照表头段、索引段、数据段、修改段依次存储在内存中,并且每个段都有一个段头指针。其中表头段存储管理为:其存储的数据及其格式同该表在外存中的表头段相同,如果有新的索引段或数据段加入,那么把新增加段的信息按照表头段的格式填充到表头段。索引段的存储管理为:一个数据库块可以存储多个T树结点,当有新的结点***时,如果当前使用的数据库块大小不足以容纳该新结点,则新申请一个数据库块,然后把该新结点***,同时把新申请的数据库块链接到前一个数据库块,保证一个结点不会跨越多个数据库块。当有结点删除时,只需标志该块为空闲块,并***到空闲链表。数据段的存储管理为:结点指向的对象集合按照T树结点的创建顺序存储在数据段,一个结点指向的对象集合存储在一个数据库块中,以一个数据库块大小为单位申请内存空间,新申请的数据库块需要链接到其前一个块。修改段的存储管理:依次存储用户对索引段或数据段的修改信息。
d.内存地址与物理地址互相混写
内存地址混写为物理文件地址方法:
第一步:
判断所有的结点是否在连续的内存地址空间,如果在连续内存空间,记该内存空间首地址为fAddr,转向第三步。
第二步:
在UWA区申请分配能容纳T树所有结点大小的内存,并把这些结点拷贝到UWA,记该内存空间首地址为fAddr。
第三步:
从fAddr开始逐一访问内存中存储的T树结点(记录T树根结点的位置),按照公式修改结点左右指针地址,同时修改结点指向其对象集合的地址为该对象集合在外存的块编号。
物理文件地址混写为内存地址方法:
第一步:
按照T树在文件中的格式加载到内存,即首地址为fAddr,同时所有结点指向的对象集合也加载到内存,记首地址为oAddr。
第二步:
从首地址fAddr开始逐一访问内存中存储的T树结点,按照公式修改结点左右指针地址,同时修改结点指向的对象集合的地址为该对象集合在内存的地址。
第三步:
根据内存地址混写为数据库文件地址记录的根结点位置,获取根结点,并构造出完整的T树。
(4)常驻外存数据与索引的存储管理
对常驻外存数据采用B+树索引进行存储管理。
a.B+树结点的组织
B+树结点以数组的方式存储关键字和指针,内部结点的指针指向其相应的结点(内部结点或页结点),页结点的指针指向其对应对象地址。如图14所示为B+树结点的结构,包括关键字数组、指针数组、结点实际存储的关键字个数、结点的类型(内部结点或叶子结点)。B+树结点的大小同关键字的个数有关。基于此特点,B+树结点的字节大小即为一个数据库块的大小,因此,数据库块与B+树结点为一对一的关系;而数据库块与B+树页结点指向的对象集合为多对多的关系。
B+树结点所能容纳最多的关键字n的确定可以通过下面公式确定:
Sizeof(keytype)*n+sizeof(pointer)*(n+1)<=sizePerBlock-4
其中:
keytype为关键字类型的字节大小
Pointer为***中指针的大小,32位计算机为4bytes
sizePerBlock为数据库块的大小,典型值为1k~64k
结点包含的关键字数目一旦确定,页结点指向的对象集合大小即固定,但不一定是数据库块大小的整数倍,为了充分利用外存空间,本方法采用连续存储方式-各页结点指向的对象集合以块的形式组织,结点之间的对象连续存放,即多个页结点指向的对象集合可能存储在同一个数据库块。
b.B+树在外存的存储
数据库块的大小同物理块大小一致,数据库块与B+树结点为一对一的关系,数据库块与结点指向的对象集合是多对多的关系,根据图5所示的数据库物理文件格式,建有B+树索引的表空间在外存的组织如图15所示,其中,一个数据库块最多可存放i个对象,B+树结点包含的对象个数为m。按照表头段、索引段、数据段依次存储在物理文件中,其中表头段存储管理为:按照头描述信息、B+树索引的段头信息和B+树数据段头信息顺序存储表头段数据,其中索引段信息按段头向段尾的方向增长,而数据段头信息则按相反的方向增长-段尾向段头方向增长;索引段存储管理为:B树结点按照从上到下,从左到右的顺序存储在数据库物理文件中,其中一个B+树结点存储在一个物理块中。数据段存储管理为:按照B+树结点在索引段的存放顺序存储结点指向的对象集合,一个结点指向的对象集合可能跨越多个物理块,即不同结点指向的对象集合可能存储在同一个物理块,保证数据的紧凑性。
c.B+树在内存的存储管理
建有B+树的表空间的索引与数据在内存的存储管理采用扩展的段页式存储管理方法,如图16所示,按照表头段、索引段、数据段、修改段依次存储在内存中,并且每个段都有一个段头指针。其中表头段存储管理为:其存储的数据及其格式同该表在外存中的表头段数据相同,如果有新的索引段或数据段加入,那么把新增加段的信息按照表头段的格式填充到表头段。索引段的存储管理为:一个B+树结点存储在一个数据库块中,当结点因***有新结点***时,则新申请一个数据库块存储该结点,并把该块链接到其上一个块。当因结点合并删除结点时,并不从释放该内存空间,只是标志该块为空闲块,并***到空闲链表。数据段的存储管理为:结点指向的对象集合按照B+树结点创建的顺序存储在数据段,一个结点指向的对象集合可能跨越多个数据库块,所有的数据库块链接成一个链表构成数据段。修改段的存储管理:依次存储用户对索引段或数据段的修改信息。
d.内存地址混写为物理文件地址。
本发明中使用深度搜索算法(队列方式)实现对树的各结点访问,即从上而下,从左往右依次访问树结点,并把结点(经过地址混写后的结点)内容写入到文件。具体而言,首先把根结点***到队列,然后从队列中删除元素(得到当前访问的B+树结点),从左到右访问该结点的指针,把指针指向的结点***到队列,然后根据下列公式把指针混写成物理文件地址(通过C++语言的强制转换技术把整型数据赋给指针),最后写入到文件,依此下去,直到访问完所有B+树结点。
PhysicalAddr=BlockCompNo<<16+BlockOffset
其中:
PhysicalAddr 结点所在物理文件地址(相对块号U块内偏移量)
BlockCompNo 相对根结点所在块的块号(相对块号)
BlockOffset 相对块内首地址的地址偏移量(块内偏移量)
Claims (7)
1、嵌入式数据库的存储管理方法,其特征在于:包括数据存储策略、数据库物理文件的组织、数据字典的存储管理、用户表数据的存储管理4个步骤,其中:
(1)数据存储策略包括:数据在内存的存储策略和数据在外存的存储策略,其中:
数据在内存的存储策略为:a.逻辑存储结构为将嵌入式数据库***的内存空间分为五个区,按区间首地址从低到高依次为:***区SA,用于存储数据字典;主存数据库区MMDA,用于存储用户表中的数据,是***的缓冲区之一;用户工作区UWA,为数据管理的辅助区间,与主存数据库区MMDA构成双缓冲区;日志区JA,用于存储事务对数据库更新操作的信息;预留区RA,用手存储应急数据;b.物理存储结构与逻辑存储结构相一致;
数据在外存的存储策略为:a.逻辑存储结构分为:数据库表、段、数据库块,其中,一个数据库包括多个数据库表,一个数据库表包括:数据字典和用户表,一个数据库表对应多个段;段分为表头段,索引段和数据段三种类型,一个段对应多个数据库块;数据库块为逻辑存储结构的最小分配单位;b.物理存储结构包括物理文件和物理块,其中,一个数据库块对应一个或多个物理块,多个物理块构成物理文件,物理块为物理存储结构的最小分配单位;
(2)根据所述的数据存储策略,确定数据库物理文件的组织结构:
将数据字典放在数据库物理文件的首部,其后为用户表;数据字典包括:文件头、数据字典表头段、数据字典索引段、数据字典数据段;用户表包括:用户表表头段、用户表索引段和用户表数据段;
(3)基于上述的数据存储策略和数据库物理文件的组织,确定数据字典在外存的存储管理和在内存的存储管理:
数据字典在外存的存储管理为:数据库物理文件的描述信息存储在文件头,外延定义类和属性定义类采用数据字典表头段、数据字典索引段、数据字典数据段三段式的存储方式;数据字典在内存的存储管理:数据字典在数字库***启动时全部加载到SA,并且保留其在物理文件上的格式,采用页式存储管理方法;
(4)根据上述的数据存储策略、数据库物理文件的组织和数据字典的存储管理,确定用户表中的数据与索引的管理:
对常驻内存数据采用T树进行存取,对常驻外存数据采用B+树索引进行存取,并采用扩展的段页式存储管理方法对建立在数据上的索引及其数据本身进行存储管理,所述的扩展的段页式存储管理方法如下:
a.在MMDA区申请三个数据库块的大小内存空间,每个数据库块分别标志为表头段-H段、索引段-I段、数据段-D段,并记录每个段的首地址为headAddr,idxAddr,dataAddr;
b.如果***的数据需要常驻内存,那么采用T树作为其索引,否则采用B+树;
c.把***的对象填充到D段,把***对象的索引填充到I段,如果I段或D段无空闲空间,那么申请一个数据库块大小内存作为下一个I段或D段,并链接到前一个I段或D段,如果对象***操作结束,则转到下一步d,否则继续***对象;
d.根据I段和D段的数据,填充H段。
2、根据权利要求1所述的嵌入式数据库的存储管理方法,其特征在于:所述(1)中,用户工作区UWA和主存数据库区MMDA构成双缓冲区的方法为:如果数据在内存中格式与其在物理文件中的格式一致,则直接将主存数据库区MMDA中数据写入到物理文件;否则借助用户工作区UWA,先将主存数据库区MMDA中的数据拷贝到用户工作区UWA,在用户工作区UWA中按照物理文件的数据格式重新组织,然后写入到物理文件。
3、根据权利要求1所述的嵌入式数据库的存储管理方法,其特征在于:所述(1)中,对于更新事务,先将事务涉及的数据在主存数据库区中拷贝到用户工作区UWA中,然后在用户工作区UWA中完成更新事务,如果事务成功完成,那么将用户工作区UWA中的数据更新到主存数据库区MMDA,否则此次事务失败,主存数据库区MMDA中数据不做修改,从而保证数据的一致性。
4、根据权利要求1所述的嵌入式数据库的存储管理方法,其特征在于:所述(1)中,主存数据库区MMDA采用扩展的段页式存储管理的结构为:对于加载到内存的类信息在MMDA中建立三个段:表头段、索引段、数据段存储这些数据;另外还可以加修改段,修改段是可选的,仅当修改类对象时,修改段才建立;其中表头段,对应该类在物理文件的表头段,存储了类的索引和对象集合的描述信息及其分布情况;索引段,不包含段头说明信息,存储的全部是索引数据;数据段,同索引段一样,采用类对象的组织方式,按照原格式以块的方式载入内存,以块的方式写入物理文件;修改段,此段是可选的,如果确定不会修改类的任何信息,则不需要为该段分配内存空间,该段存储了应用对该类所作的修改,当该段需要被置换到外存时,则利用修改段存储的信息,把修改写入到物理文件。
5、根据权利要求1所述的嵌入式数据库的存储管理方法,其特征在于:所述的数据字典中外延定义类和属性定义类采用数据字典表头段、数据字典索引段、数据字典数据段三段式的存储方式,其中数据字典表头段的数据格式为:头描述信息、1-i个索引段头信息和1-i个数据段头信息,头描述信息为最前端,接着是索引段头信息,索引段信息按段头向段尾的方向增长,而数据段头信息则按相反的方向增长-段尾向段头方向增长;数据字典索引段和数据字典数据段分别存储了外延定义类对象集合和属性定义类对象集合,外延定义类对象按其创建的顺序存储,属性定义类按照外延定义类对象的存放顺序存储,其中一个外延定义类对象对应的属性定义类对象集合为连续存储。
6、根据权利要求1所述的嵌入式数据库的存储管理方法,其特征在于:所述的建有T树索引的用户表在外存按照表头段、索引段、数据段依次存储在物理文件中,表头段存储管理为:按照头描述信息、T树索引的段头信息和T树数据段头信息顺序存储表头段数据;索引段信息按段头向段尾的方向增长,而数据段头信息则按相反的方向增长-段尾向段头方向增长;索引段存储管理为:T树结点按照创建的顺序存储在数据库物理文件中,以物理块为单位,即当一个物理块剩余的空间不足以存储一个T树结点时,则把该结点存储在下一个物理块,保证结点的存储不会跨越两个物理块;数据段存储管理为:按照结点在索引段的存放顺序存储结点指向的对象集合在一个物理块中。
7、根据权利要求1所述的嵌入式数据库的存储管理方法,其特征在于:所述的建有T树索引的用户表在内存采用扩展的段页式存储管理方法:按照表头段、索引段、数据段、修改段依次存储在内存中,并且每个段都有一个段头指针,其中表头段存储管理为:其存储的数据及其格式同该表在外存中的表头段相同,如果有新的索引段或数据段加入,则把新增加段的信息按照表头段的格式填充到表头段;索引段的存储管理为:一个数据库块可以存储多个T树结点,当有新的结点***时,如果当前使用的数据库块大小不足以容纳该新结点,则新申请一个数据库块,然后把该新结点***,同时把新申请的数据库块链接到前一个数据库块,保证一个结点不会跨越多个数据库块;当有结点删除时,只需标志该块为空闲块,并***到空闲链表;数据段的存储管理为:结点指向的对象集合按照T树结点的创建顺序存储在数据段,一个结点指向的对象集合存储在一个数据库块中,以一个数据库块大小为单位申请内存空间,新申请的数据库块需要链接到其前一个块;修改段的存储管理:依次存储用户对索引段或数据段的修改信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100997621A CN100478959C (zh) | 2007-05-30 | 2007-05-30 | 嵌入式数据库的存储管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100997621A CN100478959C (zh) | 2007-05-30 | 2007-05-30 | 嵌入式数据库的存储管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101055589A CN101055589A (zh) | 2007-10-17 |
CN100478959C true CN100478959C (zh) | 2009-04-15 |
Family
ID=38795425
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100997621A Expired - Fee Related CN100478959C (zh) | 2007-05-30 | 2007-05-30 | 嵌入式数据库的存储管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100478959C (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8516219B2 (en) * | 2009-07-24 | 2013-08-20 | Apple Inc. | Index cache tree |
CN102236648B (zh) * | 2010-04-21 | 2014-04-16 | ***股份有限公司 | 信息存储***及方法 |
CN102479189B (zh) * | 2010-11-23 | 2016-08-03 | 上海宝信软件股份有限公司 | 一种内存中海量时间戳型数据高速均匀访问的索引方法 |
CN102136005B (zh) * | 2011-03-29 | 2013-07-17 | 北京航空航天大学 | 数据查询方法和装置 |
US8798967B2 (en) * | 2011-03-30 | 2014-08-05 | Chevron U.S.A. Inc. | System and method for computations utilizing optimized earth model representations |
CN102521306A (zh) * | 2011-12-01 | 2012-06-27 | 苏州迈科网络安全技术股份有限公司 | 一种数据存储***应用方法 |
CN102725754B (zh) * | 2011-12-26 | 2014-08-13 | 华为技术有限公司 | 一种索引数据处理方法及设备 |
CN102411632B (zh) * | 2011-12-27 | 2014-08-20 | 北京人大金仓信息技术股份有限公司 | 基于链表的内存数据库页式存储方法 |
CN102591979A (zh) * | 2012-01-05 | 2012-07-18 | 厦门市美亚柏科信息股份有限公司 | 一种sqlite的自由空间的删除记录挖掘方法和*** |
CN102629269B (zh) * | 2012-03-09 | 2014-09-24 | 深圳市民德电子科技有限公司 | 一种嵌入式数据库的检索及存储方法 |
CN103412884B (zh) * | 2013-07-18 | 2016-12-28 | 华中科技大学 | 一种异构存储介质下嵌入式数据库的管理方法 |
CN104462108A (zh) * | 2013-09-17 | 2015-03-25 | 中兴通讯股份有限公司 | 数据库结构对象处理方法及装置 |
CN103902693B (zh) * | 2014-03-28 | 2017-06-20 | 西安交通大学 | 一种读优化的内存数据库t树索引结构的方法 |
CN104615618B (zh) * | 2014-05-21 | 2018-07-31 | 北方信息控制集团有限公司 | 一种嵌入式内存数据库的实现方法 |
US9824092B2 (en) * | 2015-06-16 | 2017-11-21 | Microsoft Technology Licensing, Llc | File storage system including tiers |
CN105653609B (zh) * | 2015-12-24 | 2019-08-09 | 中国建设银行股份有限公司 | 基于内存的数据处理方法及装置 |
CN106649654A (zh) * | 2016-12-12 | 2017-05-10 | 京信通信技术(广州)有限公司 | 一种数据更新的方法和装置 |
CN106897458A (zh) * | 2017-03-10 | 2017-06-27 | 广州白云电器设备股份有限公司 | 一种面向机电设备数据的存储及检索方法 |
US10713238B2 (en) * | 2017-11-14 | 2020-07-14 | Snowflake Inc. | Database metadata in immutable storage |
CN110019221B (zh) * | 2017-12-18 | 2022-07-19 | 本无链科技(深圳)有限公司 | 一种内存映像型数据库*** |
CN108563714B (zh) * | 2018-03-29 | 2021-08-03 | 苏州开心盒子软件有限公司 | 一种SQLite3数据库已删除数据块的提取方法 |
CN110427362B (zh) * | 2018-04-27 | 2022-03-08 | 杭州海康威视数字技术股份有限公司 | 一种获取数据库类型的方法及装置 |
CN110008185B (zh) * | 2018-10-12 | 2021-02-05 | 和宇健康科技股份有限公司 | 一种利用处理冗余的云端信息分类处理*** |
CN109739689B (zh) * | 2018-12-25 | 2023-03-14 | 四川效率源信息安全技术股份有限公司 | 一种雕复SQL Server数据库文件的方法 |
CN110851403A (zh) * | 2019-10-24 | 2020-02-28 | 北京空间飞行器总体设计部 | 一种基于rom和ram的星载文件管理方法 |
CN112328594B (zh) * | 2020-10-23 | 2024-02-02 | 许继集团有限公司 | 一种嵌入式装置模型数据管理方法及装置 |
CN113407550A (zh) * | 2021-08-19 | 2021-09-17 | 支付宝(杭州)信息技术有限公司 | 数据存储及查询方法、装置及数据库*** |
CN114116612B (zh) * | 2021-11-15 | 2024-06-07 | 长沙理工大学 | 一种基于b+树索引归档文件的存取方法 |
CN114610721B (zh) * | 2022-03-23 | 2022-12-27 | 北京涵鑫盛科技有限公司 | 一种多层级分布式存储***及存储方法 |
CN115168365B (zh) * | 2022-09-01 | 2022-12-02 | 浪潮通信信息***有限公司 | 数据存储方法、装置、电子设备及存储介质 |
-
2007
- 2007-05-30 CN CNB2007100997621A patent/CN100478959C/zh not_active Expired - Fee Related
Non-Patent Citations (4)
Title |
---|
内存数据库中存储结构的实现机制. 钟宝荣,袁文亮.计算机工程与设计,第28卷第5期. 2007 |
内存数据库中存储结构的实现机制. 钟宝荣,袁文亮.计算机工程与设计,第28卷第5期. 2007 * |
嵌入式操作***内存管理机制分析及改进. 孙益辉,陈凯,白英彩.计算机应用与软件,第23卷第3期. 2006 |
嵌入式操作***内存管理机制分析及改进. 孙益辉,陈凯,白英彩.计算机应用与软件,第23卷第3期. 2006 * |
Also Published As
Publication number | Publication date |
---|---|
CN101055589A (zh) | 2007-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100478959C (zh) | 嵌入式数据库的存储管理方法 | |
CN103473181B (zh) | 分级式不可变内容可寻址存储器处理器 | |
US9734607B2 (en) | Graph processing using a mutable multilevel graph representation | |
CN101639848B (zh) | 一种空间数据引擎及应用其管理空间数据的方法 | |
CN107423422B (zh) | 基于网格的空间数据分布式存储及检索方法和*** | |
CN109815165A (zh) | 用于存储和处理高效压缩高速缓存行的***和方法 | |
US8078636B2 (en) | Database heap management system with variable page size and fixed instruction set address resolution | |
CN109815163A (zh) | 基于预测的高效高速缓存行处理的***和方法 | |
US20060149916A1 (en) | Method and apparatus for block-oriented memory management provided in smart card controllers | |
Shukla et al. | Schema-agnostic indexing with Azure DocumentDB | |
EP0783738A1 (en) | Object oriented data store integration environment | |
Petrov | Database Internals: A deep dive into how distributed data systems work | |
CN109407978A (zh) | 高并发索引b+链表数据结构的设计与实现方法 | |
CN103106286A (zh) | 元数据的管理方法和装置 | |
CN111522507B (zh) | 一种低延迟的文件***地址空间管理方法、***及介质 | |
CN102411634B (zh) | 一种提升嵌入式数据库实时性的数据存储方法 | |
CN106844584B (zh) | 元数据结构和基于其的操作方法、定位方法、切分方法 | |
CN102819494B (zh) | 一种闪存顺序写入时的优化方法 | |
CN100424699C (zh) | 一种属性可扩展的对象文件*** | |
CN115427941A (zh) | 数据管理***和控制的方法 | |
CN107544756A (zh) | 基于SCM的Key‑Value日志型本地存储方法 | |
CN108804349A (zh) | 多处理器***,数据管理方法和非暂时性计算机可读媒体 | |
CN109815168A (zh) | 用于少标记缓冲器实现的***和方法 | |
CN105468541A (zh) | 一种面向透明计算智能终端的缓存管理方法 | |
Chen et al. | A unified framework for designing high performance in-memory and hybrid memory file systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090415 Termination date: 20140530 |