结构化数据库的存储方法、解压方法以及电子设备与流程

文档序号:30966440发布日期:2022-07-30 18:01阅读:96来源:国知局
1.本技术属于结构化数据库
技术领域
:,尤其涉及结构化数据库的存储方法、解压方法、电子设备及计算机可读存储介质。
背景技术
::2.目前,为了节省磁盘空间,通常需要对数据压缩后再存储。3.现有的压缩技术多是针对“大块数据”进行压缩和解压的,而对于“小块数据”则压缩比不高,甚至不能压缩。而结构化数据库中,数据按行、列(单元格)进行存储和查询,由于每行、每列(单元格)的数据通常较小,因此,采用现有的压缩技术不会对这些数据进行压缩,进而导致结构化数据库在存储性能损耗较大的问题。技术实现要素:4.本技术实施例提供了结构化数据库的存储方法、解压方法以及电子设备,可以解决待存储数据的压缩率较低,进而导致结构化数据库在存储性能损耗较大的问题。5.第一方面,本技术实施例提供了一种结构化数据库的存储方法,包括:6.获取待存储数据;7.若所述待存储数据为具有分层特征的数据,则根据预设的压缩层数,确定所述待存储数据中需压缩的数据层;8.对所述需压缩的数据层上的数据进行压缩,得到压缩后数据;9.将所述压缩后数据以及所述待存储数据中无需压缩的数据层上的数据存储到结构化数据库中。10.第二方面,本技术实施例提供了一种结构化数据库的解压方法,包括:11.获取待解压数据,所述待解压数据包括没有经过压缩的数据以及采用如权利要求1所述的结构化数据库的存储方法得到的压缩后数据;12.从所述待解压数据中提取所述压缩后数据;13.对所述压缩后数据进行解压,得到所述压缩后数据对应的解压后数据;14.根据所述压缩后数据对应的解压后数据以及所述没有经过压缩的数据,确定所述待解压数据对应的解压数据。15.第三方面,本技术实施例提供了一种结构化数据库的存储装置,包括:16.待存储数据获取模块,用于获取待存储数据;17.需压缩的数据层确定模块,用于若所述待存储数据为具有分层特征的数据,则根据预设的压缩层数,确定所述待存储数据中需压缩的数据层;18.压缩后数据确定模块,用于对所述需压缩的数据层上的数据进行压缩,得到压缩后数据;19.数据存储模块,用于将所述压缩后数据以及所述待存储数据中无需压缩的数据层上的数据存储到结构化数据库中。20.第四方面,本技术实施例提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面或第二方面所述的方法。21.第五方面,本技术实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面或第二方面所述的方法。22.第六方面,本技术实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行上述第一方面或第二方面所述的方法。23.本技术实施例与现有技术相比存在的有益效果是:24.本技术实施例中,由于在待存储数据为具有分层特征的数据时,其通常与其他具有分层特征的数据存在较大的重复度,因此,根据预设的压缩层数确定待存储数据中需压缩的数据层,并对需压缩的数据层上的数据进行压缩,能够提高对该待存储数据的压缩率,进而节省存储到结构化数据库中的数据所占用的磁盘,以及,减少结构化数据库在存储性能上的损耗。附图说明25.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。26.图1是本技术一实施例提供的一种结构化数据库的存储方法的流程图;27.图2是本技术一实施例提供的另一种结构化数据库的存储方法的流程图;28.图3是本技术一实施例提供的一种记录了被压缩的数据与压缩后数据的字典表的架构示意图;29.图4是本技术一实施例提供的一种结构化数据库的解压方法的流程图;30.图5是本技术另一实施例提供的另一种结构化数据库的解压方法的流程图;31.图6是本技术一实施例提供的一种结构化数据库的存储装置的结构示意图;32.图7是本技术一实施例提供的一种电子设备的结构示意图。具体实施方式33.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本技术。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本技术的描述。34.应当理解,当在本技术说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。35.还应当理解,在本技术说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。36.另外,在本技术说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。37.在本技术说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本技术的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。38.实施例一:39.在结构化数据库中,由于直接存储图片、大文件等会导致该结构化数据库的存储、查询效率降低,因此,在生产环境中,一般是先将图片、大文件等存储在专门的文件存储系统(如hdfs、ftp、http)中,然后再将文件的访问地址(访问地址的形式如:http://192.168.0.11:88/biz/a.jpg、ftp://192.168.0.100/2021/01/01/1.txt、ftp://192.168.0.100/2021/01/01/2.txt等)存储在结构化数据库中。40.根据上面的访问地址的形式可知,统一资源定位符(uniformresourcelocation,url)为具有分层特征的数据。如果某个子目录下存在较多的文件,则这种地址数据前缀会存在很高的重复度(就是相当于多个文件的绝对路径的目录路径是重复的)。比如,假设一个ftp服务器上,按“日”存放每天的数据文件,每日有1万个文件,则这1万个文件的地址在数据库中存储可能为:41.ftp://192.168.0.100/2021/01/01/1.txt42.ftp://192.168.0.100/2021/01/01/2.txt43.ftp://192.168.0.100/2021/01/01/3.txt44.ftp://192.168.0.100/2021/01/01/4.txt45.ftp://....46.ftp://192.168.0.100/2021/01/01/10000.txt47.从这个例子中,我们可以看到这10000个文件地址的前缀部分ftp://192.168.0.100/2021/01/01/是完全相同的,只是最后的文件名1.txt、2.txt、3.txt不同而已。48.针对这一场景,我们提出了一种结构化数据库的存储方法,在该存储方法中,针对具有分层特征的数据进行部分压缩,再将部分压缩后得到的数据以及没有压缩的部分数据一起存储。49.由于具有分层特征的数据通常具有较高的重复度,因此,采用上述方法进行压缩时能够提高数据的压缩效率,从而节省磁盘空间。50.下面结合附图对本技术实施例提供的结构化数据库的存储方法进行描述。51.图1示出了本技术实施例提供的一种结构化数据库的存储方法的流程图,详述如下:52.步骤s11,获取待存储数据。53.本实施例中,该待存储数据为将要存入结构化数据库中的数据。54.步骤s12,若上述待存储数据为具有分层特征的数据,则根据预设的压缩层数,确定上述待存储数据中需压缩的数据层。55.本实施例中,当一个待存储数据采用某个字符区分时,该待存储数据为具有分层特征的数据。例如,假设待存储数据为“ftp://192.168.0.100/2021/01/01/1.txt”,则采用字符“/”将该待存储数据区分为四层,第一层上的数据为“ftp://192.168.0.100”,第二层上的数据为“2021”,第三层上的数据为“01”,第四层上的数据为“01”,最后的“1.txt”为文件名。56.当然,除了url地址具有分层特征之外,身份证地址、户口地址等规范的房屋地址也具有分层特征。例如,假设房屋地址为“广东省深圳市南山区西丽街道”时,可将该房屋地址进行如下划分:第一层是“广东省”,第二层是“深圳市”,第三层是“南山区”,第四层是“西丽街道”。57.在本实施例中,待存储数据中需压缩的数据层的层数与预设的压缩层数相等。例如,假设预设的压缩层数为3,则待存储数据中需压缩的数据层的层数也为3。58.在一些实施例中,考虑到对于不同的待存储数据,越靠前的数据层上的数据相同的概率越大,因此,可将待存储数据中前n个数据层确定为该待存储数据中需压缩的数据层,该n为预设的压缩层数。例如,假设n为3,待存储数据为“ftp://192.168.0.100/2021/01/01/1.txt”,则将“ftp://192.168.0.100/2021/01”确定为需压缩的数据层上的数据。59.需要指出的是,当预设的压缩层数大于待存储数据所对应最大层数时,将该待存储数据所对应的最大层数作为该待存储数据中需压缩的数据层,或者,提示用户更改该预设的压缩层数。60.步骤s13,对上述需压缩的数据层上的数据进行压缩,得到压缩后数据。61.步骤s14,将上述压缩后数据以及上述待存储数据中无需压缩的数据层上的数据存储到结构化数据库中。62.具体地,将压缩后数据以及无需压缩的数据层上的数据按照其在待存储数据中的位置进行拼接,并将拼接后的数据存储到结构化数据库中。63.本技术实施例中,由于在待存储数据为具有分层特征的数据时,其通常与其他具有分层特征的数据存在较大的重复度,因此,根据预设的压缩层数确定待存储数据中需压缩的数据层,并对需压缩的数据层上的数据进行压缩,能够提高对该待存储数据的压缩率,进而节省存储到结构化数据库中的数据所占用的磁盘,以及,减少结构化数据库在存储性能上的损耗。64.在一些实施例中,为了有效对被压缩的数据进行管理,则采用字典表记录各个已被压缩的数据以及记录与该各个已被压缩的数据对应的压缩后数据,此时,上述步骤s13包括:65.a1、判断字典表记录的被压缩的数据中是否存在与上述需压缩的数据层上的数据相同的被压缩的数据,其中,上述字典表用于记录各个已被压缩的数据以及记录与上述各个已被压缩的数据对应的压缩后数据。66.本实施例中,当同一个数据被压缩后,将被记录到字典表中,且该字典表还记录被压缩的数据所对应的压缩后数据。当确定待存储数据的需压缩的数据层后,提取该需压缩的数据层上的数据,并将提取的数据与字典表记录的被压缩的数据比较,若字典表记录的各个被压缩的数据中存在与提取的数据相同的被压缩的数据,则表明需压缩的数据层上的数据曾经被压缩,否则,表明需压缩的数据层上的数据还没有被压缩过。67.a2、若上述字典表记录的被压缩的数据中存在与上述需压缩的数据层上的数据相同的被压缩的数据,则获取上述字典表中指向上述被压缩的数据的信息作为对应的压缩后数据。68.由于压缩后数据为字典表中指向被压缩的数据的信息,因此,根据该压缩后数据能够查找到其对应的被压缩的数据,从而使得后续根据压缩后数据能够成功查找到对应的被压缩的数据,进而实现对该被压缩的数据的解压。69.a3、若上述字典表没有记录与上述需压缩的数据层上的数据相同的被压缩的数据,则在上述字典表记录上述需压缩的数据层上的数据作为被压缩的数据,得到的上述字典表中指向记录的上述需压缩的数据层上的数据的信息作为对应的压缩后数据。70.本技术实施例中,由于采用字典表记录被压缩的数据以及其对应的压缩后数据,因此,当需要对需压缩的数据层上的数据进行压缩之前,能够依据字典表记录的被压缩的数据选择是否对该需压缩的数据层上的数据进行压缩,从而避免对该需压缩的数据层上的数据进行重复压缩。71.在一些实施例中,上述字典表包括至少一个元素的第一数组和第二数组,上述第一数组的元素为指向上述第二数组的指针,上述第二数组的元素为记录的被压缩的数据,上述步骤a1包括:72.a11、计算上述需压缩的数据层上的数据对应的哈希值。73.本实施例中,可采用哈希函数计算出该需压缩的数据层上的数据对应的哈希值。74.a12、根据上述哈希值与第一预设值所确定出的数值作为目标值。75.其中,第一预设值可为建表时设置的值,比如,将第一预设值设置为1024。76.本实施例中,可将哈希值与第一预设值进行求余运算,得到的余数作为目标值。例如,假设需压缩的数据层上的数据为“ftp://192.168.0.100/2021/01”,则可通过以下方式确定目标值:hash(ftp://192.168.0.100/2021/01)%1024。其中,“hash”表示哈希函数,“%”表示取余运算,“1024”为上述的第一预设值。77.a13、判断上述第一数组中位置序号与上述目标值相同的位置上是否存在元素。78.由于需压缩的数据层上的数据相同时,其对应的哈希值必然相同,且根据哈希值以及第一预设值确定的目标值也必然相同,而第一数组中的元素是指向第二数组的指针,且第二数组的元素为记录的被压缩的数据,因此,若第一数组中位置序号与目标值相同的位置上不存在元素,则表明第二数组没有记录有与需压缩的数据层上的数据相同的数据,即表明需压缩的数据层上的数据没有被压缩过。也即,通过上述方法,能够快速判断出需压缩的数据层上的数据是否被压缩过。79.对应地,上述步骤a3包括:80.a31、若上述第一数组中位置序号与上述目标值相同的位置上不存在元素,则新建一个第二数组,并将上述需压缩的数据层上的数据作为新建的第二数组中的第一个元素,且令上述第一数组中位置序号与上述目标值相同的位置上的元素指向上述新建的第二数组,再根据上述目标值、上述第一预设值以及上述新建的第二数组中的第一个元素的位置序号确定上述需压缩的数据层上的数据对应的压缩后数据。81.例如,假设目标值为“1022”,需压缩的数据层上的数据为“ftp://192.168.0.100/2021/01”。若判断出第一数组中“1022”位置上为空(null),即不存在任何信息,则表明之前没有对与需压缩数据层上的数据相同的数据进行过压缩,此时,将新建一个第二数组,并在该第二数组的第一个位置记录该“ftp://192.168.0.100/2021/01”。假设该第二数组的元素的位置序号从0开始,则可根据以下公式确定压缩后数据:n*hash_array+h,其中,“n”为第二数组中元素为需压缩的数据层上的数据的位置序号,在该例子中,“n”为“0”,“hash_array”为第一预设值(假设为1024),“h”为目标值,在该例子中,“h”为“1022”,则得到的压缩后数据为“1022”。82.需要指出的是,计算压缩后数据也可以采用其他公式,只需与目标值、第一预设值以及第二数组中的记录需压缩的数据层上的数据的元素的位置序号相关即可,此处不作限定。83.a32、若上述第一数组中位置序号与上述目标值相同的位置上存在元素,则在上述元素指向的第二数组中确定上述需压缩的数据层上的数据对应的位置序号,并根据上述目标值、上述第一预设值以及在上述第二数组中确定的位置序号确定上述需压缩的数据层上的数据对应的压缩后数据。84.本实施例中,若判断出第一数组中位置序号与上述目标值相同的位置上存在元素,即与目标值相同的位置上存在指向第二数组的指针,表明曾经可能对与需压缩的数据层上的数据相同的数据进行过压缩,此时,可直接根据该目标值、第一预设值以及在第二数组中确定的位置序号确定需压缩的数据层上的数据对应的压缩后数据。85.在一些实施例中,上述步骤a32中的若上述第一数组中位置序号与上述目标值相同的位置上存在元素,则在上述元素指向的第二数组中确定上述需压缩的数据层上的数据对应的位置序号,包括:86.a321、若上述第一数组中位置序号与上述目标值相同的位置上存在元素,则将上述需压缩的数据层上的数据逐个与上述第一数组存在的元素所指向的第二数组中的元素比较。87.a322、若上述需压缩的数据层上的数据与目标元素相同,则将上述目标元素的位置序号作为上述需压缩的数据层上的数据对应的位置序号,其中,上述目标元素为上述第二数组中的一个元素。88.a323、若上述需压缩的数据层上的数据与上述第二数组中的各个元素均不相同,则将上述需压缩的数据层上的数据作为上述第二数组中最新的一个元素,上述最新的一个元素所在的位置序号为上述需压缩的数据层上的数据对应的位置序号。89.本技术实施例中,若第二数组有3个元素,则可按照从前往后的顺序,先将需压缩的数据层上的数据与第二数组中的第一个元素比较,若两者不同,再将该需压缩的数据层上的数据与第二数组中的第二个元素比较,若相同,则判定第二数组中的第二个元素所对应的位置序号即为该需压缩的数据层上的数据对应的位置序号。当然,若该需压缩的数据层上的数据与第二数组的3个元素均不相同,则将该需压缩的数据层上的数据记录在第二数组的3个元素之后,此时,该需压缩的数据层上的数据作为第二数组的第4个元素。90.在一些实施例中,上述预设的压缩层数可以为用户指定的数值,也可以为根据待存储数据自动确定的数值。91.本技术实施例中,当预设的压缩层数为根据待存储数据自动确定的数值时,根据该待存储数据所属的类型确定,和/或,根据该待存储数据本身所包括的层数确定。92.在根据该待存储数据所属的类型确定压缩层数时,预先为不同类型的待存储数据设置对应的压缩层数,这样,在将具有分层特征的待存储数据进一步分类并得到其所属的类型后,就可自动确定出该待存储数据对应的压缩层数。例如,假设具有分层特征的待存储数据为“ftp://192.168.0.100/2021/01/01/1.txt”和“广东省深圳市南山区西丽街道”,则第一个待存储数据分类为url地址类,而第二个待存储数据分类为房屋地址类。假设预先对url地址类设置的压缩层数为3,预先对房屋地址类设置的压缩层数为4,则确定出上述“ftp://192.168.0.100/2021/01/01/1.txt”对应的压缩层数为3,而“广东省深圳市南山区西丽街道”对应的压缩层数为4。93.在根据该待存储数据所属的类型以及根据待存储数据本身所包括的层数确定压缩层数时,则先确定具有分类特征的待存储数据所属的类型,若为预设的第一类型,则根据与该第一类型对应的压缩层数确定该具有分类特征的待存储数据所对应的压缩层数,若为预设的第二类型,则根据该待存储数据本身所包括的层数确定其对应的压缩层数。94.例如,假设第一类型为房屋地址类,第二类型为url地址类,且上述房屋地址类对应的压缩层数为4,则在判断出待存储数据为房屋地址类时,直接确定该待存储数据对应的压缩层数为4。而在判断出待存储数据为url地址类时,默认压缩层数为url地址除最末尾的文件名后的所有层所对应的总层数。由于某些类型的待存储数据,其层数通常是固定的,例如,对于房屋地址类的待存储数据,其通常由省、市、区、街道等固定层数构成,而某些类型的待存储数据,其层数通常是不固定的,例如,对于url地址类的待存储数据,其与存储的地址有关,因此,据该待存储数据所属的类型以及根据待存储数据本身所包括的层数确定压缩层数能够极大提高确定的压缩层数的准确性,进而极大提高后续对数据进行压缩的压缩效率。95.在一些实施例中,若上述压缩层数为根据上述待存储数据自动确定的数值,则上述结构化数据库的存储方法还包括:96.b1、统计以上述压缩层数对待存储数据进行压缩后,平均每个被压缩的数据所对应的待存储数据的数量。97.b2、若上述数量小于预设的数量阈值,则减小上述压缩层数,并将减小后的压缩层数作为新的压缩层数。98.为了更清楚地描述如何更新压缩层数的过程,下面以一具体例子进行描述。假设待存储数据为url地址类,且用户未设置固定的压缩层数,则程序初始默认选择的压缩层数是url地址中除最末尾的文件名后的所有层。在程序运行过程中,再动态的统计该层数下平均每个url前缀下压缩的待存储数据的数量,若该数量小于预设的数量阈值(假设为100),则递减压缩层数。99.以ftp://192.168.0.100/2021/12/01/1.txt形式和ftp://192.168.0.100/2022/02/01/1.txt形式的待存储数据为案例:100.a、初始时,预设的压缩层数为除1.txt文件名之外的所有层所对应的层数,即4层(若待存储数据为“ftp://192.168.0.100/2021/12/01/1.txt”则根据预设的压缩层数确定的需压缩的数据层上的数据为“ftp://192.168.0.100/”、“2021/”、“12/”、“01/”)。101.b、若在程序运行过程中,动态的统计采样评估发现使用前缀“ftp://192.168.0.100/2021/12/01/”进行压缩的数据为90条(实际含义就是:该目录下的文件为90个),使用前缀“ftp://192.168.0.100/2022/02/01/”进行压缩的数据为96条(实际含义就是:该目录下的文件为96个),由于(90+96)/2=93,而93小于100,因此,将预设的压缩层数由4层递减为3层,即需压缩的数据层变为除文件名以及该文件名的前一层之外的所有层(若待存储数据为“ftp://192.168.0.100/2021/12/01/1.txt”则根据新的压缩层数确定的需压缩的数据层上的数据为“ftp://192.168.0.100/”、“2021/”、“12/”)。102.当然,若以压缩层数对待存储数据进行压缩后,平均每个被压缩的数据所对应的待存储数据的数量不小于预设的数量阈值,则该压缩层数保持不变。103.上述b1~b2中,由于根据平均每个被压缩的数据所对应的待存储数据的数量动态调整压缩层数,因此,能够在字典表大小和压缩率之间取得平衡。这是因为,当需压缩的数据层太多时,字典表会变大,但相应的压缩率会变高;而当需压缩的数据层太少时,字典表会变小,但同时压缩率也会变低。字典表大,需要消耗更大的内存及存储;压缩率高,能够节省真实数据的存储。104.为了更清楚地描述本技术实施例提供的结构化数据库的存储方法,下面以待存储数据为url地址为例进行描述。105.首先在建表时指定某个字段存储的是url地址类数据,这样数据库才能采用相应的压缩与解压方法来处理该数据的存储、查询。语法形式如下:106.createtabletest_table107.(108.xhintprimarykeycomment‘序号’,109....110.dzvarchar(256)usingurlcodelevel3hash_array1024comment‘文件地址’,111.....112.)113.上述建表语句中,dz字段,含有“usringurlcode”子句,说明该字段用于存储url地址类数据,由于url地址类数据为具有分层特征的数据,因此,数据库将采用相应的压缩与解压方法来处理该字段的数据存储、查询。114.上述的dz字段同时还含有“level3”子句,以提示数据库在对该字段的url地址类数据的进行压缩时,仅需提取url地址的前3层进行压缩编码,即预设的压缩层数为3。这里限制地址的压缩编码层数,主要是为了防止层数太深,导致最后的字典表过大,影响系统资源使用及性能。115.上述的dz字段同时还含有“hash_array1024”子句,用以提示第一预设值为1024,以及提示数据库在创建相应字典表时,其“hash数组(即第一数组)”合适的大小是1024。若该hash数组中各个元素对应的位置序号从0开始,则该hash数组中各个元素对应的位置序号为从0到1023。116.在创建表后,数据库将对“usringurlcode”子句存储的url地址进行压缩并存储,具体流程参见图2。117.假设待存储数据分别为ftp://192.168.0.100/2021/01/01/1.txt、ftp://192.168.0.100/2022/02/01/1.txt、ftp://192.168.0.100/2022/02/02/1.txt这3条数据。118.(一)参考图2,插入ftp://192.168.0.100/2021/01/01/1.txt:119.1)、提取指定的3层数据,即p为ftp://192.168.0.100/2021/01。对应图2中的步骤1。120.2)、计算hash(ftp://192.168.0.100/2021/01)%1024,假设得到的目标值为1022,该步骤对应图2中的步骤2。其中,hash函数的选择有很多种,此处不再赘述。121.3)、若hash数组(即上述的第一数组)的1022号位置为null,则新建一个元素数组(即上述的第二数组),并插入第一个数据ftp://192.168.0.100/2021/01,同时令hash数组的1022号位置的元素指向新数组,该步骤对应图2中的步骤3和步骤4。122.4)、1022即为ftp://192.168.0.100/2021/01对应的压缩后数据。该步骤对应图2中的步骤5。123.5)1022+尾部数据/01/1.txt,即“1022/01/1.txt”为最后写入目标库的数据。对应图2中的步骤6。124.(二)参考图2,继续插入ftp://192.168.0.100/2022/02/01/1.txt,过程如下:125.1)、提取指定的3层数据,即p为ftp://192.168.0.100/2022/02,对应图2中的步骤1。126.2)、计算hash(ftp://192.168.0.100/2022/02)%1024,假设得到的目标值为1022,对应图2中的步骤2。127.3)、若当前hash数组的1022号位置指向一个元素数组,则将ftp://192.168.0.100/2022/02与元素数组中的元素逐个比较,未发现已存在相同的元素,故在元素数组的末尾插入新数据ftp://192.168.0.100/2022/02,新数据在元素数组中的位置序号为1。对应图2中的步骤3/7/8/9/10。128.4)、1*1024+1022=2046即为ftp://192.168.0.100/2022/02的压缩后数据,对应图2中的步骤11。129.5)、2046+尾部数据/01/1.txt,即2046/01/1.txt为最后写入目标库的数据,对应图2中的步骤6。130.(三)参考图2,继续插入ftp://192.168.0.100/2022/02/02/1.txt,过程如下:131.1)、提取指定的3层数据,即p为ftp://192.168.0.100/2022/02,对应图2中的步骤1。132.2)、计算hash(ftp://192.168.0.100/2022/02)%1024,同上,假设得到的目标值为1022,对应图2中的步骤2。133.3)、若当前hash数组的1022号位置指向一个元素数组,则将ftp://192.168.0.100/2022/02与元素数组中的元素逐个比较,发现已存在相同的元素,且其位置序号为1,对应图2中的步骤3/7/8/10。134.4)、1*1024+1022=2046即为ftp://192.168.0.100/2022/02的压缩后数据,对应图2中的步骤11。135.5)、2046+尾部数据/01/1.txt,即2046/02/1.txt为最后写入目标库的数据,对应图2中的步骤6。136.最后得到的字典表如图3所示。137.应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。138.实施例二:139.图4示出了本技术实施例提供的一种结构化数据库的解压方法的流程图,详述如下:140.步骤s41,获取待解压数据,所述待解压数据包括没有经过压缩的数据以及包括采用如实施例一的结构化数据库的存储方法得到的压缩后数据。141.本实施例中,从结构化数据库中获取该待解压数据,例如,若建表时指定“usringurlcode”字段下的数据为经过部分压缩后的数据,则从该字段提取的数据即为本实施例的待解压数据。142.在本实施例中,待解压数据中的压缩后数据和没有经过压缩的数据的拼接关系与实施例一中压缩后数据以及无需压缩的数据层上的数据的拼接关系相同。143.步骤s42,从所述待解压数据中提取所述压缩后数据。144.本实施例中,根据实施例一中得到的压缩后数据所占用的字节以及其所在的位置执行对应的提取动作。例如,假设实施例一中得到的压缩后数据所占用的字节是4字节,且其位于待解压数据的前4个字节,则提取该待解压数据中前4个字节的数据作为压缩后数据。145.步骤s43,对所述压缩后数据进行解压,得到所述压缩后数据对应的解压后数据。146.本实施例中,解压的过程与实施例一的压缩过程相对应。147.步骤s44,根据所述压缩后数据对应的解压后数据以及所述没有经过压缩的数据,确定所述待解压数据对应的解压数据。148.本技术实施例中,由于待解压数据中只有部分数据需要解压,因此,在对该部分数据进行解压后,再将得到的解压数据与该待解压数据中没有经过压缩的数据进行拼接,即可得到最终的解压数据。149.在一些实施例中,所述步骤s43包括:150.根据压缩后数据与第一预设值确定字典表中第一数组的元素的位置序号以及该字典表中第二数组的元素的位置序号。151.根据确定的第一数组的元素的位置序号以及第二数组的元素的位置序号,在字典表中读取出对应的数据作为压缩后数据对应的解压后数据。152.参考图5的解压流程图,下面以“2046/02/1.txt”来说明获得待解压数据对应的解压数据过程:153.1)、读取前4个字节,计算其对应的压缩编码,这里计算出的压缩编码为2046。对应流程图步骤1。154.2)、计算2046%1024=1022。对应流程图步骤2。155.3)、计算2046/1024=1。“/”表示取商。156.4)、根据上述步骤2)和步骤3)可知,解压数据即为hash数组的1022号位置的元素数组的1号位置上记录的数据,即ftp://192.168.0.100/2022/02。157.5)、将步骤4)查找的数据+2046/02/1.txt前4字节之后的数据(即/02/1.txt),得到的ftp://192.168.0.100/2022/02/02/1.txt为解压后的原始实际数据。158.实施例三:159.对应于上文实施例一的结构化数据库的存储方法,图6示出了本技术实施例提供的结构化数据库的存储装置的结构框图,为了便于说明,仅示出了与本技术实施例相关的部分。160.参照图6,该结构化数据库的存储装置6包括:待存储数据获取模块61、需压缩的数据层确定模块62、压缩后数据确定模块63、数据存储模块64。其中:161.待存储数据获取模块61,用于获取待存储数据。162.需压缩的数据层确定模块62,用于若上述待存储数据为具有分层特征的数据,则根据预设的压缩层数,确定上述待存储数据中需压缩的数据层。163.压缩后数据确定模块63,用于对上述需压缩的数据层上的数据进行压缩,得到压缩后数据。164.数据存储模块64,用于将上述压缩后数据以及上述待存储数据中无需压缩的数据层上的数据存储到结构化数据库中。165.本技术实施例中,由于在待存储数据为具有分层特征的数据时,其通常与其他具有分层特征的数据存在较大的重复度,因此,根据预设的压缩层数确定待存储数据中需压缩的数据层,并对需压缩的数据层上的数据进行压缩,能够提高对该待存储数据的压缩率,进而节省存储到结构化数据库中的数据所占用的磁盘。166.在一些实施例中,上述压缩后数据确定模块63包括:167.数据是否存储判断单元,用于判断字典表记录的被压缩的数据中是否存在与上述需压缩的数据层上的数据相同的被压缩的数据,其中,上述字典表用于记录各个已被压缩的数据以及记录与上述各个已被压缩的数据对应的压缩后数据。168.数据已存储处理单元,用于若上述字典表记录的被压缩的数据中存在与上述需压缩的数据层上的数据相同的被压缩的数据,则获取上述字典表中指向上述被压缩的数据的信息作为对应的压缩后数据。169.数据未存储处理单元,用于若上述字典表没有记录与上述需压缩的数据层上的数据相同的被压缩的数据,则在上述字典表记录上述需压缩的数据层上的数据作为被压缩的数据,得到的上述字典表中指向记录的上述需压缩的数据层上的数据的信息作为对应的压缩后数据。170.在一些实施例中,上述字典表包括至少一个元素的第一数组和第二数组,上述第一数组的元素为指向上述第二数组的指针,上述第二数组的元素为记录的被压缩的数据,上述数据是否存储判断单元包括:171.哈希值计算单元,用于计算上述需压缩的数据层上的数据对应的哈希值。172.目标值确定单元,用于根据上述哈希值与第一预设值所确定出的数值作为目标值。173.元素是否存在判断单元,用于判断上述第一数组中位置序号与上述目标值相同的位置上是否存在元素。174.对应地,上述数据未存储处理单元包括:175.数组新建单元,用于若上述第一数组中位置序号与上述目标值相同的位置上不存在元素,则新建一个第二数组,并将上述需压缩的数据层上的数据作为新建的第二数组中的第一个元素,且令上述第一数组中位置序号与上述目标值相同的位置上的元素指向上述新建的第二数组,再根据上述目标值、上述第一预设值以及上述新建的第二数组中的第一个元素的位置序号确定上述需压缩的数据层上的数据对应的压缩后数据。176.位置需要确定单元,用于若上述第一数组中位置序号与上述目标值相同的位置上存在元素,则在上述元素指向的第二数组中确定上述需压缩的数据层上的数据对应的位置序号,并根据上述目标值、上述第一预设值以及在上述第二数组中确定的位置序号确定上述需压缩的数据层上的数据对应的压缩后数据。177.在一些实施例中,上述位置需要确定单元在判断出第一数组中位置序号与上述目标值相同的位置上存在元素,则在上述元素指向的第二数组中确定上述需压缩的数据层上的数据对应的位置序号时,具体包括:178.若上述第一数组中位置序号与上述目标值相同的位置上存在元素,则将上述需压缩的数据层上的数据逐个与上述第一数组存在的元素所指向的第二数组中的元素比较;若上述需压缩的数据层上的数据与目标元素相同,则将上述目标元素的位置序号作为上述需压缩的数据层上的数据对应的位置序号,其中,上述目标元素为上述第二数组中的一个元素;若上述需压缩的数据层上的数据与上述第二数组中的各个元素均不相同,则将上述需压缩的数据层上的数据作为上述第二数组中最新的一个元素,上述最新的一个元素所在的位置序号为上述需压缩的数据层上的数据对应的位置序号。179.在一些实施例中,上述压缩层数为用户指定的数值,或者,为根据上述待存储数据自动确定的数值。180.在一些实施例中,若上述压缩层数为根据上述待存储数据自动确定的数值,则上述结构化数据库的存储装置6还包括:181.数量统计模块,用于统计以上述压缩层数对待存储数据进行压缩后,平均每个被压缩的数据所对应的待存储数据的数量。182.压缩层数更新模块,用于若上述平均值小于预设的数量阈值,则减小上述压缩层数,并将减小后的压缩层数作为新的压缩层数。183.需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本技术方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。184.实施例四:185.图7为本技术一实施例提供的电子设备的结构示意图。如图7所示,该实施例的电子设备7包括:至少一个处理器70(图7中仅示出一个处理器)、存储器71以及存储在所述存储器71中并可在所述至少一个处理器70上运行的计算机程序72,所述处理器70执行所述计算机程序72时实现上述任意各个方法实施例中的步骤。186.所述电子设备7可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该电子设备可包括,但不仅限于,处理器70、存储器71。本领域技术人员可以理解,图7仅仅是电子设备7的举例,并不构成对电子设备7的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。187.所称处理器70可以是中央处理单元(centralprocessingunit,cpu),该处理器70还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。188.所述存储器71在一些实施例中可以是所述电子设备7的内部存储单元,例如电子设备7的硬盘或内存。所述存储器71在另一些实施例中也可以是所述电子设备7的外部存储设备,例如所述电子设备7上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储器71还可以既包括所述电子设备7的内部存储单元也包括外部存储设备。所述存储器71用于存储操作系统、应用程序、引导装载程序(bootloader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器71还可以用于暂时地存储已经输出或者将要输出的数据。189.所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。190.本技术实施例还提供了一种网络设备,该网络设备包括:至少一个处理器、存储器以及存储在所述存储器中并可在所述至少一个处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意各个方法实施例中的步骤。191.本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。192.本技术实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行时实现可实现上述各个方法实施例中的步骤。193.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/电子设备的任何实体或装置、记录介质、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质。例如u盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。194.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。195.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。196.在本技术所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。197.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。198.以上所述实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围,均应包含在本技术的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1