CN1203433C - 嵌入式系统的数据存放及其查找组合方法 - Google Patents
嵌入式系统的数据存放及其查找组合方法 Download PDFInfo
- Publication number
- CN1203433C CN1203433C CN 02121569 CN02121569A CN1203433C CN 1203433 C CN1203433 C CN 1203433C CN 02121569 CN02121569 CN 02121569 CN 02121569 A CN02121569 A CN 02121569A CN 1203433 C CN1203433 C CN 1203433C
- Authority
- CN
- China
- Prior art keywords
- field
- data
- hash
- record
- embedded
- 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 - Lifetime
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种数据存放及其查找组合方法,是基于嵌入式系统的全散列数据存储与查找方法。其存储过程包括:将每一条待存储记录拆分成1至N个字段;将各个字段的数据分别通过哈希计算得到哈希结果值,再存放到数据文件中以各哈希结果值的哈希表和B+树为单位的各字段的数据索引系统中。记录的查找与组合过程包括:对待查找记录中的字段数据进行哈希计算得到哈希结果值,通过该哈希结果值,在对应数据索引系统的哈希表中找出该字段数据在数据文件中的实际物理地址;在数据文件中找出该字段数据及其上下字段数据,重复执行本步骤,由N个字段数据组合成一条待查找记录。本发明根据嵌入式平台的特性将记录的数据拆分并全散列存放,可提高查找速度。
Description
技术领域
本发明涉及计算机处理技术领域,更确切地说是涉及一种基于嵌入式系统的数据记录存放及查找组合方法。
背景技术
嵌入式系统是一种以应用为中心、以计算机技术为基础的专用计算机系统,其特点是软硬件可裁剪,并能适于应用系统对功能、可靠性、成本、功耗等的严格要求。嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理。由于嵌入式系统通常是面向特定应用的,因而与通用型计算机系统相比具有定制性强的特点,其嵌入式微处理器(CPU)大多工作在为特定用户群设计的系统中,通常具有低功耗、体积小、集成度高、资源占用率少等特点,能够将通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,和增强移动能力,增加与网络耦合的紧密度。
现有的采用嵌入式系统的嵌入式产品,包括信息电器类、移动计算设备类、网络设备类、工控仿真医疗仪器类,如手机、个人数字助理机(PDA)、VCD、机项盒、数控机床、路由器、网络家电等。
嵌入式系统的发展,可以分为两个层次:一是基于硬件设计和操作系统底层的发展;二是和整个软件体系相关的操作系统体系的发展。其发展中最重要的两方面技术是:数据交换和应用交换。
嵌入式数据库对嵌入式产品有着十分重要的意义,在基于嵌入式数据库的应用解决方案中,嵌入式应用是直接使用嵌入式数据库的第一级应用,目前的嵌入式架构,使嵌入式数据库系统能够和嵌入式操作系统有机地结合在一起,为应用开发提供有效的本地数据管理手段,同时提供各种定制条件和方法。
对嵌入式产品数据库的要求是:在访问其他如PC机、数据库服务器等电子设备的数据时应该畅通无阻;同时,要求其数据可以自由地在嵌入式平台之间移植。因此,掌握嵌入式数据库的数据索引与存储技术,不但可以解决现有嵌入式产品的数据交换问题,同时可以降低嵌入式产品的研发成本,又能提高嵌入式产品的互连互通特性与数据管理能力,为嵌入式技术的发展起到很好的推进作用。
图1中示意出嵌入式数据库11在操作系统中的位置,与中间件层12同层,连接应用层(Applications)13、中间件层(包括GUI、标准C库等的系统库)12和与操作系统(包括与体系结构无关的嵌入式内核14和与体系结构相关的嵌入式内核15)连接。
数据存储和交换是嵌入式产品中的两项十分关键的技术,目前的嵌入式产品并没有很好地满足其对数据交换的要求,如在wince或其他嵌入式系统中,还没有一个能真正针对嵌入式产品的数据交换方法。从图1所示可知,处在操作系统与GUI之间的嵌入式数据库技术可以解决嵌入式产品对数据交换的要求。因此嵌入式数据库是整个移动计算和电子商务的核心和基础技术。
从长远的角度考虑,应用程序的开发已经转向将紧密耦合的、高效的n层计算技术与面向消息的、松散耦合的Web概念相结合的方向上,对于嵌入式数据库技术的开发也是如此。而Web概念的核心技术则是XML这种可扩展标记语言,而目前并没有与之兼容的嵌入式数据库产品。只有研制出与XML兼容的嵌入式数据库产品,才能跟上世界技术主流的变化,也为今后嵌入式技术面向世界主流趋势的发展提供条件。
数据的存储与索引是嵌入式数据库的核心技术,也是决定数据库存储效率的关键技术,一个快速、灵活、高效的数据存储和索引方法是数据库研发中最为基本又最为重要的环节之一,其质量的优劣直接决定了数据的存取速度和查询速度等主要技术指标;同时,存储与索引两者间又是相互依赖的,通过一对匹配的索引和存储技术间共同协调工作,才能高效地完成数据的存储与查询。
现有大型数据库系统的数据库索引和存储技术,如IBM的DB2,Microsoft的SQL Server等,采用复杂的多级索引和动态散列结构对数据进行处理,并采用并行分布式系统对数据资料进行管理,可在很大程度上提高数据的存取速度和效率,但必须建立在高速系统、大容量硬盘、内存及高速的并行机制基础上,受这些条件的限制,显然不能将这些成熟的数据存放与索引技术平滑地移植到像嵌入式这样的低性能、单一节点的设备所使用的数据库中。
此外,一般的数据库为了满足快速存储的需要,在初始化时住住格式化一块磁盘区域,并将其用于数据的存储,因而数据库尺寸是固定的,不会因为记录量的增加而让数据库尺寸也随之加大。这种固定方式适合在大多数的服务器级的数据库技术中使用,但对于嵌入式平台来说,由于受资源的局限,必须采用具有可伸缩性特点的数据库存储技术,从而有效节约存储空间。
目前关于数据库的基本索引方法有两种:顺序索引法和散列索引法。其中的顺序索引法是基于对值的一种排序方法,也是数据库系统中最早的索引模式之一;散列索引法则是基于将值平均分布到若干散列桶中的方法,一个值所属的散列桶由一个函数来决定,该函数称之为散列函数。
直接比较各种索引方法的优劣是不妥当的,每种技术都有各自最适合的数据库应用,但可以采用综合评价方法进行评价,综合评价因素包括访问类型、访问时间、插入时间、删除时间和空间开销等。
旧有的数据库数据索引技术是将除主索引之外的其他数据字段单独存放在文件中,这种方式在批处理大数据量的数据时有明显的优点,但同时损失了数据的灵活操作和快速查找功能。例如,在对数据库中某一列数据进行特定数据查找时,必须首先将这一列数据从数据块中分离、排序,然后才能执行查找操作,增加了对系统资源、执行时间的消耗,对于系统资源本不富裕的嵌入式系统来说,无疑是一个巨大的浪费,而且同时,数据的查找操作又是执行数据查询操作的基础,其速度性能指标直接影响到数据库的查询操作功能。
采取快速高效的索引方法是选取数据库索引算法的一个原则,但对于嵌入式数据来说,由于受资源的限制,不能采用速度快但对资源消耗太大的算法来实现数据库的索引功能;同时,考虑到嵌入式数据库的平台无关特性,对数据的存储需采用数据的原始方式,即二进制方式;再其次,由于嵌入式设备的数据信息大多数据量较小,可以对数据采用分散管理、集中查询的方式。
发明内容
综合以上几点原因,本发明的目的是设计一种嵌入式系统的数据存放及其查找组合方法,为嵌入式系统数据库(如SharkBase)的设计提供一个适合嵌入式平台特性的、对资源消耗少、高效、快速的新型数据索引技术,即全散列数据索引技术。
实现本发明目的的技术方案是这样的:一种嵌入式系统的数据存放及其查找组合方法,包括记录的存储过程和记录的查找组合过程,其特征在于:
所述记录的存储过程包括以下步骤:
A.以字段为单位,将每一条待存储记录拆分成1至N个字段,N为正整数;
B.将各个字段的数据分别通过哈希计算得到哈希结果值,再存放到数据文件中以各哈希结果值的哈希表和B+树为单位的各字段的数据索引系统中,在各字段数据中标记各字段的上下字段的文件物理位置;
所述记录的查找与组合过程包括以下步骤:
C.对待查找记录中的字段数据进行哈希计算得到哈希结果值,通过该哈希结果值,在对应数据索引系统的哈希表中找出该字段数据在数据文件中的实际物理地址;
D.在数据文件中找出该字段数据,并根据其所标出的上下字段的文件物理位置得到上下字段,将全部N字段数据组合成一条待查找记录。
所述步骤B、C中,是以一字段数据为哈希函数的输入,计算所述的哈希结果值,再以该哈希结果值索引找到字段所属的B+树。
所述步骤B中的B+树,是在计算得到的哈希结果值相同时,将哈希结果值冲突的字段数据在数据实际存储区中的位置指针存储在所述哈希表的项中并链接成链表,放在同一棵B+树的不同叶子上进行区分。
所述步骤B中,存放到各字段的数据索引系统中,进一步包括:
B1.对添加的新字段数据,先访问该字段数据索引系统中哈希表第一项的空闲列表,找到能容纳新字段的空闲数据块,将该空闲数据块的首地址填充入该记录的对应静态一维数组中,同时将该数据块地址从空闲列表中删除,表示该空闲地址已被占用;
在空闲列表中没有找到能容纳新字段的空闲数据块时,则将新字段数据存储在数据文件末尾,并将其地址填充入该记录的对应静态一维数组中;
B2.重复步骤B1的操作,直至记录的N个字段的存储地址全部填充入该记录的静态一维数组的N个项中;
B3.将记录的静态一维数组的各项值链接到各字段所属B+树的叶子节点下;
B4.依次从记录的静态一维数组的各项中取出各字段的前一字段和后一字段指针、指向同一棵B+树下一叶子位置的指针、各字段所占物理位置的总长度,和将用二进制表示的各字段的实际数据,填充到各字段数据格式中。
所述步骤C,进一步包括:
C1.利用哈希函数计算该字段数据的哈希值,并通过该计算的哈希值在该字段的哈希表中找出存放该字段数据的实际物理地址;
C2.通过该实际物理地址,在该字段哈希表的相应位置读取该字段的实际存储指针,再访问这个字段的数据格式,和从该字段的实际存储区读取字段数据信息,取出该字段上一字段和下一字段的位置信息;
C3.通过该字段的上一字段及下一字段的指针找到相应上下字段的相应字段数据;
C4.重复执行步骤C3,直到找到N个字段的字段数据。
所述步骤D,是从1至N个字段数据中提取出记录所需要的数据,将字段数据与字段对应地填充到记录中去,组合成一条待查找记录。
在本发明的全散列方法中,一条完整的数据记录是以其字段为单位散列存放在磁盘文件中的,在提取这条记录时,是从磁盘文件的不同位置读取记录的不同字段,并将其组合成完整的记录,这就是数据组合过程。
本发明嵌入式数据库数据存放及其查找组合方法的引入,使得嵌入式产品在访问其它电子设备的数据时可以畅通无阻,同时,由于其对于平台的无关性,可以自由地在嵌入式平台之间移植。本发明的方法不但可以解决现有嵌入式产品的数据交换问题,同时可以降低嵌入式产品的研发成本,又能提高嵌入式产品的互连互通特性、数据管理能力,为嵌入式技术的发展起到很好的推进作用。
本发明的全散列数据索引存储算法在很大程度上降低了数据库查询时对CPU的消耗,明显提高了在查询小数据量的数据记录时的速度和效率,降低了数据查询算法的时间复杂度,大大提高了嵌入式数据库查询的整体性能,在无论有多少条记录的情况下,可使数据库数据查询的性能标准保持在查询2000条记录时,每查询一条记录的时间不超过0.001秒(CPU主频PIII450Hz),这比仅用主键索引的数据索引算法在速度上提高了近20倍(在同样的机器配置下工作,主键索引算法在查找2000条记录时平均查询每条记录的时间为0.02秒),同时避免了因记录查找而带来的记录排序等不必要的系统开支。
本发明的方法能满足嵌入式系统平台的特性,是一种可兼容尽可能多的嵌入式平台、快速高效、可兼容各种数据格式、数据类型的数据存储、索引方式,以尽可能小的资源消耗换取尽可能快的数据访问、索引、查询速度。同时,优化原有的数据库记录集中存储时查询繁琐的缺点,根据嵌入式平台的特性,拆分数据,使得一条记录的数据以字段为单位完全散列存放,再以字段为单位组合成一条完整的记录,提高数据的查找和查询速度。
附图说明
图1是嵌入式数据库在操作系统中的位置示意图;
图2是本发明全散列存储方法的记录存储流程示意框图;
图3是本发明方法中记录在磁盘上的字段数据的格式结构示意图;
图4是将一条记录存储在磁盘上的操作过程示意图;
图5是图3、图4中N个字段数据索引系统的数据文件内部结构及其存储过程示意图;
图6是字段数据存储时首先寻找其存储位置的过程示意图;
图7是字段数据存储时链接叶节点的过程及数据文件结构示意图;
图8是字段数据存储时填充字段数据的过程及数据文件结构示意图;
图9是本发明的数据查找与组合总体流程框图。
具体实施方式
本发明采用的基本数据索引、存储技术是本技术领域成熟的哈希索引和B+树技术。
其中的哈希索引是数据库索引的主要技术手段,若要提高数据库查询速度,其必要条件之一就是选择一个好的哈希函数。
本发明针对嵌入式平台特点,由于不可能有象服务器级的数据记录,对哈希结果集(也称哈希表)的设定不必太大,可初始设定一共有C=137个哈希结果值,若用i表示一字符串中的某一个字符,则任意待查找的长度为A的字符串(string)的哈希值可选择以下的哈希函数进行计算:
上述哈希函数的哈希结果值为0至136中的一个值,%C为对C=137作取余操作。该哈希函数的优点在于:在哈希结果集不是很大的情况下,其哈希结果值可以在一定程度上均匀地分布在哈希结果集中,缩短了对查询结果在B+树内的二次查找时间,同时,由于是线性计算过程,可节约计算时间,减少数据计算开支,提高嵌入式特性系统平台的资源利用率,而且,这个函数可以兼容二进制格式的数据,满足了嵌入式数据库的平台无关特性。
如有两个或两个以上需要存储的字符串经过哈希函数的计算得到了同样的哈希值(这是很可能发生的情况,比如记录数目超过了预先设定的哈希结果集的个数),则我们将这些具有相同哈希结果即“冲突”的数据存放在同一棵B+树的不同叶子上来加以区分,并用指向同一棵树下一叶子位置的指针进行存放与查找,也即本发明采用B+树技术来处理冲突的哈希结果。
此外,本发明还采用了一种动态散列结构存储方式,当用户删除一条存在的记录时,并不马上释放这条记录所占用的磁盘空间,而是将它作为空闲磁盘空间并由哈希表回收成空闲列表,当用户添加新的记录时,数据库将首先访问该空闲列表,如果能够为这条新记录找到合适尺寸的空闲空间,则填充进该空闲列表中而不必开辟新的磁盘空间。这种存储方式可大大提高数据库的使用效率和数据存储速度。
查找方式是数据库查询的基本手段,本发明采用的嵌入式数据库记录查找方式是通过计算待查找数据的哈希结果值,得到数据记录所在B+树的位置,再通过访问B+树找出数据在数据库中的实际存储位置(磁盘空间),从而查找出这一数据。
下面结合附图进一步说明本发明的技术方案,包括由附图2至附图8所示的记录数据存储操作过程和由附图9所示的数据查找组合过程。
参见图2,将每一条数据记录(record)21以字段(或者称为“域”,字段划分的根据是数据类型及其字符串长度)为单位进行拆分,表示为图中的字段1、字段2、...、字段N,并将各个字段的信息分别通过上述哈希函数计算得到哈希结果值(哈希结果集中的某一个哈希结果值),再存放到对应的以哈希表和B+树为单位的数据索引系统22中,如字段1的信息经过哈希计算后,将字段1的信息存放在哈希表中的相应位置,...,字段N的信息经过哈希计算后,将字段N的信息存放在哈希表中的相应位置,
如此使得数据库可以对每一条记录的任何字段进行哈希索引。这种对每个字段分开索引的方式在查询上大大节约了对记录中的字段进行拆分以便取得相应值的字段所需要的系统开销。因为对一般主键索引方式来说,要查询记录的某一普通字段,必须将整条记录全部取出并根据字段进行拆分,取出相应的字段后进行判断,从而得出想要查询的记录。而本发明的全散列的数据存储方式,则可以直接对任一普通字段进行操作(进而获得整条记录),从而避免了将整条记录取出并进行字段拆分的工作,故能提高记录查询效率,节约CPU和内存资源,减少嵌入式设备的电量消耗。
建立以哈希表和B+树为单位的数据索引系统22,是通过在哈希表中建立存放字段在B+树的位置的指针和通过在B+树上建立存放字段在数据库物理位置的指针,最终将各字段数据存放到物理磁盘上。
由于各字段数据分散存放,为了使一条记录的任一字段能和这条记录的其他字段进行关联,在将这些字段存放到物理磁盘上的同时做成一条唯一的双向链表,使得每一条记录中的每一个字段都能找到其所属记录的上一字段和下一字段,以便在进行完对一字段的查找后能方便地取得其所属的整条记录,如果双向链表到达字段的开头或结尾,字段的相应指针设为0,用于标注这种位置。
图3所示为存放在物理磁盘上的每个字段数据的格式,自左至右依序为:指向同一棵B+树下一叶子位置的指针31、本字段所占物理位置的总长度32、以二进制方式存储的本字段的实际数据33、指向本记录与这个字段相邻的上一字段物理位置的指针34,和指向本记录与这个字段相邻的下一字段物理位置的指针35。
参见图4,图中示意出本发明将记录存放到磁盘上的过程。
步骤401,数据库将一条待存储的记录(record)分成1至N个字段;
步骤402,对1至N个字段分别进行分析,以每个字段数据为哈希函数的输入,利用前述的哈希函数分别计算求得哈希值,再以哈希值作为索引,找到各个字段所属的B+树,计算得出各字段在数据文件中将要存储的位置,并填充到数组(Address)中去;
步骤403,将计算得出的各字段在数据文件中将要存储的位置填充到数组Address中去,字段1在磁盘上的位置即数组Address[0],字段2在磁盘上的位置即数组Address[1],字段3在磁盘上的位置即数组Address[2],...,字段N在磁盘上的位置即数组Address[N-1];
步骤404,从各数组Address[]中取出数据,填充到待存储的各数据字段在磁盘上的相应位置处;
步骤405,同时在磁盘上为每一字段制作一字段数据信息(结构如图3所示),内容包括同一棵B+树下一叶子的位置指针、本字段所占的物理位置的总长度、本字段的实际数据、指向本记录与这个字段相邻的上一字段的物理位置指针和指向本记录与这个字段相邻的下一字段的物理位置指针,完成上述工作后,可依次从Address数组中取出任一字段的前一字段和后一字段的指针,并填充到该字段的物理位置中,
图4中406至411标记出磁盘中的数据文件内部结构及其存储过程,也即N个以哈希表和B+树为单位的数据索引系统。其中406、407标记出字段1的哈希表及实际存储区,408、409标记出字段2的哈希表及实际存储区,依次类推,410、411标记出字段N的哈希表及实际存储区。
以406、407标记的字段1的哈希表及实际存储区为例,通过计算字段1信息的哈希值,在该哈希值的哈希表中找出字段1的相应位置,并将这一字段的实际物理存储位置填充进去,和在其实际存储区,在相应位置填充字段1的数据信息,如图中空心箭头所示。
参见图5,图中示出的数据文件,是存储由N个字段构成的记录之前的结构,包括字段1的数据索引系统51、字段2的数据索引系统52、...、和字段N的数据索引系统53。每个数据索引系统又由对应字段的哈希表及数据实际存储区511、512、521、522、...、和531、532组成。
每个字段的哈希表中的第一项,如图中字段1数据索引系统51中的a(简化起见,在其余字段中略去该项),表示空闲列表,是一个将每个字段数据实际存储区中已经被用户删除的记录链接起来的链表。
哈希表中,除去第一项外,存储的实际上是哈希值相同的字段数据在数据实际存储区中的位置指针。如图中字段2的数据索引系统52中的b(简化起见,在其余字段中也略去该项),这些哈希值相同的字段数据被链成链表,作为同一棵B+树的叶子。
参见图6,字段数据存储时首先寻找各字段应该存储的位置。以字段1的数据索引系统61为例说明。
对于每个字段来说,应根据其字段数据的长度,首先在每个字段哈希表的空闲列表中找到一个恰好能容纳新字段的空闲数据块。例如字段1,先从哈希表611的第一项a1(也以B+树的方式存储)即空闲列表中,找出一个恰好能够容纳字段1的数据块(即空闲数据块中“字段长度”一项的值与新字段的长度相等),图中在空闲列表a1中找到链表下的第二个数据块a3恰好适合其存储(链表下的第一个数据块a2不适合其存储),则将该空闲数据块a 3的首地址记入一个静态一维数组Address[N]的第一项,即Address[0]中(用于记录字段1在数据文件中的实际存储位置),同时将该数据块从空闲列表a1中删除,原空闲数据块即变成有效数据块。
如果在空闲列表a1中没有找到可以存储字段1的数据块,则将字段1存储在记录文件的所有记录末尾,同时也将字段1的新地址填入数组Address[0]中。
依次类推,直到所有字段的存储地址都确定,即将数组Address[]全部填充完毕。
这时,记录的各字段并没有存储在数据文件中,现在只是找到了各字段所要存储的物理位置,并将这些位置存储在一维数组Address[]中。
参见图7,在将每个字段应该存储的位置填入数组Address[]的同时,还根据以字段数据作为哈希函数输入计算得到的哈希值作索引,找到各个字段所属的B+树,将数组Address[]中对应项的值链接到各同一棵B+树的叶子节点下。本步骤操作结束后的数据文件如图7中所示:a表示空闲列表,之间的箭头表示链接已经被删除的记录;b1表示哈希值相同的字段1数据在数据实际存储区中的位置指针,之间的前头表示将这些哈希值相同的字段1数据链成链表,作为一棵树的叶子,b2表示哈希值相同的字段2数据在数据实际存储区中的位置指针,之间的箭头表示将这些哈希值相同的字段2数据链成链表,作为另一棵树的叶子;字段1的数据索引系统中,新字段1数据被链接到B+树上;字段2的数据索引系统中,新字段2数据被链接到B+树上,在数据文件末尾,新字段数据尚未写入存储区,只产生了地址。
参见图8,执行依次从数组Address[]中取出各个字段的前一字段和后一字段的指针,并将每个字段数据填充到每个字段的物理位置中的步骤。
以字段2(即Address[1])为例,经过以上操作,字段2在磁盘上的位置,即Address[1],按图3所示格式记录存储在磁盘上。包括指向同一棵B+树的下一叶子位置的指针(填充成0,表示没有下一叶子)、字段2所占物理位置的总长度、以二进制方式存储的字段2的实际数据、指向字段2的上一字段1物理位置的指针,和指向字段2的下一字段3物理位置的指针。
填充完毕后的数据文件如图8中所示,与图7所示的区别在于,完成了填充字段数据的操作,图中C表示新存储在数据存储区中的字段记录。
至此完成一条记录的存储过程。
参见图9,是本发明的根据记录的任意字段查找并组成记录的流程,实际上是存储过程的逆过程。
如我们要查找第n个字段为key的记录。
步骤901,首先利用前述的哈希函数计算key的哈希值,并通过该计算的哈希值在第n个字段的哈希表中找出这一字段数据key的实际物理地址;
步骤902,通过这一实际物理地址在内部结构如图中所示的数据文件中找出这一字段,即在字段n的哈希表的相应位置读取字段n的实际存储指针,从而访问这个字段,再在字段n的实际存储区的相应位置读取字段信息,并取出该n字段上一字段n-1和下一字段n+1的位置信息;
步骤903,通过n字段尾部信息即字段n-1、n+1所描述的上下字段的指针找到相应的字段,即通过n-1字段指针依次查找出相应的字段数据,和通过n+1字段指针依次查找出相应的字段数据,并重复步骤902、903,直至查找出N个字段数据;
步骤904,从1至N个字段数据中提取出记录所需要的数据,将字段数据填充到记录中去,从而组合成一条记录返回给用户。
本发明的全散列式的数据存放及查找组合方法,非常适合处理嵌入式特定系统平台环境下的数据(数据少、数据量小、系统资源有限),有利于提高系统的数据查询速度和节约系统开支,从而在一定程度上节约了通常用电池进行供电的嵌入式系统的电池电量。本发明的索引方法为嵌入式系统平台的数据查询提供了一条便捷、高效的技术手段,同时也为推动嵌入式系统的发展做出贡献。
Claims (10)
1.一种嵌入式系统的数据存放及其查找组合方法,包括记录的存储过程和记录的查找组合过程,其特征在于:
所述记录的存储过程包括以下步骤:
A.以字段为单位,将每一条待存储记录拆分成1至N个字段,N为正整数;
B.将各个字段的数据分别通过哈希计算得到哈希结果值,再存放到数据文件中以各哈希结果值的哈希表和B+树为单位的各字段的数据索引系统中,在各字段数据中标记各字段的上下字段的文件物理位置;
所述记录的查找与组合过程包括以下步骤:
C.对待查找记录中的字段数据进行哈希计算得到哈希结果值,通过该哈希结果值,在对应数据索引系统的哈希表中找出该字段数据在数据文件中的实际物理地址;
D.在数据文件中找出该字段数据,并根据其所标出的上下字段的文件物理位置得到上下字段,将全部N字段数据组合成一条待查找记录。
2.根据权利要求1所述的一种嵌入式系统的数据存放及其查找组合方法,其特征在于:所述步骤B、C中,是以一字段数据为哈希函数的输入,计算所述的哈希结果值,再以该哈希结果值索引找到字段所属的B+树。
3.根据权利要求2所述的一种嵌入式系统的数据存放及其查找组合方法,其特征在于所述的哈希函数为:
string是长度为A的字符串,i是字符串中的某一个字符,%C是对预设的哈希结果集的大小C作取余操作。
4.根据权利要求3所述的一种嵌入式系统的数据存放及其查找组合方法,其特征在于:所述哈希结果集的大小C为137,所述的哈希函数的哈希结果值为0至136中的一个值。
5.根据权利要求1所述的一种嵌入式系统的数据存放及其查找组合方法,其特征在于:所述步骤B中的B+树,是在计算得到的哈希结果值相同时,将哈希结果值冲突的字段数据在数据实际存储区中的位置指针存储在所述哈希表的项中并链接成链表,放在同一棵B+树的不同叶子上进行区分。
6.根据权利要求1所述的一种嵌入式系统的数据存放及其查找组合方法,其特征在于所述步骤B中,存放到各字段的数据索引系统中,进一步包括:
B1.对添加的新字段数据,先访问该字段数据索引系统中哈希表第一项的空闲列表,找到能容纳新字段的空闲数据块,将该空闲数据块的首地址填充入该记录的对应静态一维数组中,同时将该数据块地址从空闲列表中删除,表示该空闲地址已被占用;
在空闲列表中没有找到能容纳新字段的空闲数据块时,则将新字段数据存储在数据文件末尾,并将其地址填充入该记录的对应静态一维数组中;
B2.重复步骤B1的操作,直至记录的N个字段的存储地址全部填充入该记录的静态一维数组的N个项中;
B3.将记录的静态一维数组的各项值链接到各字段所属B+树的叶子节点下;
B4.依次从记录的静态一维数组的各项中取出各字段的前一字段和后一字段指针、指向同一棵B+树下一叶子位置的指针、各字段所占物理位置的总长度,和将用二进制表示的各字段的实际数据,填充到各字段数据格式中。
7.根据权利要求6所述的一种嵌入式系统的数据存放及其查找组合方法,其特征在于所述步骤B1中,在空闲数据块中字段长度一项的值与新字段的长度相等时,表示找到能容纳新字段的空闲数据块。
8.根据权利要求6所述的一种嵌入式系统的数据存放及其查找组合方法,其特征在于所述步骤B1中,所述的空闲列表是由被删除的字段数据的实际存储区链接起来,和被哈希表回收的;所述的静态一维数组的长度为N,与所述N个字段对应。
9.根据权利要求1所述的一种嵌入式系统的数据存放及其查找组合方法,其特征在于所述步骤C,进一步包括:
C1.利用哈希函数计算该字段数据的哈希值,并通过该计算的哈希值在该字段的哈希表中找出存放该字段数据的实际物理地址;
C2.通过该实际物理地址,在该字段哈希表的相应位置读取该字段的实际存储指针,再访问这个字段的数据格式,和从该字段的实际存储区读取字段数据信息,取出该字段上一字段和下一字段的位置信息;
C3.通过该字段的上一字段及下一字段的指针找到相应上下字段的相应字段数据;
C4.重复执行步骤C3,直到找到N个字段的字段数据。
10.根据权利要求1所述的一种嵌入式系统的数据存放及其查找组合方法,其特征在于:所述步骤D,是从1至N个字段数据中提取出记录所需要的数据,将字段数据与字段对应地填充到记录中去,组合成一条待查找记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02121569 CN1203433C (zh) | 2002-06-26 | 2002-06-26 | 嵌入式系统的数据存放及其查找组合方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02121569 CN1203433C (zh) | 2002-06-26 | 2002-06-26 | 嵌入式系统的数据存放及其查找组合方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1464436A CN1464436A (zh) | 2003-12-31 |
CN1203433C true CN1203433C (zh) | 2005-05-25 |
Family
ID=29743016
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 02121569 Expired - Lifetime CN1203433C (zh) | 2002-06-26 | 2002-06-26 | 嵌入式系统的数据存放及其查找组合方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1203433C (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5116151B2 (ja) | 2004-11-05 | 2013-01-09 | ドロボ, インコーポレイテッド | 仮想ホットスペアを用いて動的に拡張可能かつ縮小可能な故障許容格納システム |
CN100357951C (zh) * | 2005-10-14 | 2007-12-26 | 华为技术有限公司 | 一种基于用户业务数据配置用户界面的方法及系统 |
CN100357952C (zh) * | 2005-11-29 | 2007-12-26 | 华为技术有限公司 | 一种二进制数据的访问方法 |
CN100561482C (zh) * | 2008-01-29 | 2009-11-18 | 北京北方烽火科技有限公司 | 一种嵌入式系统数据库的实现方法 |
CN101727502A (zh) * | 2010-01-25 | 2010-06-09 | 中兴通讯股份有限公司 | 一种数据查询方法及装置、系统 |
CN103164490B (zh) * | 2011-12-19 | 2016-02-17 | 北京新媒传信科技有限公司 | 一种不固定长度数据的高效存储实现方法和装置 |
CN102646118B (zh) * | 2012-02-20 | 2014-11-05 | 浪潮(北京)电子信息产业有限公司 | 数据索引方法和装置 |
US9165010B2 (en) * | 2012-04-30 | 2015-10-20 | Sap Se | Logless atomic data movement |
CN102867037B (zh) * | 2012-08-31 | 2016-09-28 | 浪潮电子信息产业股份有限公司 | 一种基于位管理的分布式文件系统节点编号分配方法 |
US9177026B2 (en) * | 2012-09-27 | 2015-11-03 | LogicBlox, Inc. | Leapfrog tree-join |
CN103778180A (zh) * | 2013-11-16 | 2014-05-07 | 大连创达技术交易市场有限公司 | 一种基于Hash的字符串存储方法 |
CN103605788A (zh) * | 2013-12-03 | 2014-02-26 | 上海浦东物流云计算有限公司 | 数据处理方法及系统、客户端及存储引擎 |
CN104252544A (zh) * | 2014-09-30 | 2014-12-31 | 北京华智凯科技有限公司 | 一种大数据挖掘方法及装置 |
CN106156178A (zh) * | 2015-04-17 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 一种数据处理方法和设备 |
CN106549917A (zh) * | 2015-09-21 | 2017-03-29 | 中兴通讯股份有限公司 | 不同接口协议报文转化处理的方法和装置 |
CN107515901B (zh) * | 2017-07-24 | 2020-12-04 | 中国科学院信息工程研究所 | 一种链式日志存储结构及其哈希索引结构、数据操作方法及服务器、介质 |
CN107729577B (zh) * | 2017-11-29 | 2020-06-19 | 厦门市美亚柏科信息股份有限公司 | 一种基于多维哈希表的数据查找方法、终端设备及存储介质 |
CN110109914B (zh) * | 2018-01-16 | 2024-08-23 | 恒为科技(上海)股份有限公司 | 一种应用驱动的数据存储与索引方法 |
CN109522323B (zh) * | 2018-08-28 | 2020-04-24 | 湖南大唐先一科技有限公司 | 一种从海量数据中快速检索变化数据段的方法及系统 |
CN109684325A (zh) * | 2018-11-07 | 2019-04-26 | 天津大学 | 一种高效的rdf数据存储查询系统 |
CN111224831B (zh) * | 2018-11-26 | 2022-03-29 | 中国电信股份有限公司 | 用于生成话单的方法和系统 |
CN110134547B (zh) * | 2019-04-28 | 2023-08-18 | 平安科技(深圳)有限公司 | 一种基于中间件的重复数据删除方法和相关装置 |
CN112445790B (zh) * | 2019-08-29 | 2024-03-01 | 北京沃东天骏信息技术有限公司 | 一种报表数据存储方法、装置、设备及介质 |
CN116680279A (zh) * | 2023-08-03 | 2023-09-01 | 北京冠群信息技术股份有限公司 | 基于哈希索引的数据处理方法、系统、装置和计算机可读介质 |
-
2002
- 2002-06-26 CN CN 02121569 patent/CN1203433C/zh not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
CN1464436A (zh) | 2003-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1203433C (zh) | 嵌入式系统的数据存放及其查找组合方法 | |
Bender et al. | Cache-oblivious B-trees | |
CN102033954B (zh) | 关系数据库中可扩展标记语言文档全文检索查询索引方法 | |
US9805079B2 (en) | Executing constant time relational queries against structured and semi-structured data | |
US7558802B2 (en) | Information retrieving system | |
CN101031907B (zh) | 索引处理 | |
JP4653106B2 (ja) | タイプ・パス索引付け | |
CN1955958A (zh) | 一种基于目录树的分类数据存储及分类目录查询方法 | |
CN1713179A (zh) | 在对象模型中的影响分析 | |
CN102426582B (zh) | 数据操作管理装置和数据操作管理方法 | |
CN1492362A (zh) | 一种嵌入式数据库的数据备份和恢复方法 | |
CN1255215A (zh) | 在信息处理系统中存储和操作数据的系统和方法 | |
CN101727502A (zh) | 一种数据查询方法及装置、系统 | |
CN1858737A (zh) | 一种数据搜索的方法和系统 | |
US8880553B2 (en) | Redistribute native XML index key shipping | |
US11386063B2 (en) | Data edge platform for improved storage and analytics | |
CN1949220A (zh) | 网络社区动态目录的构建系统和方法 | |
CN108549690A (zh) | 基于空间距离约束的空间关键字查询方法及系统 | |
CN106484815B (zh) | 一种基于海量数据类sql检索场景的自动识别优化方法 | |
CN1845093A (zh) | 一种属性可扩展的对象文件系统 | |
Arroyuelo et al. | Space-efficient construction of Lempel–Ziv compressed text indexes | |
CN1900935A (zh) | 访问扇区数据的方法和系统 | |
CN103064841A (zh) | 检索装置和检索方法 | |
Xu et al. | Enhancing HDFS with a full-text search system for massive small files | |
CN113704248B (zh) | 一种基于外置索引的区块链查询优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
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 | ||
CX01 | Expiry of patent term |
Granted publication date: 20050525 |
|
CX01 | Expiry of patent term |