发明内容
本发明要解决的技术问题在于针对现有技术的上述缺陷,提供一种嵌入式数据库的检索及存储方法。
本发明解决其技术问题所采用的技术方案是:
一种嵌入式数据库的检索及存储方法,建立数据文件和索引文件以存储数据信息,索引文件包括头文件信息、散列表以及AVL树和索引信息,当嵌入式系统处于离线状态时,数据的存储过程包括:
S1、嵌入式设备与外部高速设备通信连接,外部高速设备对数据进行分析和组织;
S2、将记录保存到数据文件;
S3、建立索引信息并保存到索引文件中;
S4、嵌入式数据库建立后,将其下载至嵌入式设备中;
当嵌入式系统处于在线状态时,数据的检索和存储过程包括:
T1、打开嵌入式数据库文件,包括数据文件和索引文件;
T2、通过关键字在索引文件中查找索引信息;
T3、获取数据文件中的记录、插入或更新数据文件中的记录;
所述步骤S1进一步包括:
S11、指定标识记录的数据项为关键字;
S12、规划散列表的大小,从算法集合中选取散列函数对关键字进行探测,确定一个待用的散列函数和索引文件的头文件信息,所述头文件信息包括记录总量、散列函数序号、散列表大小以及表单元长度;
其中,从散列函数集合中选取散列函数对关键字进行探测的过程包括:依次选取算法集合中的散列函数,对全部关键字进行计算,通过比较散列冲突的数量以及散列表的利用率,确定散列函数序号,以确定一个待用的散列函数;
所述步骤S3进一步包括:
根据所述散列函数计算关键字的散列值,将该散列值映射到散列表中;
获取所述散列表的数据,判断所述散列表是否为空,当所述散列表为空时,建立AVL树根节点,填入该根节点的索引信息,其中所述根节点的索引信息包括:左子树入口地址、右子树入口地址、关键字、记录在数据文件的偏移地址、记录长度,当所述散列表为非空时,新建一个树叶子节点插入AVL树中,填入该树叶子节点的索引信息,其中所述树叶子节点的索引信息包括:左子树入口地址、右子树入口地址、关键字、记录在数据文件的偏移地址、记录长度。
在该方法中,散列函数包括:BKDRHash、DJBHash、APHash、RSHash、SDBMHash和JSHash。
该方法的步骤S3进一步包括:判断步骤S2中的数据存储是否结束,如果继续进行数据存储,则返回步骤S2。
在该方法中,当嵌入式系统处于在线状态时,数据的检索和存储过程还包括:
T0、判断嵌入式系统中是否存在数据库文件,如果存在,则将其打开,如果不存在,则建立一个新的数据库文件并打开。
该方法的步骤T2进一步包括:获取索引文件的头文件信息,从散列函数集合中确定一待用的散列函数,利用该散列函数计算关键字的散列值,通过散列值与散列表的映射关系,获取散列表中的数据,作为AVL树根节点入口地址。
该方法的步骤T2进一步包括:判断AVL树是否为空树,如果AVL为空树,则建立AVL树根节点以保存索引信息,将AVL树根节点的入口地址填入散列表中,如果AVL树不为空,则查找AVL树,接着判断关键字是否匹配,如果没有匹配到关键字,则新建一个树叶子节点,填入索引信息,如果匹配到关键字,则根据索引信息中的记录地址和长度,从数据文件中获取记录。
因此,该嵌入式数据库的检索及存储方法充分利用外部高速设备的优势,适应地规划散列表空间,节约空间、提高散列表的利用率,加快运算速度,提高检索的效率。数据库使用两个文件来组织和存储信息,数据库占用的系统内存少。总之,本发明的方法具有资源消耗少,检索效率高的有益效果,可以在资源受限的嵌入式系统中使用的有益效果。
具体实施方式
如图1所示,索引文件包含头文件信息、散列表和AVL树以及索引信息。索引文件的详细结构如图2所示。在索引文件中,头文件信息包括记录总量、散列函数序号、散列表大小以及表单元长度。散列表被划分为长度相同的表格,表格记录的是AVL树在索引文件的入口地址。AVL树以及索引信息包含:左子树入口地址、右子树入口地址、关键字及其记录地址与和记录长度。数据文件则逐条保存记录。
如图3所示,根据上述索引文件的组织结构建立的AVL树模型。本发明采用AVL树来处理散列冲突,AVL树的每个叶子节点保存的索引信息包含了左子树的入口地址与右子树入口地址,形成AVL树结构。
如图4所示,嵌入式设备与外部高速设备交互示意图。在嵌入式设备2以及外部高速设备1(如个人计算机)上建立相同的数据库函数库,利用高速设备的运行速度快以及内存大的优势,对静态数据进行分析,选取较优的散列算法,建立索引文件和数据文件。最后,通过有线或无线的方式,将索引文件和数据文件下载到嵌入式设备中。另外,嵌入式设备处于在线方式下,进行数据采集,检索与存储数据到所述的数据库中。
参考图5,静态数据的一条记录由多个数据项组成,用户指定唯一标识记录的数据项(加粗项,例如数据项2)为关键字。
转到图6,为本发明嵌入式数据库的检索及存储方法的一个实施例的嵌入式系统处于离线方式下的存储数据的流程图。
在该实施例中,该方法包括如下步骤:
S1、嵌入式设备与外部高速设备通信连接,所述外部高速设备对数据进行分析和组织;
S2、将记录保存到所述数据文件;
S3、建立索引信息并保存到所述索引文件中;
S4、嵌入式数据库建立后,将其下载至所述嵌入式设备中;
而图7是本发明嵌入式数据库的检索及存储方法的一个实施例的嵌入式系统处于在线方式下的数据检索与存储的流程图。在该实施例中,当嵌入式系统处于在线状态时,数据的检索和存储过程包括如下步骤:
T1、打开嵌入式数据库文件,包括数据文件和索引文件;
T2、通过关键字在所述索引文件中查找索引信息;
T3、获取所述数据文件中的记录、插入或更新所述数据文件中的记录。
图8和图9分别是本发明嵌入式数据库的检索及存储方法的又一优选实施例的嵌入式系统处于离线和在线方式下的数据检索与存储的流程图。
如图8所示,嵌入式系统处于离线方式下,利用外部高速设备建立数据库文件的方法流程,包括以下步骤:
步骤601:指定标识记录的数据项为关键字;
步骤602:分析关键字,确立散列函数以及索引文件的头文件信息。例如,待存储的记录总量为N,根据记录总量N选取合适的散列表大小HashSize(HashSize略大于N),散列表格长度选取为HashTableLength。根据所述的散列算法集合对全部关键字进行探测,探测的过程为:依次选取算法集合中的散列函数,对全部关键字进行计算,通过比较散列冲突的数量以及散列表的利用率,确定Hash,设立一种较优的散列函数H(K),使得建立的散列表利用率最大,检索效率最高。因此,索引文件的头文件信息为:N、Hash、HashSize、HashTableLength。
例如,为满足存储200000条记录总量的静态数据,散列表大小HashSize选取为27171,因此散列值的范围是0-27171,散列表格长度HashTableLength选取为8位,则索引文件的大小可以达到(99999999/8)Bytes。如果经过探测得出BKDRHash为散列算法集合中最优的散列函数,则Hash为1。因此,索引文件的头文件信息为:200000、1、27171、8。
散列函数用C语言表示是这样的:Hash表示散列算法集合中的序号,若用c表示一个字符串中的某一个字符,Hval表示散列值,则任意长度的关键字的字符串(KeyString)的散列值可选择以下的散列函数进行计算:
步骤603:保存一条记录到数据文件;
步骤604:根据前述的散列函数,计算关键字的散列值,散列值映射到散列表中。例如,散列值Hval为125,则映射到散列表第125个表格。
步骤605:获取所述的散列表格的数据;
步骤606:判断散列表格的数据是否为空,如果为空,则表示不存在散列冲突,则跳到步骤607;不为空则表示存在散列冲突,跳到步骤608;
步骤607:不存在散列冲突,则需要将关键字索引信息插入AVL空树中,即建立AVL树根节点,并将AVL树根节点的地址填入前述的散列表格中,根节点保存的索引信息为:左子树入口地址、右子树入口地址、关键字、记录在数据文件的偏移地址、记录长度;
步骤608:存在散列冲突,则需要新建一个树叶子节点插入AVL树中,树叶子节点的索引信息为:左子树入口地址、右子树入口地址、关键字、记录在数据文件的偏移地址、记录长度;
步骤609:判断是否存储完毕,继续存储则跳到步骤603,存储完毕则跳到步骤610;
步骤610:完成索引文件和数据文件的建立,保存文件到嵌入式设备中。
如图9所示,嵌入式系统处于在线方式下,检索与存储数据的方法流程。包括以下步骤:
步骤701:判断嵌入式系统中是否存在数据库文件,若存在则打开文件,包括索引文件和数据文件,获取索引文件的头文件信息,确立散列表大小和表格的长度,以及散列函数H(K);若不存在则建立空的数据库文件并打开,系统新建一个空的索引文件和数据文件,并默认确立散列算法集合中一种散列函数H(K)来构建散列表,默认确立散列表的大小及其表格的长度,形成头文件信息并填入索引文件;
步骤702:获取索引文件的头文件信息,确立散列集合中的散列函数H(K);
步骤703:通过所述的散列函数H(K)计算关键字的散列值,通过散列值的映射关系,获取散列表格中的数据,作为AVL树根节点入口地址;
步骤704:判断AVL树根节点入口地址是否为空,如果为空,则表示不存在该关键字,插入记录,跳到步骤705;不为空则需要查找AVL树,跳到步骤706;
步骤705:将索引信息插入AVL空树中,即建立AVL树根节点保存索引信息,将AVL树根节点的入口地址填入前述的散列表中,然后跳到步骤709;
步骤706:查找AVL树,获取索引信息,判断待查找的关键字与索引信息中的关键字是否匹配;若没有匹配到关键字,插入记录,跳到步骤707;如果选择获取记录,则跳到步骤708;
步骤707:保存新记录到数据文件,新建一个树叶子节点插入AVL树中,叶子节点的关键字索引信息为:左子树入口地址、右子树入口地址、关键字、记录在数据文件的偏移地址、记录长度。跳到步骤709;
步骤708:根据索引信息中的记录地址和长度,到数据文件中获取记录。
步骤709:判断是否检索完毕,继续存储则跳到步骤703。
该散列函数的优点在于:(1)选取多种散列函数,对不同的关键字集合进行探测,选取一种散列冲突较小的算法,提高检索效率;(2)选取的散列函数都非常简单有效,这些函数使用了位运算使得每一个字符都对最后的函数值产生影响,使散列值可以在一定程度上均匀地分布在散列表中,减少散列冲突,提高了散列表的利用率以及减少了空间的开支;(3)选取的散列函数可以兼容字符格式的数据,满足了嵌入式数据库的平台无关特性。
如有两个或两个以上需要存储的字符串经过散列函数的计算得到了同样的散列值,即出现散列冲突,本发明采用的方式是:将这些具有相同散列值的关键字存储在同一棵AVL树的不同叶子上来加以区分,即本发明采用AVL树技术来处理散列冲突。
总之,本发明的嵌入式数据库的检索及存储方法的是发明人基于如下考虑而设计的:在面向信息交互的嵌入式设备的应用中,嵌入式系统可分为两种工作方式:在线方式和离线方式。在线方式是指嵌入式系统处于控制状态,实时地处理信息;而离线方式是指嵌入式系统处于待机状态。对于面向信息交互的嵌入式设备,根据数据的来源特点,数据可分为静态数据和动态数据。所谓静态数据是指在运行过程中主要作为参考的数据,它发生数据更新的频率不高。例如,嵌入式系统处于离线方式下,在人机界面中计算机终端事先下载到嵌入式系统中的数据,这些数据一般都是固定的。这部分数据不会因为采集到的数据的变化而产生频繁更新。这部分数据的另一个特点就是数据量较大,从嵌入式系统实时性的角度考虑,对静态数据的数据存取机制应侧重于查询效率的提高和空间的节约。所谓动态数据是指运行中发生变化的数据以及运行中要输入输出的数据。例如,嵌入式系统处于在线方式的状态下,实时采集到的数据,其特点是不断的追加或更新。对这部分数据存取机制的设计应注重对数据库进行频繁的插入和更新操作要快速,提高数据的实时性。因此在兼顾降低空间复杂度的同时要尽量提高插入和删除操作的效率。在嵌入式环境下对数据的处理和管理成为嵌入式系统设计过程中的重要环节。
数据库是以一定组织方式储存在一起的、与应用彼此独立的数据集合。有很多技术可用来组织数据的存储,以提高查询的速度和效率,常用的索引技术如:散列表、AVL树和B/B+树,这些索引技术各有优劣。散列表是一种‘利用设定的散列函数H(K)和处理冲突的方法将一组关键字K映像到一个有限的连续的地址集合(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置’的索引技术。散列表的缺点是散列冲突的存在,即不同的关键字K通过散列函数得到相同的结果,因此需要根据数据特点建立合适的散列函数,尽可能减少冲突,以及设定一种处理冲突的方法。散列表更适合用于预先知道的数据的索引,如静态数据,以及单值索引数据。AVL树也叫平衡二叉树,是在构建二叉树的过程中进行平衡处理,成为AVL树,其查找性能跟二分法相同;B/B+树是一种平衡的多路查找树,B/B+树作为多级索引组织方法,特别适合于组织存放在外存的大型磁盘文件的一种树状索引结构,另外也用于单值查询和范围查询,特别适用于范围查询。
因此,在软硬件配置都受到一定限制的嵌入式系统环境中,嵌入式数据库的特点有如下几点:
1、嵌入式数据库的数据来源可分为静态数据和动态数据;
2、嵌入式设备的存储器大多主要采用支持文件系统管理的存储器;
3、需要采用具有可伸缩性特点的数据库存储技术,有效地节约存储空间;
4、不能采用对资源消耗太大的算法来实现数据库的索引功能;
5、要考虑到嵌入式数据库在不同的平台间移植的问题;
6、需要充分利用外部高速设备的优势预先对数据进行分析,有效地组织与存储数据,如个人计算机等设备。
所以,本发明是在软硬件配置都受到一定的限制的嵌入式系统中,设计一种对资源消耗少、检索效率高的轻量级嵌入式数据库,实现数据快速存储及其检索的方法。相比较现有的方法,本发明的技术特点是:
1.根据静态数据的特点,充分利用外部高速设备的优势,自适应地规划散列表空间,节约空间、提高散列表的利用率;自适应地选择最优的散列函数,加快运算速度,减少散列冲突,提高检索的效率。
2.数据库使用两个文件来组织和存储信息,通过访问文件形式检索,所占的内存仅用于文件的句柄信息,因此数据库占用内存少;
3.数据库文件使用字符串形式存储数据,使嵌入式数据库在不同的平台移植比较容易。
4.数据库文件采用可伸缩性特点地存储数据,有效地节约了存储空间;
本发明是通过一些实施例进行描述的,本领域技术人员知悉,在不脱离本发明的精神和范围的情况下,可以对这些特征和实施例进行各种改变或等效替换。另外,在本发明的教导下,可以对这些特征和实施例进行修改以适应具体的情况及材料而不会脱离本发明的精神和范围。因此,本发明不受此处所公开的具体实施例的限制,所有落入本申请的权利要求范围内的实施例都属于本发明的保护范围。