CN114398373A - 应用于数据库存储的文件数据存储读取方法及装置 - Google Patents
应用于数据库存储的文件数据存储读取方法及装置 Download PDFInfo
- Publication number
- CN114398373A CN114398373A CN202210047084.9A CN202210047084A CN114398373A CN 114398373 A CN114398373 A CN 114398373A CN 202210047084 A CN202210047084 A CN 202210047084A CN 114398373 A CN114398373 A CN 114398373A
- Authority
- CN
- China
- Prior art keywords
- offset
- size
- hash
- area
- data
- 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
- 238000013500 data storage Methods 0.000 title claims abstract description 82
- 238000000034 method Methods 0.000 title claims abstract description 70
- 238000004364 calculation method Methods 0.000 claims description 23
- 230000008569 process Effects 0.000 claims description 13
- 238000012856 packing Methods 0.000 claims description 4
- 230000006870 function Effects 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 8
- 238000012795 verification Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 6
- 238000013524 data verification Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 4
- 125000004122 cyclic group Chemical group 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000002347 injection Methods 0.000 description 3
- 239000007924 injection Substances 0.000 description 3
- 238000005192 partition Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000005204 segregation Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了应用于数据库存储的文件数据存储读取方法,包括文件数据存储,所述文件数据存储包括:将key‑value数据写到文件的数据区,记录在数据区的偏移和大小S[offset+size];计算key‑value数据中key的哈希值hash(key),更新位图bitmap中哈希值hash(key)对应的第hashID位的bit值;所述hashID,key,S[offset+size]作为key‑value数据写入时的哈希索引记录,并将所述哈希索引记录写入在文件中。本发明的应用于数据库存储的文件数据存储读取方法在进行数据存储时采用新的文件格式通过hash索引,在进行key值检索时时间复杂度可以达到O(1),极大的提升了key‑value数据的检索效率。
Description
技术领域
本发明涉及数据库存储技术领域,具体的涉及应用于数据库存储的文件数据存储读取方法及装置。
背景技术
KV数据库是指Key-value数据库,是一种以键值对存储数据的一种数据库。而为了提高数据库的查询速度,需要针对数据库建立数据库索引,针对KV数据库比较常见的三种数据库索引的数据结构:哈希表、有序数组和搜索树。
哈希表里面存储的是key-value键值对。利用哈希表来存储索引的话,得先利用哈希函数把key换算成数组中对应的一个Index位置,然后把value放在这个位置,如果多个key换算后得到了相同的index,那么就在这里追加一条链表,存储哈希值相同的key-value对象。如果给你一个指定的key让你查询对应的value,需要先根据哈希函数换算数组的index值,如果该位置有多个值,那么遍历链表即可。哈希表的缺点很明显,由于哈希表是无序的,所以哈希索引做区间查询的速度是很慢的。
有序数组在等值查询和范围查询场景中的性能就都非常优秀。key-value数组就是按照顺序保存的。这时候如果你要查key对应的value,用二分法就可以快速得到,这个时间复杂度是O(log(N))。采用二分法虽然能大大的提升查询的效率,但是O(log(N))的时间复杂度对于数据库的查询来说效率还有待提升,而且key-value数组是有序存储,在需要更新数据的时候就麻烦了,往中间插入一条记录还必须得移动后面所有的记录,成本太高。
搜索树,树是一种数据结构,它是由n(n>=0)个有限节点组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。搜索树查询一般采用二分法,时间复杂度是O(log(N))。
有鉴于此,本发明所要解决的技术问题是:如何提升KV数据库的查询效率,甚至于KV数据库查询的时间复杂度能够达到O(1),O(1)表示一次操作即可直接取得目标元素。
发明内容
本发明为了解决上述技术问题,提出了应用于数据库存储的文件数据存储读取方法及装置,所述应用于数据库存储的文件数据存储方法得到了一种新的文件格式,可以通过hash索引,时间复杂度基本能够达到O(1),具体技术方案如下:
应用于数据库存储的文件数据存储读取方法,包括文件数据存储,所述文件数据存储包括:
将key-value数据写到文件的数据区,记录在数据区的偏移和大小S[offset+size];
计算key-value数据中key的哈希值hash(key),更新位图bitmap中哈希值hash(key)对应的第hashID位的bit值;
所述hashID,key,S[offset+size]作为key-value数据写入时的哈希索引记录,并将所述哈希索引记录写入在文件中。
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法中所述将所述哈希索引记录记录在文件中包括:
将哈希索引记录按hashID排序,将所有hashID的偏移和大小以定长的方式写入文件的hash区,记录hash区的偏移和大小H[offset+size];
将哈希索引记录的bitmap进行序列化,作为bitmap区写入文件,记录bitmap区的偏移和大小B[offset+size];
将所述数据区的偏移和大小S[offset+size]、hash区的偏移和大小H[offset+size]、bitmap区的偏移和大小B[offset+size]存储作为文件的注脚区。
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法中,所述在将哈希索引记录按hashID排序之前还包括:
根据所述哈希索引记录,将相同hashID的key和与所述key对应的在数据区中的偏移和大小S[offset+size]打包成一个冲突区块,依次写入文件的冲突区;
保存所述相同hashID的key的冲突区块在冲突区的偏移和大小C[offset+size],回写所述C[offset+size],作为相同hashID的key的唯一关联偏移和大小。
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法,包括:所述将key-value数据写到文件的数据区的过程中,计算得到key-value数据的校验码,将校验码存储至文件的校验区,并记录各个key的校验码在校验区中的偏移和大小J[offset+size];将所述校验区中的偏移和大小J[offset+size]保存至文件的注脚区。
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法,包括文件数据读取,所述文件数据读取包括文件打开,所述文件打开过程包括:
读取所述文件的注脚区中的数据区的偏移和大小S[offset+size]、校验区中的偏移和大小J[offset+size]、hash区的偏移和大小H[offset+size]以及bitmap区的偏移和大小B[offset+size];
根据所述bitmap区的偏移和大小B[offset+size],将bitmap区的数据进行反序列化,存放至内存;
根据所述hash区的偏移和大小H[offset+size],将所有的hashID,对应的offset+size,加载至内存。
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法中,所述文件数据读取包括数据读取过程,所述数据读取过程包括:
根据查询key进行哈希计算得到查询key的hash(key),进一步得到查询key的hashID=hash(key);
根据查询key的hashID在bitmap区中查看是否存在该key,若不存在,直接返回空结果,查询结束,若存在则进入下一步;
根据查询key的hashID在bitmap区中的排序rank,计算得到hash区记录的偏移和大小H[offset+size];
根据所述hash区的偏移和大小H[offset+size],在数据区或者冲突区读取所述查询key所对应的查询数据。
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法中,所述根据所述hash区的偏移和大小H[offset+size],在数据区或者冲突区读取所述查询key所对应的查询数据包括:
根据所述hash区的偏移和大小H[offset+size]判断是否落在冲突区;
若判断为没有落在冲突区,直接从数据区按照偏移和大小S[offset+size]读取数据,若判断为落在冲突区,则根据对应的冲突区的偏移和大小C[offset+size]确定冲突区块,在冲突区块中通过二分查找,置换所述查询key在数据区的偏移和大小S[offset+size],从数据区读取数据。
作为本发明的可选实施方式,所述的应用于数据库存储的文件数据存储读取方法中,所述根据查询key的hashID在bitmap区中的排序rank,计算得到hash区记录的偏移和大小H[offset+size]包括:
所述hash区在写入每个所述H[offset+size]时的定长为width,且为有序写入,则通过rank*width计算得到所述查询key在hash区记录的偏移和大小H[offset+size]。
本发明同时提供应用于数据库存储的文件数据存储读取装置,包括文件数据存储模块,所述文件数据存储模块包括:
数据写入单元,将key-value数据写到文件的数据区,记录在数据区的偏移和大小S[offset+size];
哈希计算单元,计算key-value数据中key的哈希值hash(key);
Bitmap单元,更新位图bitmap中哈希值hash(key)对应的第hashID位的bit值;
及哈希索引记录单元,将key-value数据写入时的所述hashID,key,S[offset+size]作为哈希索引记录,并写入在文件中。
本发明同时还提供一种存储介质,存储有计算机可执行程序,其特征在于,所述计算机可执行程序被执行时,实现如上述任意一项所述的应用于数据库存储的文件数据存储读取方法。
与现有技术相比,本发明的有益效果:
本发明的应用于数据库存储的文件数据存储读取方法在进行数据存储时,根据key-value数据中key的哈希值hash(key)对应更新位图bitmap对应位数上的bit值,并作为key-value数据写入时的哈希索引记录;这样,在进行key查询时,通过bitmap区进行数据存在性判断,如果数据不存在,只需要一次比较的计算开销就能返回,如果数据存在,则根据哈希索引记录直接索引至数据取获取key-value数据。
因此,本发明的应用于数据库存储的文件数据存储读取方法在进行数据存储时采用新的文件格式通过hash索引,在进行key值检索时时间复杂度可以达到O(1),极大的提升了key-value数据的检索效率。
本发明所述的应用于数据库存储的文件数据存储读取方法在进行key-value数据存储时,形成一种新的文件数据结构,具体的文件数据结构的各个分区含义和作用:
数据区:存储压缩后的key-value数据;
校验区:使用循环校验码对数据区做数据校验;
冲突区:具有相同哈希值的key及其在数据区的偏移和数据大小会被放在冲突区;
hash区:定长存放key所在的数据区或者冲突区的偏移和大小;
bitmap区:使用bitmap存储key对应的哈希所在的bit位是否有值;
注脚区:定长存储数据区,校验区,冲突区,hash区,bitmap区的偏移和大小。
附图说明:
图1本发明实施例的应用于数据库存储的文件数据存储读取方法的流程图一;
图2本发明实施例的应用于数据库存储的文件数据存储读取方法中bitmap进行hashID位bit标记示意图;
图3本发明实施例的应用于数据库存储的文件数据存储读取方法针对相同的hashID的处理示意图;
图4本发明实施例的应用于数据库存储的文件数据存储读取方法针对相同的hashID的处理流程图;
图5本发明实施例的应用于数据库存储的文件数据存储读取方法适用的文件数据结构;
图6本发明实施例的应用于数据库存储的文件数据存储读取方法的流程图二;
图7本发明实施例的应用于数据库存储的文件数据存储读取方法的流程图三。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。
因此,以下对本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的部分实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征和技术方案可以相互组合。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本发明的描述中,需要说明的是,术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,或者是本领域技术人员惯常理解的方位或位置关系,这类术语仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
参见图1及图2所示,本实施例提供了应用于数据库存储的文件数据存储读取方法,包括文件数据存储,所述文件数据存储包括:
将key-value数据写到文件的数据区,记录在数据区的偏移和大小S[offset+size];
计算key-value数据中key的哈希值hash(key),更新位图bitmap中哈希值hash(key)对应的第hashID位的bit值;
所述hashID,key,S[offset+size]作为key-value数据写入时的哈希索引记录,并将所述哈希索引记录写入在文件中。
本实施例的hash(key),其中key表示元素的键值,则hash(key)的值表示经过散列函数计算得到的散列值。
所谓的位图Bit-map就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。
本实施例的应用于数据库存储的文件数据存储读取方法在进行数据存储时,根据key-value数据中key的哈希值hash(key)对应更新位图bitmap对应位数上的bit值,并作为key-value数据写入时的哈希索引记录;这样,在进行key查询时,通过bitmap区进行数据存在性判断,如果数据不存在,只需要一次比较的计算开销就能返回,如果数据存在,则根据哈希索引记录直接索引至数据取获取key-value数据。因此,本实施例的应用于数据库存储的文件数据存储读取方法在进行数据存储时采用新的文件格式通过hash索引,在进行key值检索时时间复杂度可以达到O(1),极大的提升了key-value数据的检索效率。
作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存储读取方法中,所述将所述哈希索引记录记录在文件中包括:
将哈希索引记录按hashID排序,将所有hashID的偏移和大小以定长的方式写入文件的hash区,记录hash区的偏移和大小H[offset+size];
将哈希索引记录的bitmap进行序列化,作为bitmap区写入文件,记录bitmap区的偏移和大小B[offset+size];
将所述数据区的偏移和大小S[offset+size]、hash区的偏移和大小H[offset+size]、bitmap区的偏移和大小B[offset+size]存储作为文件的注脚区。
本实施例的按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数据。
理想中的一个散列函数,希望达到如果key1≠key2,那hash(key1)≠hash(key2)这种效果,然而在真实的情况下,要想找到一个不同的key对应的散列值都不一样的散列函数,几乎是不可能的。事实上,再好的散列函数都无法避免散列冲突。对于散列函数而言,无论设置的存储区域(n)有多大,当需要存储的数据大于n时,那么必然会存在哈希值相同的情况。这就是所谓的散列冲突。
由于本实施例针对key-value数据进行哈希计算,原理上来说,在假定hash算法均匀的情况下,key-value数据进行哈希计算得到的哈希值hash(key)相互不同,但是如果真的存在有两个或者多个key-value数据进行哈希计算得到相同的哈希值hash(key),进而会出现一组相同的hashID,对于在进行hashID排序时产生影响,因此,参见图3及图4所示,作为本实施例的可选实施方式,本实施例在将哈希索引记录按hashID排序之前还包括:
根据所述哈希索引记录,将相同hashID的key和与所述key对应的在数据区中的偏移和大小S[offset+size]打包成一个冲突区块,依次写入文件的冲突区;
保存所述相同hashID的key的冲突区块在冲突区的偏移和大小C[offset+size],回写所述C[offset+size],作为相同hashID的key的唯一关联偏移和大小。
本实施例针对通过哈希计算得到相同哈希值的key-value数据,将其打包成一个冲突区块,将冲突区块存储在文件的冲突区,将整个冲突区块共用同一个hashID进行排序,并将冲突区块在文件冲突区存储的偏析和大小C[offset+size]作为hashID对应的key-value数据存储的偏移和大小。
本实施例的应用于数据库存储的文件数据存储读取方法,进行文件数据存储时,在假定哈希算法均匀的情况下,大比例的数据不会落到冲突区,未落到冲突区的数据,只需要一次hash区的io,获取数据的hash区的偏移和大小H[offset+size],一次数据区的io,通过数据区的偏移和大小S[offset+size]获取数据。即使查询的key落到冲突区,对同一冲突区的key进行二分查找,也只需要极小的io成本,整体的平均查询次为常数级别。
参见图4所示,作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存储读取方法,所述将key-value数据写到文件的数据区的过程中,计算得到key-value数据的校验码,将校验码存储至文件的校验区,并记录各个key的校验码在校验区中的偏移和大小J[offset+size];将所述校验区中的偏移和大小J[offset+size]保存至文件的注脚区。
本实施例的校验区用于在打开文件时针对数据区进行数据校验。本实施例的注脚区可添加自定义的数据,作为读取时的文件格式校验,整个注脚区为固定大小。
综上可知,本实施例所述的应用于数据库存储的文件数据存储读取方法在进行key-value数据存储时,形成一种新的文件数据结构,参见图5所示,具体的文件数据结构的各个分区含义和作用:
数据区:存储压缩后的key-value数据;
校验区:使用循环校验码对数据区做数据校验;
冲突区:具有相同哈希值的key及其在数据区的偏移和数据大小会被放在冲突区;
hash区:定长存放key所在的数据区或者冲突区的偏移和大小;
bitmap区:使用bitmap存储key对应的哈希所在的bit位是否有值;
注脚区:定长存储数据区,校验区,冲突区,hash区,bitmap区的偏移和大小。
与此同时,本实施例所述的应用于数据库存储的文件数据存储读取方法,包括文件数据读取,所述文件数据读取包括文件打开,所述文件打开过程包括:
打开文件,按照固定大小读取注脚区内容,对注脚区做文件格式校验;
读取所述文件的注脚区中的数据区的偏移和大小S[offset+size]、校验区中的偏移和大小J[offset+size]、hash区的偏移和大小H[offset+size]以及bitmap区的偏移和大小B[offset+size];
根据所述bitmap区的偏移和大小B[offset+size],将bitmap区的数据进行反序列化,存放至内存;
根据所述hash区的偏移和大小H[offset+size],将所有的hashID,对应的offset+size,加载至内存。
进一步地,参见图6及图7所示,本实施例所述的应用于数据库存储的文件数据存储读取方法,所述文件数据读取包括数据读取过程,所述数据读取过程包括:
根据查询key进行哈希计算得到查询key的hash(key),进一步得到查询key的hashID=hash(key);
根据查询key的hashID在bitmap区中查看是否存在该key,若不存在,直接返回空结果,查询结束,若存在则进入下一步;
根据查询key的hashID在bitmap区中的排序rank,计算得到hash区记录的偏移和大小H[offset+size];
根据所述hash区的偏移和大小H[offset+size],在数据区或者冲突区读取所述查询key所对应的查询数据。
进一步地,本实施例所述的应用于数据库存储的文件数据存储读取方法,所述根据所述hash区的偏移和大小H[offset+size],在数据区或者冲突区读取所述查询key所对应的查询数据包括:
根据所述hash区的偏移和大小H[offset+size]判断是否落在冲突区;
若判断为没有落在冲突区,直接从数据区按照偏移和大小S[offset+size]读取数据,若判断为落在冲突区,则根据对应的冲突区的偏移和大小C[offset+size]确定冲突区块,在冲突区块中通过二分查找,置换所述查询key在数据区的偏移和大小S[offset+size],从数据区读取数据。
作为本实施例的可选实施方式,参见图7所示,本实施例所述的应用于数据库存储的文件数据存储读取方法,所述根据查询key的hashID在bitmap区中的排序rank,计算得到hash区记录的偏移和大小H[offset+size]包括:
所述hash区在写入每个所述H[offset+size]时的定长为width,且为有序写入,则通过rank*width计算得到所述查询key在hash区记录的偏移和大小H[offset+size]。
作为本实施例的可选实施方式,所述数据校验区可以采用多种不的校验算法;hsah算法可以选用不同的注脚区的特定数字可以选取不同的数值;注脚区的各个区的offset+size信息可以单独存储在meta区,注脚区只存储meta区的offset+size。
本实施例同时提供一种应用于数据库存储的文件数据存储读取装置,包括文件数据存储模块,所述文件数据存储模块包括:
数据写入单元,将key-value数据写到文件的数据区,记录在数据区的偏移和大小S[offset+size];
哈希计算单元,计算key-value数据中key的哈希值hash(key);
Bitmap单元,更新位图bitmap中哈希值hash(key)对应的第hashID位的bit值;
及哈希索引记录单元,将key-value数据写入时的所述hashID,key,S[offset+size]作为哈希索引记录,并写入在文件中。
本实施例的应用于数据库存储的文件数据存储读取装置,文件数据存储模块在进行数据存储时,根据key-value数据中key的哈希值hash(key)对应更新位图bitmap对应位数上的bit值,并作为key-value数据写入时的哈希索引记录;这样,在进行key查询时,通过bitmap区进行数据存在性判断,如果数据不存在,只需要一次比较的计算开销就能返回,如果数据存在,则根据哈希索引记录直接索引至数据取获取key-value数据。因此,本实施例的应用于数据库存储的文件数据存储读取装置在进行数据存储时采用新的文件格式通过hash索引,在进行key值检索时时间复杂度可以达到O(1),极大的提升了key-value数据的检索效率。
作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存储读取装置中,所述哈希索引记录单元将所述哈希索引记录记录在文件中包括:
哈希索引记录单元将哈希索引记录按hashID排序,将所有hashID的偏移和大小以定长的方式写入文件的hash区,记录hash区的偏移和大小H[offset+size];
哈希索引记录单元将哈希索引记录的bitmap进行序列化,作为bitmap区写入文件,记录bitmap区的偏移和大小B[offset+size];
哈希索引记录单元将所述数据区的偏移和大小S[offset+size]、hash区的偏移和大小H[offset+size]、bitmap区的偏移和大小B[offset+size]存储作为文件的注脚区。
本实施例的哈希索引记录单元按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数据。
由于本实施例针对key-value数据进行哈希计算,原理上来说,在假定hash算法均匀的情况下,key-value数据进行哈希计算得到的哈希值hash(key)相互不同,但是如果真的存在有两个或者多个key-value数据进行哈希计算得到相同的哈希值hash(key),进而会出现一组相同的hashID,对于在进行hashID排序时产生影响,因此,作为本实施例的可选实施方式,本实施例的应用于数据库存储的文件数据存储读取装置还包括:
哈希冲突处理单元,根据所述哈希索引记录,将相同hashID的key和与所述key对应的在数据区中的偏移和大小S[offset+size]打包成一个冲突区块,依次写入文件的冲突区;
保存所述相同hashID的key的冲突区块在冲突区的偏移和大小C[offset+size],回写所述C[offset+size],作为相同hashID的key的唯一关联偏移和大小。
本实施例的哈希冲突处理单元针对通过哈希计算得到相同哈希值的key-value数据,将其打包成一个冲突区块,将冲突区块存储在文件的冲突区,将整个冲突区块共用同一个hashID进行排序,并将冲突区块在文件冲突区存储的偏析和大小C[offset+size]作为hashID对应的key-value数据存储的偏移和大小。
本实施例的应用于数据库存储的文件数据存储读取装置,进行文件数据存储时,在假定哈希算法均匀的情况下,大比例的数据不会落到冲突区,未落到冲突区的数据,只需要一次hash区的io,获取数据的hash区的偏移和大小H[offset+size],一次数据区的io,通过数据区的偏移和大小S[offset+size]获取数据。即使查询的key落到冲突区,对同一冲突区的key进行二分查找,也只需要极小的io成本,整体的平均查询次为常数级别。
作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存储读取装置包括校验单元,所述将key-value数据写到文件的数据区的过程中,所述校验单元计算得到key-value数据的校验码,将校验码存储至文件的校验区,并记录各个key的校验码在校验区中的偏移和大小J[offset+size];将所述校验区中的偏移和大小J[offset+size]保存至文件的注脚区。
本实施例的校验区用于在打开文件时针对数据区进行数据校验。本实施例的注脚区可添加自定义的数据,作为读取时的文件格式校验,整个注脚区为固定大小。
综上可知,本实施例所述的应用于数据库存储的文件数据存储读取装置在进行key-value数据存储时,形成一种新的文件数据结构,具体的文件数据结构的各个分区含义和作用:
数据区:存储压缩后的key-value数据;
校验区:使用循环校验码对数据区做数据校验;
冲突区:具有相同哈希值的key及其在数据区的偏移和数据大小会被放在冲突区;
hash区:定长存放key所在的数据区或者冲突区的偏移和大小;
bitmap区:使用bitmap存储key对应的哈希所在的bit位是否有值;
注脚区:定长存储数据区,校验区,冲突区,hash区,bitmap区的偏移和大小。
与此同时,本实施例所述的应用于数据库存储的文件数据存储读取装置,包括文件数据读取模块,所述文件数据读取模块包括文化打开单元,所述文件加载单元:
打开文件,按照固定大小读取注脚区内容,对注脚区做文件格式校验;
读取所述文件的注脚区中的数据区的偏移和大小S[offset+size]、校验区中的偏移和大小J[offset+size]、hash区的偏移和大小H[offset+size]以及bitmap区的偏移和大小B[offset+size];
根据所述bitmap区的偏移和大小B[offset+size],将bitmap区的数据进行反序列化,存放至内存;
根据所述hash区的偏移和大小H[offset+size],将所有的hashID,对应的offset+size,加载至内存。
进一步地,本实施例所述的应用于数据库存储的文件数据存储读取装置,所述文件数据读取模块包括查询单元,所述查询单元:
根据查询key进行哈希计算得到查询key的hash(key),进一步得到查询key的hashID=hash(key);
根据查询key的hashID在bitmap区中查看是否存在该key,若不存在,直接返回空结果,查询结束,若存在则进入下一步;
根据查询key的hashID在bitmap区中的排序rank,计算得到hash区记录的偏移和大小H[offset+size];
根据所述hash区的偏移和大小H[offset+size],在数据区或者冲突区读取所述查询key所对应的查询数据。
进一步地,本实施例所述的应用于数据库存储的文件数据存储读取装置,所述查询单元根据所述hash区的偏移和大小H[offset+size],在数据区或者冲突区读取所述查询key所对应的查询数据包括:
根据所述hash区的偏移和大小H[offset+size]判断是否落在冲突区;
若判断为没有落在冲突区,直接从数据区按照偏移和大小S[offset+size]读取数据,若判断为落在冲突区,则根据对应的冲突区的偏移和大小C[offset+size]确定冲突区块,在冲突区块中通过二分查找,置换所述查询key在数据区的偏移和大小S[offset+size],从数据区读取数据。
作为本实施例的可选实施方式,本实施例所述的应用于数据库存储的文件数据存储读取装置,所述查询单元根据查询key的hashID在bitmap区中的排序rank,计算得到hash区记录的偏移和大小H[offset+size]包括:
所述hash区在写入每个所述H[offset+size]时的定长为width,且为有序写入,则通过rank*width计算得到所述查询key在hash区记录的偏移和大小H[offset+size]。
作为本实施例的可选实施方式,所述数据校验区可以采用多种不的校验算法;hsah算法可以选用不同的注脚区的特定数字可以选取不同的数值;注脚区的各个区的offset+size信息可以单独存储在meta区,注脚区只存储meta区的offset+size。
本实施例提供了一种存储介质,存储有计算机可执行程序,所述计算机可执行程序被执行时,实现任意一项所述的应用于数据库存储的文件数据存储读取方法。
本实施例所述存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
本实施例还提供了一种电子设备,包括处理器和存储器,所述存储器用于存储计算机可执行程序,当所述计算机程序被所述处理器执行时,所述处理器执行所述应用于数据库存储的文件数据存储读取方法。
电子设备以通用计算设备的形式表现。其中处理器可以是一个,也可以是多个并且协同工作。本发明也不排除进行分布式处理,即处理器可以分散在不同的实体设备中。本发明的电子设备并不限于单一实体,也可以是多个实体设备的总和。
所述存储器存储有计算机可执行程序,通常是机器可读的代码。所述计算机可读程序可以被所述处理器执行,以使得电子设备能够执行本发明的方法,或者方法中的至少部分步骤。
所述存储器包括易失性存储器,例如随机存取存储单元(RAM)和/或高速缓存存储单元,还可以是非易失性存储器,如只读存储单元(ROM)。
应当理解,本发明的电子设备中还可以包括上述示例中未示出的元件或组件。例如,有些电子设备中还包括有显示屏等显示单元,有些电子设备还包括人机交互元件,例如按扭、键盘等。只要该电子设备能够执行存储器中的计算机可读程序以实现本发明方法或方法的至少部分步骤,均可认为是本发明所涵盖的电子设备。
通过以上对实施方式的描述,本领域的技术人员易于理解,本发明可以由能够执行特定计算机程序的硬件来实现,例如本发明的系统,以及系统中包含的电子处理单元、服务器、客户端、手机、控制单元、处理器等。本发明也可以由执行本发明的方法的计算机软件来实现,例如由微处理器、电子控制单元,客户端、服务器端等执行的控制软件来实现。但需要说明的是,执行本发明的方法的计算机软件并不限于由一个或特定个的硬件实体中执行,其也可以是由不特定具体硬件的以分布式的方式来实现。对于计算机软件,软件产品可以存储在一个计算机可读的存储介质(可以是CD-ROM,U盘,移动硬盘等)中,也可以分布式存储于网络上,只要其能使得电子设备执行根据本发明的方法。
以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但本发明不局限于上述具体实施方式,因此任何对本发明进行修改或等同替换;而一切不脱离发明的精神和范围的技术方案及其改进,其均涵盖在本发明的权利要求范围当中。
Claims (10)
1.应用于数据库存储的文件数据存储读取方法,其特征在于,包括文件数据存储,所述文件数据存储包括:
将key-value数据写到文件的数据区,记录在数据区的偏移和大小S[offset+size];
计算key-value数据中key的哈希值hash(key),更新位图bitmap中哈希值hash(key)对应的第hashID位的bit值;
所述hashID,key,S[offset+size]作为key-value数据写入时的哈希索引记录,并将所述哈希索引记录写入在文件中。
2.根据权利要求1所述的应用于数据库存储的文件数据存储读取方法,其特征在于,所述将所述哈希索引记录记录在文件中包括:
将哈希索引记录按hashID排序,将所有hashID的偏移和大小以定长的方式写入文件的hash区,记录hash区的偏移和大小H[offset+size];
将哈希索引记录的bitmap进行序列化,作为bitmap区写入文件,记录bitmap区的偏移和大小B[offset+size];
将所述数据区的偏移和大小S[offset+size]、hash区的偏移和大小H[offset+size]、bitmap区的偏移和大小B[offset+size]存储作为文件的注脚区。
3.根据权利要求2所述的应用于数据库存储的文件数据存储读取方法,其特征在于,在将哈希索引记录按hashID排序之前还包括:
根据所述哈希索引记录,将相同hashID的key和与所述key对应的在数据区中的偏移和大小S[offset+size]打包成一个冲突区块,依次写入文件的冲突区;
保存所述相同hashID的key的冲突区块在冲突区的偏移和大小C[offset+size],回写所述C[offset+size],作为相同hashID的key的唯一关联偏移和大小。
4.根据权利要求2所述的应用于数据库存储的文件数据存储读取方法,其特征在于,所述将key-value数据写到文件的数据区的过程中,计算得到key-value数据的校验码,将校验码存储至文件的校验区,并记录各个key的校验码在校验区中的偏移和大小J[offset+size];将所述校验区中的偏移和大小J[offset+size]保存至文件的注脚区。
5.根据权利要求4所述的应用于数据库存储的文件数据存储读取方法,其特征在于,包括文件数据读取,所述文件数据读取包括文件打开,所述文件打开过程包括:
读取所述文件的注脚区中的数据区的偏移和大小S[offset+size]、校验区中的偏移和大小J[offset+size]、hash区的偏移和大小H[offset+size]以及bitmap区的偏移和大小B[offset+size];
根据所述bitmap区的偏移和大小B[offset+size],将bitmap区的数据进行反序列化,存放至内存;
根据所述hash区的偏移和大小H[offset+size],将所有的hashID,对应的offset+size,加载至内存。
6.根据权利要求5所述的应用于数据库存储的文件数据存储读取方法,其特征在于,所述文件数据读取包括数据读取过程,所述数据读取过程包括:
根据查询key进行哈希计算得到查询key的hash(key),进一步得到查询key的hashID=hash(key);
根据查询key的hashID在bitmap区中查看是否存在该key,若不存在,直接返回空结果,查询结束,若存在则进入下一步;
根据查询key的hashID在bitmap区中的排序rank,计算得到hash区记录的偏移和大小H[offset+size];
根据所述hash区的偏移和大小H[offset+size],在数据区或者冲突区读取所述查询key所对应的查询数据。
7.根据权利要求6所述的应用于数据库存储的文件数据存储读取方法,其特征在于,所述根据所述hash区的偏移和大小H[offset+size],在数据区或者冲突区读取所述查询key所对应的查询数据包括:
根据所述hash区的偏移和大小H[offset+size]判断是否落在冲突区;
若判断为没有落在冲突区,直接从数据区按照偏移和大小S[offset+size]读取数据,若判断为落在冲突区,则根据对应的冲突区的偏移和大小C[offset+size]确定冲突区块,在冲突区块中通过二分查找,置换所述查询key在数据区的偏移和大小S[offset+size],从数据区读取数据。
8.根据权利要求6所述的应用于数据库存储的文件数据存储读取方法,其特征在于,所述根据查询key的hashID在bitmap区中的排序rank,计算得到hash区记录的偏移和大小H[offset+size]包括:
所述hash区在写入每个所述H[offset+size]时的定长为width,且为有序写入,则通过rank*width计算得到所述查询key在hash区记录的偏移和大小H[offset+size]。
9.应用于数据库存储的文件数据存储读取装置,其特征在于,包括文件数据存储模块,所述文件数据存储模块包括:
数据写入单元,将key-value数据写到文件的数据区,记录在数据区的偏移和大小S[offset+size];
哈希计算单元,计算key-value数据中key的哈希值hash(key);
Bitmap单元,更新位图bitmap中哈希值hash(key)对应的第hashID位的bit值;
及哈希索引记录单元,将key-value数据写入时的所述hashID,key,S[offset+size]作为哈希索引记录,并写入在文件中。
10.一种存储介质,存储有计算机可执行程序,其特征在于,所述计算机可执行程序被执行时,实现如权利要求1-8任意一项所述的应用于数据库存储的文件数据存储读取方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210047084.9A CN114398373A (zh) | 2022-01-16 | 2022-01-16 | 应用于数据库存储的文件数据存储读取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210047084.9A CN114398373A (zh) | 2022-01-16 | 2022-01-16 | 应用于数据库存储的文件数据存储读取方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114398373A true CN114398373A (zh) | 2022-04-26 |
Family
ID=81231459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210047084.9A Pending CN114398373A (zh) | 2022-01-16 | 2022-01-16 | 应用于数据库存储的文件数据存储读取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114398373A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573703B (zh) * | 2024-01-16 | 2024-04-09 | 科来网络技术股份有限公司 | 时序数据的通用检索方法、系统、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411634A (zh) * | 2011-12-27 | 2012-04-11 | 北京人大金仓信息技术股份有限公司 | 一种提升嵌入式数据库实时性的数据存储方法 |
CN102880677A (zh) * | 2012-09-11 | 2013-01-16 | 珠海金山网络游戏科技有限公司 | 一种基于哈希的文件打包和读取方法 |
CN105320775A (zh) * | 2015-11-11 | 2016-02-10 | 中科曙光信息技术无锡有限公司 | 数据的存取方法和装置 |
CN106326475A (zh) * | 2016-08-31 | 2017-01-11 | 中国科学院信息工程研究所 | 一种高效的静态哈希表实现方法及系统 |
-
2022
- 2022-01-16 CN CN202210047084.9A patent/CN114398373A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411634A (zh) * | 2011-12-27 | 2012-04-11 | 北京人大金仓信息技术股份有限公司 | 一种提升嵌入式数据库实时性的数据存储方法 |
CN102880677A (zh) * | 2012-09-11 | 2013-01-16 | 珠海金山网络游戏科技有限公司 | 一种基于哈希的文件打包和读取方法 |
CN105320775A (zh) * | 2015-11-11 | 2016-02-10 | 中科曙光信息技术无锡有限公司 | 数据的存取方法和装置 |
CN106326475A (zh) * | 2016-08-31 | 2017-01-11 | 中国科学院信息工程研究所 | 一种高效的静态哈希表实现方法及系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573703B (zh) * | 2024-01-16 | 2024-04-09 | 科来网络技术股份有限公司 | 时序数据的通用检索方法、系统、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10664497B2 (en) | Hybrid database table stored as both row and column store | |
CN111046034B (zh) | 管理内存数据及在内存中维护数据的方法和系统 | |
US10860561B2 (en) | Method and apparatus for providing efficient indexing and computer program included in computer readable medium therefor | |
US20150058352A1 (en) | Thin database indexing | |
US8027961B2 (en) | System and method for composite record keys ordered in a flat key space for a distributed database | |
CN110196847A (zh) | 数据处理方法和装置、存储介质及电子装置 | |
CN106471501B (zh) | 数据查询的方法、数据对象的存储方法和数据系统 | |
CN112015820A (zh) | 分布式图数据库实现的方法、系统、电子装置和存储介质 | |
US10496648B2 (en) | Systems and methods for searching multiple related tables | |
CN107577787B (zh) | 关联数据信息入库的方法及系统 | |
CN112231398B (zh) | 数据存储方法、装置、设备及存储介质 | |
US11868328B2 (en) | Multi-record index structure for key-value stores | |
CN114691721A (zh) | 图数据的查询方法、装置、电子设备及存储介质 | |
CN115935020A (zh) | 一种图数据存储方法和装置 | |
CN113704248B (zh) | 一种基于外置索引的区块链查询优化方法 | |
CN112231400B (zh) | 分布式数据库的访问方法、装置、设备及存储介质 | |
CN114398373A (zh) | 应用于数据库存储的文件数据存储读取方法及装置 | |
US9292553B2 (en) | Queries for thin database indexing | |
US7725468B2 (en) | Improving efficiency in processing queries directed to static data sets | |
CN114416741A (zh) | 基于多级索引的kv数据写入读取方法、装置及存储介质 | |
CN116049180A (zh) | 面向Paas平台的租户数据处理方法及装置 | |
CN110825747A (zh) | 一种信息存取方法、装置和介质 | |
CN115495462A (zh) | 批量数据更新方法、装置、电子设备和可读存储介质 | |
CN110413724A (zh) | 一种数据检索方法和装置 | |
CN117540056B (zh) | 数据查询的方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20231222 Address after: 6001, 6th Floor, No.1 Kaifeng Road, Shangdi Information Industry Base, Haidian District, Beijing, 100085 Applicant after: Beijing Baige Feichi Technology Co.,Ltd. Address before: 201108 building 6, 4299 Jindu Road, Minhang District, Shanghai Applicant before: Yanke information technology (Shanghai) Co.,Ltd. |
|
TA01 | Transfer of patent application right |