一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

应用于数据库存储的文件数据存储读取方法及装置与流程

2022-04-27 13:05:20 来源:中国专利 TAG:


1.本发明涉及数据库存储技术领域,具体的涉及应用于数据库存储的文件数据存储读取方法及装置。


背景技术:

2.kv数据库是指key-value数据库,是一种以键值对存储数据的一种数据库。而为了提高数据库的查询速度,需要针对数据库建立数据库索引,针对kv数据库比较常见的三种数据库索引的数据结构:哈希表、有序数组和搜索树。
3.哈希表里面存储的是key-value键值对。利用哈希表来存储索引的话,得先利用哈希函数把key换算成数组中对应的一个index位置,然后把value放在这个位置,如果多个key换算后得到了相同的index,那么就在这里追加一条链表,存储哈希值相同的key-value对象。如果给你一个指定的key让你查询对应的value,需要先根据哈希函数换算数组的index值,如果该位置有多个值,那么遍历链表即可。哈希表的缺点很明显,由于哈希表是无序的,所以哈希索引做区间查询的速度是很慢的。
4.有序数组在等值查询和范围查询场景中的性能就都非常优秀。key-value数组就是按照顺序保存的。这时候如果你要查key对应的value,用二分法就可以快速得到,这个时间复杂度是o(log(n))。采用二分法虽然能大大的提升查询的效率,但是o(log(n))的时间复杂度对于数据库的查询来说效率还有待提升,而且key-value数组是有序存储,在需要更新数据的时候就麻烦了,往中间插入一条记录还必须得移动后面所有的记录,成本太高。
5.搜索树,树是一种数据结构,它是由n(n》=0)个有限节点组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。搜索树查询一般采用二分法,时间复杂度是o(log(n))。
6.有鉴于此,本发明所要解决的技术问题是:如何提升kv数据库的查询效率,甚至于kv数据库查询的时间复杂度能够达到o(1),o(1)表示一次操作即可直接取得目标元素。


技术实现要素:

