基于字节数组的整数变长有序编码方法、装置及存储介质制造方法及图纸

技术编号:27742026 阅读:21 留言:0更新日期:2021-03-19 13:35
本申请公开了一种基于字节数组的整数变长有序编码方法、装置及存储介质,用于数据库中的整数数据存储。方法包括:接收输入到数据库的整数数据;将接收的整数数据转换为字节数组,在字节数组的第1个字节中,第1位表示整数数据属于非负整数或负整数,之后的位数用来编码补字节长度,补字节长度结束之后的位数则为整数数据的最高几位,字节数组的长度等于第1个字节中的补字节长度加1,整数数据的绝对值由补值和差值相加组成;将转换为字节数组的整数数据存入数据库中。本申请既可以实现以变长字节数组存储整数数据,又可以实现直接基于字节数组来比较相同符号下的整数数据大小,且字节数组的字节长度不受限制。

【技术实现步骤摘要】
基于字节数组的整数变长有序编码方法、装置及存储介质
本申请涉及数据存储领域,特别是涉及一种基于字节数组的整数变长有序编码方法、装置及存储介质。
技术介绍
目前,NoSQL数据库中,如HBase、RocksDB、LevelDB等底层都是主要支持字节数组的数据格式,其他数据类型需要转换为字节数组再进行存储。对于整数,一般是按整数类型转换为固定长度的字节数组,比如整型(Integer)转换为4个字节的数组,而长整型(Long)转换为8个字节的数组。转换为固定长度字节数组可以实现通过直接对字节数组的比较来比较整数的大小,不需要将值字节数组提前转换为整数。但是,很多时候由于不确定整数是否超过4个字节(即最大值4294967295),又需要直接比较的情况下,会统一采用长整型,即8个字节来存储整数,在整数值大部分比较小的情况下,会出现占用空间浪费的情况。在一些数据库或者存储引擎中,通过将整数最低到高每7位编码到一个字节的后7位里,同时以该字节的首位是否置为1来区分该字节是否最后一个字节。这种编码方式既实现了变长字节存储,又实现了根据字节特征识别整数编码边界的作用,即根据字节最高位来判断字节数组中编码为某一个整数的字节长度,这种场景适用于将整数与其他值编码到一起的场景。但这种编码方式无法实现按字节数组直接对整数进行排序。因此,亟待设计一种方案将整数数据转换为字节数组,使得根据字节数组首字节即可知道整数所占用的字节长度,并可以直接按字节数组对整数大小进行排序。
技术实现思路
基于变长编码、字节数组序排序、整数编码边界等多个需求进行分析,本专利技术设计了一种编码方式,该编码方式支持变长编码,最小长度只需要1个字节;支持字节数组序排序,根据对字节数组进行排序比较,即可实现对相同符号内所编码整数的比较;支持整数编码边界,根据字节数组首字节即可知道整数所占用的字节长度范围;支持基本编码方式和扩展编码方式,基本编码方式有最大值限制,而扩展编码方式则支持更多位数的整数。这种编码方式在一些常用场景下,尤其是大部分数值绝对值比较小的场景下,既能达到占用较小存储空间的目标,又能实现直接基于数组比较数值大小的功能。第一方面,本申请设计了一种基于字节数组的整数变长有序编码方法,用于数据库中的整数数据存储,其特征在于:接收输入到数据库的整数数据;将接收的所述整数数据转换为字节数组,在所述字节数组的第1个字节中,第1位表示所述整数数据属于非负整数或负整数,之后的位数用来编码补字节长度,所述补字节长度的编码方式为:位数从所述补字节占用的最高位开始计算,当出现位数值置0时,则为补字节长度结束的位置,其中所述补字节长度为从所述补字节占用的最高位开始到结束的位置,位值置1的位数,所述补字节长度结束之后的位数则为所述整数数据的最高几位,所述字节数组的长度等于所述第1个字节中的补字节长度加1,所述整数数据的绝对值由补值和差值相加组成,所述字节数组除第1个字节外,后续的字节与所述第1个字节中表示整数数据的最高几位一起组成所述整数的差值,所述补值根据所述补字节长度来决定,其中将所有整数数据对应的字节长度由小到大进行排序,每个字节长度的补值为上一个字节长度所表达的最大值加1,其中最短字节数组的长度为1个字节;将转换为字节数组的所述整数数据存入所述数据库中。在一种可选的实施方式中,其进一步包括:当所述补字节长度超过7时,所述补字节长度编码所占的位数延续到所述字节数组的第1字节之后的字节中。在一种可选的实施方式中,其进一步包括:所述将所有整数数据对应的字节长度由小到大进行排序表示相同符号下的整数数据的排序,所述符号包括非负整数和负整数。在一种可选的实施方式中,其进一步包括:对不同符号下的整数数据分开进行由小到大的排序,非负整数以顺序进行排序,负整数以逆序进行排序,以实现相同符号下的整数的有序比较。第二方面,本申请设计了一种基于字节数组的整数变长有序编码装置,用于数据库中的整数数据存储,其特征在于:接收装置,其用于接收输入到数据库的整数数据;转换装置,其用于将接收的所述整数数据转换为字节数组,在所述字节数组的第1个字节中,第1位表示所述整数数据属于非负整数或负整数,之后的位数用来编码补字节长度,所述补字节长度的编码方式为:位数从所述补字节占用的最高位开始计算,当出现位数值置0时,则为补字节长度结束的位置,其中所述补字节长度为从所述补字节占用的最高位开始到结束的位置,位值置1的位数,所述补字节长度结束之后的位数则为所述整数数据的最高几位,所述字节数组的长度等于所述第1个字节中的补字节长度加1,所述整数数据的绝对值由补值和差值相加组成,所述字节数组除第1个字节外,后续的字节与所述第1个字节中表示整数数据的最高几位一起组成所述整数的差值,所述补值根据所述补字节长度来决定,其中将所有整数数据对应的字节长度由小到大进行排序,每个字节长度的补值为上一个字节长度所表达的最大值加1,其中最短字节数组的长度为1个字节;存储装置,其用于将转换为字节数组的所述整数数据存入所述数据库中。在一种可选的实施方式中,其进一步包括:当所述补字节长度超过7时,所述补字节长度编码所占的位数延续到所述字节数组的第1字节之后的字节中。在一种可选的实施方式中,其进一步包括:所述将所有整数数据对应的字节长度由小到大进行排序表示相同符号下的整数数据的排序,所述符号包括非负整数和负整数。在一种可选的实施方式中,其进一步包括:对不同符号下的整数数据分开进行由小到大的排序,非负整数以顺序进行排序,负整数以逆序进行排序,以实现相同符号下的整数的有序比较。第三方面,本申请设计了一种基于字节数组的整数变长有序编码装置,用于数据库中的整数数据存储,其特征在于:包括处理器和存储器;所述存储器存储计算机程序,所述处理器执行所述计算机程序以实现如本申请第一方面所述的方法。第四方面,本申请设计了一种计算机存储介质,所述计算机存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如本申请第一方面所述的方法。本专利技术通过对输入数据库的整数数据进行字节数组变长编码,通过字节数组的补字节长度就可以确认所述字节数组的字节长度,并通过所述字节数组直接就可以进行所述字节数组对应的整数数据之间的大小比较,以及字节数组的字节长度不受限制。附图说明在不一定按比例绘制的附图中,相同的附图标记可以在不同的视图中描述相似的部件。具有字母后缀或不同字母后缀的相同附图标记可以表示相似部件的不同实例。附图大体上通过举例而不是限制的方式示出各种实施例,并且与说明书以及权利要求书一起用于对所公开的实施例进行说明。在适当的时候,在所有附图中使用相同的附图标记指代同一或相似的部分。这样的实施例是例证性的,而并非旨在作为本装置或方法的穷尽或排他实施例。图1示出了根据本专利技术的基于字节数组的整数变长有序编码的方法的流程示意图;图2示出了根据本专利技术的基于字节数组的整数变长有序编码的装置的结构示意图。具体实施方式下面将结合本专利技术本文档来自技高网...