7.本发明为了解决上述技术问题,提出了应用于数据库存储的文件数据存储读取方法及装置,所述应用于数据库存储的文件数据存储方法得到了一种新的文件格式,可以通过hash索引,时间复杂度基本能够达到o(1),具体技术方案如下:
8.应用于数据库存储的文件数据存储读取方法,包括文件数据存储,所述文件数据存储包括:
9.将key-value数据写到文件的数据区,记录在数据区的偏移和大小s[offset size];
[0010]
计算key-value数据中key的哈希值hash(key),更新位图bitmap中哈希值hash(key)对应的第hashid位的bit值;
[0011]
所述hashid,key,s[offset size]作为key-value数据写入时的哈希索引记录,并
将所述哈希索引记录写入在文件中。
[0012]
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法中所述将所述哈希索引记录记录在文件中包括:
[0013]
将哈希索引记录按hashid排序,将所有hashid的偏移和大小以定长的方式写入文件的hash区,记录hash区的偏移和大小h[offset size];
[0014]
将哈希索引记录的bitmap进行序列化,作为bitmap区写入文件,记录bitmap区的偏移和大小b[offset size];
[0015]
将所述数据区的偏移和大小s[offset size]、hash区的偏移和大小h[offset size]、bitmap区的偏移和大小b[offset size]存储作为文件的注脚区。
[0016]
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法中,所述在将哈希索引记录按hashid排序之前还包括:
[0017]
根据所述哈希索引记录,将相同hashid的key和与所述key对应的在数据区中的偏移和大小s[offset size]打包成一个冲突区块,依次写入文件的冲突区;
[0018]
保存所述相同hashid的key的冲突区块在冲突区的偏移和大小c[offset size],回写所述c[offset size],作为相同hashid的key的唯一关联偏移和大小。
[0019]
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法,包括:所述将key-value数据写到文件的数据区的过程中,计算得到key-value数据的校验码,将校验码存储至文件的校验区,并记录各个key的校验码在校验区中的偏移和大小j[offset size];将所述校验区中的偏移和大小j[offset size]保存至文件的注脚区。
[0020]
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法,包括文件数据读取,所述文件数据读取包括文件打开,所述文件打开过程包括:
[0021]
读取所述文件的注脚区中的数据区的偏移和大小s[offset size]、校验区中的偏移和大小j[offset size]、hash区的偏移和大小h[offset size]以及bitmap区的偏移和大小b[offset size];
[0022]
根据所述bitmap区的偏移和大小b[offset size],将bitmap区的数据进行反序列化,存放至内存;
[0023]
根据所述hash区的偏移和大小h[offset size],将所有的hashid,对应的offset size,加载至内存。
[0024]
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法中,所述文件数据读取包括数据读取过程,所述数据读取过程包括:
[0025]
根据查询key进行哈希计算得到查询key的hash(key),进一步得到查询key的hashid=hash(key);
[0026]
根据查询key的hashid在bitmap区中查看是否存在该key,若不存在,直接返回空结果,查询结束,若存在则进入下一步;
[0027]
根据查询key的hashid在bitmap区中的排序rank,计算得到hash区记录的偏移和大小h[offset size];
[0028]
根据所述hash区的偏移和大小h[offset size],在数据区或者冲突区读取所述查询key所对应的查询数据。
[0029]
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法
中,所述根据所述hash区的偏移和大小h[offset size],在数据区或者冲突区读取所述查询key所对应的查询数据包括:
[0030]
根据所述hash区的偏移和大小h[offset size]判断是否落在冲突区;
[0031]
若判断为没有落在冲突区,直接从数据区按照偏移和大小s[offset size]读取数据,若判断为落在冲突区,则根据对应的冲突区的偏移和大小c[offset size]确定冲突区块,在冲突区块中通过二分查找,置换所述查询key在数据区的偏移和大小s[offset size],从数据区读取数据。
[0032]
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法中,所述根据查询key的hashid在bitmap区中的排序rank,计算得到hash区记录的偏移和大小h[offset size]包括:
[0033]
所述hash区在写入每个所述h[offset size]时的定长为width,且为有序写入,则通过rank*width计算得到所述查询key在hash区记录的偏移和大小h[offset size]。
[0034]
本发明同时提供应用于数据库存储的文件数据存储读取装置,包括文件数据存储模块,所述文件数据存储模块包括:
[0035]
数据写入单元,将key-value数据写到文件的数据区,记录在数据区的偏移和大小s[offset size];
[0036]
哈希计算单元,计算key-value数据中key的哈希值hash(key);
[0037]
bitmap单元,更新位图bitmap中哈希值hash(key)对应的第hashid位的bit值;
[0038]
及哈希索引记录单元,将key-value数据写入时的所述hashid,key,s[offset size]作为哈希索引记录,并写入在文件中。
[0039]
本发明同时还提供一种存储介质,存储有计算机可执行程序,其特征在于,所述计算机可执行程序被执行时,实现如上述任意一项所述的应用于数据库存储的文件数据存储读取方法。
[0040]
与现有技术相比,本发明的有益效果:
[0041]
本发明的应用于数据库存储的文件数据存储读取方法在进行数据存储时,根据key-value数据中key的哈希值hash(key)对应更新位图bitmap对应位数上的bit值,并作为key-value数据写入时的哈希索引记录;这样,在进行key查询时,通过bitmap区进行数据存在性判断,如果数据不存在,只需要一次比较的计算开销就能返回,如果数据存在,则根据哈希索引记录直接索引至数据取获取key-value数据。
[0042]
因此,本发明的应用于数据库存储的文件数据存储读取方法在进行数据存储时采用新的文件格式通过hash索引,在进行key值检索时时间复杂度可以达到o(1),极大的提升了key-value数据的检索效率。
[0043]
本发明所述的应用于数据库存储的文件数据存储读取方法在进行key-value数据存储时,形成一种新的文件数据结构,具体的文件数据结构的各个分区含义和作用:
[0044]
数据区:存储压缩后的key-value数据;
[0045]
校验区:使用循环校验码对数据区做数据校验;
[0046]
冲突区:具有相同哈希值的key及其在数据区的偏移和数据大小会被放在冲突区;
[0047]
hash区:定长存放key所在的数据区或者冲突区的偏移和大小;
[0048]
bitmap区:使用bitmap存储key对应的哈希所在的bit位是否有值;
[0049]
注脚区:定长存储数据区,校验区,冲突区,hash区,bitmap区的偏移和大小。
附图说明:
[0050]
图1本发明实施例的应用于数据库存储的文件数据存储读取方法的流程图一;
[0051]
图2本发明实施例的应用于数据库存储的文件数据存储读取方法中bitmap进行hashid位bit标记示意图;
[0052]
图3本发明实施例的应用于数据库存储的文件数据存储读取方法针对相同的hashid的处理示意图;
[0053]
图4本发明实施例的应用于数据库存储的文件数据存储读取方法针对相同的hashid的处理流程图;
[0054]
图5本发明实施例的应用于数据库存储的文件数据存储读取方法适用的文件数据结构;
[0055]
图6本发明实施例的应用于数据库存储的文件数据存储读取方法的流程图二;
[0056]
图7本发明实施例的应用于数据库存储的文件数据存储读取方法的流程图三。
具体实施方式
[0057]
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。
[0058]
因此,以下对本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的部分实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0059]
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征和技术方案可以相互组合。
[0060]
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0061]
在本发明的描述中,需要说明的是,术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,或者是本领域技术人员惯常理解的方位或位置关系,这类术语仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0062]
参见图1及图2所示,本实施例提供了应用于数据库存储的文件数据存储读取方法,包括文件数据存储,所述文件数据存储包括:
[0063]
将key-value数据写到文件的数据区,记录在数据区的偏移和大小s[offset size];
[0064]
计算key-value数据中key的哈希值hash(key),更新位图bitmap中哈希值hash(key)对应的第hashid位的bit值;
[0065]
所述hashid,key,s[offset size]作为key-value数据写入时的哈希索引记录,并
将所述哈希索引记录写入在文件中。
[0066]
本实施例的hash(key),其中key表示元素的键值,则hash(key)的值表示经过散列函数计算得到的散列值。
[0067]
所谓的位图bit-map就是用一个bit位来标记某个元素对应的value,而key即是该元素。由于采用了bit为单位来存储数据,因此在存储空间方面,可以大大节省。
[0068]
本实施例的应用于数据库存储的文件数据存储读取方法在进行数据存储时,根据key-value数据中key的哈希值hash(key)对应更新位图bitmap对应位数上的bit值,并作为key-value数据写入时的哈希索引记录;这样,在进行key查询时,通过bitmap区进行数据存在性判断,如果数据不存在,只需要一次比较的计算开销就能返回,如果数据存在,则根据哈希索引记录直接索引至数据取获取key-value数据。因此,本实施例的应用于数据库存储的文件数据存储读取方法在进行数据存储时采用新的文件格式通过hash索引,在进行key值检索时时间复杂度可以达到o(1),极大的提升了key-value数据的检索效率。
[0069]
作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存储读取方法中,所述将所述哈希索引记录记录在文件中包括:
[0070]
将哈希索引记录按hashid排序,将所有hashid的偏移和大小以定长的方式写入文件的hash区,记录hash区的偏移和大小h[offset size];
[0071]
将哈希索引记录的bitmap进行序列化,作为bitmap区写入文件,记录bitmap区的偏移和大小b[offset size];
[0072]
将所述数据区的偏移和大小s[offset size]、hash区的偏移和大小h[offset size]、bitmap区的偏移和大小b[offset size]存储作为文件的注脚区。
[0073]
本实施例的按hashid排序后,将所述数据区的偏移和大小s[offset size]、hash区的偏移和大小h[offset size]、bitmap区的偏移和大小b[offset size]存储作为文件的注脚区,在进行查询key值时,若bitmap区进行数据存在性判断为key值,则可以根据所述数据区的偏移和大小s[offset size]、hash区的偏移和大小h[offset size]、bitmap区的偏移和大小b[offset size]逐步索引至数据区获取key-value数据。
[0074]
理想中的一个散列函数,希望达到如果key1≠key2,那hash(key1)≠hash(key2)这种效果,然而在真实的情况下,要想找到一个不同的key对应的散列值都不一样的散列函数,几乎是不可能的。事实上,再好的散列函数都无法避免散列冲突。对于散列函数而言,无论设置的存储区域(n)有多大,当需要存储的数据大于n时,那么必然会存在哈希值相同的情况。这就是所谓的散列冲突。
[0075]
由于本实施例针对key-value数据进行哈希计算,原理上来说,在假定hash算法均匀的情况下,key-value数据进行哈希计算得到的哈希值hash(key)相互不同,但是如果真的存在有两个或者多个key-value数据进行哈希计算得到相同的哈希值hash(key),进而会出现一组相同的hashid,对于在进行hashid排序时产生影响,因此,参见图3及图4所示,作为本实施例的可选实施方式,本实施例在将哈希索引记录按hashid排序之前还包括:
[0076]
根据所述哈希索引记录,将相同hashid的key和与所述key对应的在数据区中的偏移和大小s[offset size]打包成一个冲突区块,依次写入文件的冲突区;
[0077]
保存所述相同hashid的key的冲突区块在冲突区的偏移和大小c[offset size],回写所述c[offset size],作为相同hashid的key的唯一关联偏移和大小。
[0078]
本实施例针对通过哈希计算得到相同哈希值的key-value数据,将其打包成一个冲突区块,将冲突区块存储在文件的冲突区,将整个冲突区块共用同一个hashid进行排序,并将冲突区块在文件冲突区存储的偏析和大小c[offset size]作为hashid对应的key-value数据存储的偏移和大小。
[0079]
本实施例的应用于数据库存储的文件数据存储读取方法,进行文件数据存储时,在假定哈希算法均匀的情况下,大比例的数据不会落到冲突区,未落到冲突区的数据,只需要一次hash区的io,获取数据的hash区的偏移和大小h[offset size],一次数据区的io,通过数据区的偏移和大小s[offset size]获取数据。即使查询的key落到冲突区,对同一冲突区的key进行二分查找,也只需要极小的io成本,整体的平均查询次为常数级别。
[0080]
参见图4所示,作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存储读取方法,所述将key-value数据写到文件的数据区的过程中,计算得到key-value数据的校验码,将校验码存储至文件的校验区,并记录各个key的校验码在校验区中的偏移和大小j[offset size];将所述校验区中的偏移和大小j[offset size]保存至文件的注脚区。
[0081]
本实施例的校验区用于在打开文件时针对数据区进行数据校验。本实施例的注脚区可添加自定义的数据,作为读取时的文件格式校验,整个注脚区为固定大小。
[0082]
综上可知,本实施例所述的应用于数据库存储的文件数据存储读取方法在进行key-value数据存储时,形成一种新的文件数据结构,参见图5所示,具体的文件数据结构的各个分区含义和作用:
[0083]
数据区:存储压缩后的key-value数据;
[0084]
校验区:使用循环校验码对数据区做数据校验;
[0085]
冲突区:具有相同哈希值的key及其在数据区的偏移和数据大小会被放在冲突区;
[0086]
hash区:定长存放key所在的数据区或者冲突区的偏移和大小;
[0087]
bitmap区:使用bitmap存储key对应的哈希所在的bit位是否有值;
[0088]
注脚区:定长存储数据区,校验区,冲突区,hash区,bitmap区的偏移和大小。
[0089]
与此同时,本实施例所述的应用于数据库存储的文件数据存储读取方法,包括文件数据读取,所述文件数据读取包括文件打开,所述文件打开过程包括:
[0090]
打开文件,按照固定大小读取注脚区内容,对注脚区做文件格式校验;
[0091]
读取所述文件的注脚区中的数据区的偏移和大小s[offset size]、校验区中的偏移和大小j[offset size]、hash区的偏移和大小h[offset size]以及bitmap区的偏移和大小b[offset size];
[0092]
根据所述bitmap区的偏移和大小b[offset size],将bitmap区的数据进行反序列化,存放至内存;
[0093]
根据所述hash区的偏移和大小h[offset size],将所有的hashid,对应的offset size,加载至内存。
[0094]
进一步地,参见图6及图7所示,本实施例所述的应用于数据库存储的文件数据存储读取方法,所述文件数据读取包括数据读取过程,所述数据读取过程包括:
[0095]
根据查询key进行哈希计算得到查询key的hash(key),进一步得到查询key的hashid=hash(key);
[0096]
根据查询key的hashid在bitmap区中查看是否存在该key,若不存在,直接返回空结果,查询结束,若存在则进入下一步;
[0097]
根据查询key的hashid在bitmap区中的排序rank,计算得到hash区记录的偏移和大小h[offset size];
[0098]
根据所述hash区的偏移和大小h[offset size],在数据区或者冲突区读取所述查询key所对应的查询数据。
[0099]
进一步地,本实施例所述的应用于数据库存储的文件数据存储读取方法,所述根据所述hash区的偏移和大小h[offset size],在数据区或者冲突区读取所述查询key所对应的查询数据包括:
[0100]
根据所述hash区的偏移和大小h[offset size]判断是否落在冲突区;
[0101]
若判断为没有落在冲突区,直接从数据区按照偏移和大小s[offset size]读取数据,若判断为落在冲突区,则根据对应的冲突区的偏移和大小c[offset size]确定冲突区块,在冲突区块中通过二分查找,置换所述查询key在数据区的偏移和大小s[offset size],从数据区读取数据。
[0102]
作为本实施例的可选实施方式,参见图7所示,本实施例所述的应用于数据库存储的文件数据存储读取方法,所述根据查询key的hashid在bitmap区中的排序rank,计算得到hash区记录的偏移和大小h[offset size]包括:
[0103]
所述hash区在写入每个所述h[offset size]时的定长为width,且为有序写入,则通过rank*width计算得到所述查询key在hash区记录的偏移和大小h[offset size]。
[0104]
作为本实施例的可选实施方式,所述数据校验区可以采用多种不的校验算法;hsah算法可以选用不同的注脚区的特定数字可以选取不同的数值;注脚区的各个区的offset size信息可以单独存储在meta区,注脚区只存储meta区的offset size。
[0105]
本实施例同时提供一种应用于数据库存储的文件数据存储读取装置,包括文件数据存储模块,所述文件数据存储模块包括:
[0106]
数据写入单元,将key-value数据写到文件的数据区,记录在数据区的偏移和大小s[offset size];
[0107]
哈希计算单元,计算key-value数据中key的哈希值hash(key);
[0108]
bitmap单元,更新位图bitmap中哈希值hash(key)对应的第hashid位的bit值;
[0109]
及哈希索引记录单元,将key-value数据写入时的所述hashid,key,s[offset size]作为哈希索引记录,并写入在文件中。
[0110]
本实施例的应用于数据库存储的文件数据存储读取装置,文件数据存储模块在进行数据存储时,根据key-value数据中key的哈希值hash(key)对应更新位图bitmap对应位数上的bit值,并作为key-value数据写入时的哈希索引记录;这样,在进行key查询时,通过bitmap区进行数据存在性判断,如果数据不存在,只需要一次比较的计算开销就能返回,如果数据存在,则根据哈希索引记录直接索引至数据取获取key-value数据。因此,本实施例的应用于数据库存储的文件数据存储读取装置在进行数据存储时采用新的文件格式通过hash索引,在进行key值检索时时间复杂度可以达到o(1),极大的提升了key-value数据的检索效率。
[0111]
作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存
储读取装置中,所述哈希索引记录单元将所述哈希索引记录记录在文件中包括:
[0112]
哈希索引记录单元将哈希索引记录按hashid排序,将所有hashid的偏移和大小以定长的方式写入文件的hash区,记录hash区的偏移和大小h[offset size];
[0113]
哈希索引记录单元将哈希索引记录的bitmap进行序列化,作为bitmap区写入文件,记录bitmap区的偏移和大小b[offset size];
[0114]
哈希索引记录单元将所述数据区的偏移和大小s[offset size]、hash区的偏移和大小h[offset size]、bitmap区的偏移和大小b[offset size]存储作为文件的注脚区。
[0115]
本实施例的哈希索引记录单元按hashid排序后,将所述数据区的偏移和大小s[offset size]、hash区的偏移和大小h[offset size]、bitmap区的偏移和大小b[offset size]存储作为文件的注脚区,在进行查询key值时,若bitmap区进行数据存在性判断为key值,则可以根据所述数据区的偏移和大小s[offset size]、hash区的偏移和大小h[offset size]、bitmap区的偏移和大小b[offset size]逐步索引至数据区获取key-value数据。
[0116]
由于本实施例针对key-value数据进行哈希计算,原理上来说,在假定hash算法均匀的情况下,key-value数据进行哈希计算得到的哈希值hash(key)相互不同,但是如果真的存在有两个或者多个key-value数据进行哈希计算得到相同的哈希值hash(key),进而会出现一组相同的hashid,对于在进行hashid排序时产生影响,因此,作为本实施例的可选实施方式,本实施例的应用于数据库存储的文件数据存储读取装置还包括:
[0117]
哈希冲突处理单元,根据所述哈希索引记录,将相同hashid的key和与所述key对应的在数据区中的偏移和大小s[offset size]打包成一个冲突区块,依次写入文件的冲突区;
[0118]
保存所述相同hashid的key的冲突区块在冲突区的偏移和大小c[offset size],回写所述c[offset size],作为相同hashid的key的唯一关联偏移和大小。
[0119]
本实施例的哈希冲突处理单元针对通过哈希计算得到相同哈希值的key-value数据,将其打包成一个冲突区块,将冲突区块存储在文件的冲突区,将整个冲突区块共用同一个hashid进行排序,并将冲突区块在文件冲突区存储的偏析和大小c[offset size]作为hashid对应的key-value数据存储的偏移和大小。
[0120]
本实施例的应用于数据库存储的文件数据存储读取装置,进行文件数据存储时,在假定哈希算法均匀的情况下,大比例的数据不会落到冲突区,未落到冲突区的数据,只需要一次hash区的io,获取数据的hash区的偏移和大小h[offset size],一次数据区的io,通过数据区的偏移和大小s[offset size]获取数据。即使查询的key落到冲突区,对同一冲突区的key进行二分查找,也只需要极小的io成本,整体的平均查询次为常数级别。
[0121]
作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存储读取装置包括校验单元,所述将key-value数据写到文件的数据区的过程中,所述校验单元计算得到key-value数据的校验码,将校验码存储至文件的校验区,并记录各个key的校验码在校验区中的偏移和大小j[offset size];将所述校验区中的偏移和大小j[offset size]保存至文件的注脚区。
[0122]
本实施例的校验区用于在打开文件时针对数据区进行数据校验。本实施例的注脚区可添加自定义的数据,作为读取时的文件格式校验,整个注脚区为固定大小。
[0123]
综上可知,本实施例所述的应用于数据库存储的文件数据存储读取装置在进行
key-value数据存储时,形成一种新的文件数据结构,具体的文件数据结构的各个分区含义和作用:
[0124]
数据区:存储压缩后的key-value数据;
[0125]
校验区:使用循环校验码对数据区做数据校验;
[0126]
冲突区:具有相同哈希值的key及其在数据区的偏移和数据大小会被放在冲突区;
[0127]
hash区:定长存放key所在的数据区或者冲突区的偏移和大小;
[0128]
bitmap区:使用bitmap存储key对应的哈希所在的bit位是否有值;
[0129]
注脚区:定长存储数据区,校验区,冲突区,hash区,bitmap区的偏移和大小。
[0130]
与此同时,本实施例所述的应用于数据库存储的文件数据存储读取装置,包括文件数据读取模块,所述文件数据读取模块包括文化打开单元,所述文件加载单元:
[0131]
打开文件,按照固定大小读取注脚区内容,对注脚区做文件格式校验;
[0132]
读取所述文件的注脚区中的数据区的偏移和大小s[offset size]、校验区中的偏移和大小j[offset size]、hash区的偏移和大小h[offset size]以及bitmap区的偏移和大小b[offset size];
[0133]
根据所述bitmap区的偏移和大小b[offset size],将bitmap区的数据进行反序列化,存放至内存;
[0134]
根据所述hash区的偏移和大小h[offset size],将所有的hashid,对应的offset size,加载至内存。
[0135]
进一步地,本实施例所述的应用于数据库存储的文件数据存储读取装置,所述文件数据读取模块包括查询单元,所述查询单元:
[0136]
根据查询key进行哈希计算得到查询key的hash(key),进一步得到查询key的hashid=hash(key);
[0137]
根据查询key的hashid在bitmap区中查看是否存在该key,若不存在,直接返回空结果,查询结束,若存在则进入下一步;
[0138]
根据查询key的hashid在bitmap区中的排序rank,计算得到hash区记录的偏移和大小h[offset size];
[0139]
根据所述hash区的偏移和大小h[offset size],在数据区或者冲突区读取所述查询key所对应的查询数据。
[0140]
进一步地,本实施例所述的应用于数据库存储的文件数据存储读取装置,所述查询单元根据所述hash区的偏移和大小h[offset size],在数据区或者冲突区读取所述查询key所对应的查询数据包括:
[0141]
根据所述hash区的偏移和大小h[offset size]判断是否落在冲突区;
[0142]
若判断为没有落在冲突区,直接从数据区按照偏移和大小s[offset size]读取数据,若判断为落在冲突区,则根据对应的冲突区的偏移和大小c[offset size]确定冲突区块,在冲突区块中通过二分查找,置换所述查询key在数据区的偏移和大小s[offset size],从数据区读取数据。
[0143]
作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存储读取装置,所述查询单元根据查询key的hashid在bitmap区中的排序rank,计算得到hash区记录的偏移和大小h[offset size]包括:
[0144]
所述hash区在写入每个所述h[offset size]时的定长为width,且为有序写入,则通过rank*width计算得到所述查询key在hash区记录的偏移和大小h[offset size]。
[0145]
作为本实施例的可选实施方式,所述数据校验区可以采用多种不的校验算法;hsah算法可以选用不同的注脚区的特定数字可以选取不同的数值;注脚区的各个区的offset size信息可以单独存储在meta区,注脚区只存储meta区的offset size。
[0146]
本实施例提供了一种存储介质,存储有计算机可执行程序,所述计算机可执行程序被执行时,实现任意一项所述的应用于数据库存储的文件数据存储读取方法。
[0147]
本实施例所述存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。
[0148]
本实施例还提供了一种电子设备,包括处理器和存储器,所述存储器用于存储计算机可执行程序,当所述计算机程序被所述处理器执行时,所述处理器执行所述应用于数据库存储的文件数据存储读取方法。
[0149]
电子设备以通用计算设备的形式表现。其中处理器可以是一个,也可以是多个并且协同工作。本发明也不排除进行分布式处理,即处理器可以分散在不同的实体设备中。本发明的电子设备并不限于单一实体,也可以是多个实体设备的总和。
[0150]
所述存储器存储有计算机可执行程序,通常是机器可读的代码。所述计算机可读程序可以被所述处理器执行,以使得电子设备能够执行本发明的方法,或者方法中的至少部分步骤。
[0151]
所述存储器包括易失性存储器,例如随机存取存储单元(ram)和/或高速缓存存储单元,还可以是非易失性存储器,如只读存储单元(rom)。
[0152]
应当理解,本发明的电子设备中还可以包括上述示例中未示出的元件或组件。例如,有些电子设备中还包括有显示屏等显示单元,有些电子设备还包括人机交互元件,例如按扭、键盘等。只要该电子设备能够执行存储器中的计算机可读程序以实现本发明方法或方法的至少部分步骤,均可认为是本发明所涵盖的电子设备。
[0153]
通过以上对实施方式的描述,本领域的技术人员易于理解,本发明可以由能够执行特定计算机程序的硬件来实现,例如本发明的系统,以及系统中包含的电子处理单元、服务器、客户端、手机、控制单元、处理器等。本发明也可以由执行本发明的方法的计算机软件来实现,例如由微处理器、电子控制单元,客户端、服务器端等执行的控制软件来实现。但需要说明的是,执行本发明的方法的计算机软件并不限于由一个或特定个的硬件实体中执行,其也可以是由不特定具体硬件的以分布式的方式来实现。对于计算机软件,软件产品可以存储在一个计算机可读的存储介质(可以是cd-rom,u盘,移动硬盘等)中,也可以分布式存储于网络上,只要其能使得电子设备执行根据本发明的方法。
[0154]
以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但本发明不局限于上述具体实施方式,因此任何对本发明进行修改或等同替换;而一切不脱离发明的精神和范围的技术方
案及其改进,其均涵盖在本发明的权利要求范围当中。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献