【技术保护点】
1.一种基于字节数组的整数变长有序编码方法,用于数据库中的整数数据存储,其特征在于,所述基于字节数组的整数变长有序编码方法包括如下步骤:/n接收输入到数据库的整数数据;/n将接收的所述整数数据转换为字节数组,在所述字节数组的第1个字节中,第1位表示所述整数数据属于非负整数或负整数,之后的位数用来编码补字节长度,所述补字节长度的编码方式为:位数从所述补字节占用的最高位开始计算,当出现位数值置0时,则为补字节长度结束的位置,其中所述补字节长度为从所述补字节占用的最高位开始到结束的位置,位值置1的位数,所述补字节长度结束之后的位数则为所述整数数据的最高几位,所述字节数组的长度等于所述第1个字节中的补字节长度加1,所述整数数据的绝对值由补值和差值相加组成,所述字节数组除第1个字节外,后续的字节与所述第1个字节中表示整数数据的最高几位一起组成所述整数的差值,所述补值根据所述补字节长度来决定,其中将所有整数数据对应的字节长度由小到大进行排序,每个字节长度的补值为上一个字节长度所表达的最大值加1,其中最短字节数组的长度为1个字节;/n将转换为字节数组的所述整数数据存入所述数据库中。/n

【技术特征摘要】
1.一种基于字节数组的整数变长有序编码方法,用于数据库中的整数数据存储,其特征在于,所述基于字节数组的整数变长有序编码方法包括如下步骤:
接收输入到数据库的整数数据;
将接收的所述整数数据转换为字节数组,在所述字节数组的第1个字节中,第1位表示所述整数数据属于非负整数或负整数,之后的位数用来编码补字节长度,所述补字节长度的编码方式为:位数从所述补字节占用的最高位开始计算,当出现位数值置0时,则为补字节长度结束的位置,其中所述补字节长度为从所述补字节占用的最高位开始到结束的位置,位值置1的位数,所述补字节长度结束之后的位数则为所述整数数据的最高几位,所述字节数组的长度等于所述第1个字节中的补字节长度加1,所述整数数据的绝对值由补值和差值相加组成,所述字节数组除第1个字节外,后续的字节与所述第1个字节中表示整数数据的最高几位一起组成所述整数的差值,所述补值根据所述补字节长度来决定,其中将所有整数数据对应的字节长度由小到大进行排序,每个字节长度的补值为上一个字节长度所表达的最大值加1,其中最短字节数组的长度为1个字节;
将转换为字节数组的所述整数数据存入所述数据库中。


2.一种如权利要求1所述的方法,其特征在于:当所述补字节长度超过7时,所述补字节长度编码所占的位数延续到所述字节数组第1字节之后的字节中。


3.一种如权利要求1所述的方法,其特征在于:所述将所有整数数据对应的字节长度由小到大进行排序表示相同符号下的整数数据的排序,所述符号包括非负整数和负整数。


4.一种如权利要求3所述的方法,其特征在于:对不同符号下的整数数据分开进行由小到大的排序,非负整数以顺序进行排序,负整数以逆序进行排序,以实现相同符号下的整数的有序比较。


5.一种基于字节数组的整数变长有序编码装置,用于数据库中的整数数据存储,其特征在于,所述基于字节数组的整数变长有序编码装置包括:
接收装置,其用于接收输入到数据库的整数数据;
转换装置,其用于将接...

【专利技术属性】
技术研发人员:胡俊飞
申请(专利权)人:北京微步在线科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1