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

一种基于哈希算法的对象存储方法及系统与流程

2022-02-22 23:22:55 来源:中国专利 TAG:


1.本发明涉及一种基于哈希算法的对象存储方法及系统,属于数据管理技术领域。


背景技术:

2.对象存储(oss),是一种解决和处理离散单元的方法,可提供基于分布式系统之上的对象形式的数据存储服务,尤其适合非结构化数据(如图片、音视频)的存储。
3.目前虽然对象存储优化的方式有多种,但均未解决对象重复存储的问题。即,当用户上传多个相同的文件或者多个用户上传相同的文件时,这些相同的文件均被当作不同的对象存储起来,使得存储空间被极大浪费。


技术实现要素:

4.本发明的目的在于提供一种基于哈希算法的对象存储方法及系统,具有减少重复存储数据,优化存储空间的优点。
5.为达到上述目的,本发明的一方面提供如下技术方案:一种基于哈希算法的对象存储系统,包括:文件存储模块,用于存储文件,还用于确定存储的每个已存储文件的对象id;键值存储模块,用于确定对应每个所述已存储文件的第一哈希值,还用于基于每个所述第一哈希值计算所述第一哈希值对应的所述已存储文件的bucketid,所述键值存储模块包括第一哈希表及第二哈希表,所述第一哈希表用于存储第一键值对,所述第一键值对用于表征所述第一哈希值与所述已存储文件的对象id的对应关系,所述第二哈希表用于存储第二键值对,所述第二键值对用于表征所述第一哈希值与所述bucketid的对应关系;存储请求获取模块,用于接收用户端发送的待存储文件,确定对应所述待存储文件的bucketid;存储请求应答模块,用于判断所述键值存储模块是否存储有所述bucketid,若是,基于所述第二哈希表确定所述bucketid对应的第一哈希值,基于所述第一哈希表确定所述第一哈希值对应的已存储文件的对象id,将所述已存储文件的对象id发送至所述用户端,若否,将所述待存储文件发送至所述文件存储模块进行存储,并计算所述待存储文件的第一哈希值,基于所述待存储文件的所述bucketid及所述第一哈希值更新所述第一哈希表及所述第二哈希表。
6.进一步地,所述文件存储模块确定每个已存储文件的对象id,包括:获取所述已存储文件的存储地址,基于所述存储地址生成所述已存储文件的所述对象id。
7.进一步地,所述键值存储模块计算每个所述已存储文件的所述bucketid,包括:获取所述已存储文件的文件大小;判断所述已存储文件的文件大小是否大于第一预设大小阈值;若否,基于所述已存储文件计算对应所述已存储文件的所述bucketid;若是,获取所述已存储文件的文件格式,基于所述已存储文件的文件格式将所述已存储文件分成多个第一切片,对所述多个第一切片进行抽样,获取第一抽样数据,基于所述第一抽样数据计算所述已存储文件的所述bucketid。
8.进一步地,所述键值存储模块还用于预先建立切片首位置数据库,所述切片位置
数据库用于存储文件类型与首部切片偏移量的文件偏移量对应关系;所述获取所述已存储文件的文件格式,基于所述已存储文件的文件格式将所述已存储文件分成多个第一切片,包括:获取所述已存储文件的文件头;基于所述已存储文件的文件头确定所述已存储文件的文件格式;基于所述已存储文件的文件格式及所述文件偏移量对应关系,确定所述已存储文件的首部切片偏移量;基于所述首部切片偏移量确定切片的切片起始位置;基于所述切片起始位置将所述已存储文件分成所述多个第一切片。
9.进一步地,所述多个第一切片中的每一个大小均为2mb。
10.进一步地,所述多个第一切片包括一个第一首切片、至少一个第一中间切片及一个第一尾切片;所述对所述多个第一切片进行抽样,获取第一抽样数据,包括:获取所述第一首切片的全部字节;获取所述第一尾切片的全部字节;从所述第一中间切片中抽取至少一个中间字节;将所述第一首切片的全部字节、所述第一尾切片的全部字节及所述至少一个中间字节组成所述第一抽样数据。
11.进一步地,所述从所述第一中间切片中抽取至少一个中间字节,包括:判断所述已存储文件的文件大小是否小于第二预设大小阈值;若所述已存储文件的文件大小小于第二预设大小阈值,基于第一预设规则,从所述第一中间切片中抽取第一预设量的中间字节;若所述已存储文件的文件大小大于第二预设大小阈值,基于第二预设规则,从所述第一中间切片中抽取第二预设量的中间字节。
12.进一步地,所述第一预设量为2个,所述第二预设量为2
n’个,其中,所述n为正整数。
13.进一步地,所述存储请求获取模块确定对应所述待存储文件的bucketid,包括:获取所述待存储文件的文件大小;判断所述待存储文件的文件大小是否大于所述第一预设大小阈值;若否,基于所述待存储文件计算对应所述待存储文件的bucketid;若是,获取所述待存储文件的文件格式,基于所述待存储文件的文件格式将所述待存储文件分成多个第二切片,对所述多个第二切片进行抽样,获取第二抽样数据,基于所述第二抽样数据计算对应所述待存储文件的所述bucketid。
14.本发明的另一方面提供一种基于哈希算法的对象存储方法,包括:建立第一哈希表,确定对应已存储文件的第一哈希值及对象id,所述第一哈希表用于存储第一键值对,所述第一键值对用于表征所述第一哈希值与已存储文件的对象id的对应关系;计算所述已存储文件的bucketid;建立第二哈希表,所述第二哈希表用于存储第二键值对,所述键值对用于表征所述第一哈希值与所述bucketid的对应关系;接收用户端发送的待存储文件,确定对应所述待存储文件的bucketid;判断所述第二哈希表中是否存储有所述待存储文件的bucketid;若是,基于所述第二哈希表确定所述bucketid对应的第一哈希值,基于所述第一哈希表确定所述第一哈希值对应的已存储文件的对象id,将所述已存储文件的对象id发送至所述用户端;若否,将所述待存储文件进行存储,并计算所述待存储文件的第一哈希值,基于所述待存储文件的所述bucketid及所述第一哈希值更新所述第一哈希表及所述第二哈希表。
15.本发明的有益效果在于:
16.1、本发明能够自动识别用户端上传的文件是否为已存储文件,具有减少数据的重复性,优化存储空间的优点;
17.2、本发明对于文件大小大于预设阈值的文件,进行切片处理,并抽取抽样数据计
算文件对应的哈希值,具有有效提高计算大文件的哈希值的效率的优点。
18.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
19.图1是根据本技术一些实施例所示的一种基于哈希算法的对象存储系统的应用场景示意图;
20.图2是根据本技术一些实施例所示的一种基于哈希算法的对象存储系统的示例性框图;
21.图3是根据本技术一些实施例所示的一种基于哈希算法的对象存储方法的示例性流程图;
22.图4是根据本技术一些实施例所示的对多个第一切片进行抽样,获取第一抽样数据的示意图。
具体实施方式
23.下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
24.在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
25.在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
26.此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
27.图1是根据本技术一些实施例所示的一种基于哈希算法的对象存储系统的应用场景示意图。
28.如图1所示,基于哈希算法的对象存储系统100可以包括处理设备110、网络120、用户端130和存储设备140。
29.在一些实施例中,基于哈希算法的对象存储系统100可以对文件提供帮助。在一些实施例中,基于哈希算法的对象存储系统100可以应用在对象存储服务(object storage service)中,用于判断用户上传的文件是否为已存储文件,从而实现减少数据的重复性,优化存储空间。任何可以使用本技术所包含的基于哈希算法的对象存储方法的设备、场景和/或应用程序都在本技术的保护范围内。
30.在一些实施例中,处理设备110可以用于处理与文件存储相关的信息和/或数据。例如,处理设备110可以用于确定存储的每个已存储文件的对象id。还例如,处理设备110可以确定对应每个已存储文件的第一哈希值,还可以用于计算已存储文件的bucketid。处理设备110更多的描述可以参见本技术其他部分的描述。
31.在一些实施例中,处理设备110可以是区域的或者远程的。例如,处理设备110可以通过网络120访问存储于用户端130和存储设备140中的信息和/或资料。在一些实施例中,处理设备110可以直接与用户端130和存储设备140连接以访问存储于其中的信息和/或资料。在一些实施例中,处理设备110可以在云平台上执行。例如,该云平台可以包括私有云、公共云、混合云、社区云、分散式云、内部云等中的一种或其任意组合。
32.在一些实施例中,处理设备110可以包含处理器。该处理器可以处理与文件存储相关的数据和/或信息以执行一个或多个本技术中描述的功能。例如,处理器可以用于接收用户端130发送的待存储文件,确定对应待存储文件的bucketid。又例如,处理器可以判断键值存储模块是否存储有待存储文件的bucketid,若是,基于第二哈希表确定bucketid对应的第一哈希值,基于第一哈希表确定第一哈希值对应的已存储文件的对象id,将已存储文件的对象id发送至用户端130,若否,存储待存储文件,并计算所述待存储文件的第一哈希值,基于所述待存储文件的所述bucketid及所述第一哈希值更新所述第一哈希表及所述第二哈希表。在一些实施例中,处理器可以包含一个或多个子处理器(例如,单芯处理设备或多核多芯处理设备)。仅仅作为范例,处理器可包含中央处理器(cpu)、专用集成电路(asic)、专用指令处理器(asip)、图形处理器(gpu)、物理处理器(ppu)、数字信号处理器(dsp)、现场可编程门阵列(fpga)、可编辑逻辑电路(pld)、控制器、微控制器单元、精简指令集电脑(risc)、微处理器等或以上任意组合。
33.网络120可促进基于哈希算法的对象存储系统100中数据和/或信息的交换。在一些实施例中,基于哈希算法的对象存储系统100中的一个或多个组件(例如,处理设备110、用户端130和存储设备140)可以通过网络120发送数据和/或信息给基于哈希算法的对象存储系统100中的其他组件。例如,存储设备140存储的已存储文件可以通过网络120传输至处理设备110。又例如,处理设备110可以通过网络120将已存储文件的对象id发送至上传待存储文件的用户端130。在一些实施例中,网络120可以是任意类型的有线或无线网络。例如,网络120可以包括缆线网络、有线网络、光纤网络、电信网络、内部网络、网际网络、区域网络(lan)、广域网络(wan)、无线区域网络(wlan)、都会区域网络(man)、公共电话交换网络(pstn)、蓝牙网络、zigbee网络、近场通讯(nfc)网络等或以上任意组合。在一些实施例中,网络120可以包括一个或多个网络进出点。例如,网络120可以包含有线或无线网络进出点,如基站和/或网际网络交换点,通过这些进出点,基于哈希算法的对象存储系统100的一个或多个组件可以连接到网络120上以交换数据和/或信息。
34.在一些实施例中,用户端130可以获取基于哈希算法的对象存储系统100中的信息或数据。例如,用户端130可以上传待存储文件至处理设备110。还例如,用户端130可以接收处理设备110发送的已存储文件的对象id。在一些实施例中,用户端130可以包括移动装置、平板电脑、笔记本电脑等中的一种或其任意组合。在一些实施例中,移动装置可以包括可穿戴装置、智能行动装置、虚拟实境装置、增强实境装置等或其任意组合。在一些实施例中,可穿戴装置可以包括智能手环、智能鞋袜、智能眼镜、智能头盔、智能手表、智能衣物、智能背
包、智能配饰、智能手柄等或其任意组合。在一些实施例中,智能行动装置可以包括智能电话、个人数字助理(pda)、游戏装置、导航装置、pos装置等或其任意组合。
35.在一些实施例中,存储设备140可以与网络120连接以实现与基于哈希算法的对象存储系统100的一个或多个组件(例如,处理设备110、用户端130等)通讯。基于哈希算法的对象存储系统100的一个或多个组件可以通过网络120访问存储于存储设备140中的资料或指令。在一些实施例中,存储设备140可以直接与基于哈希算法的对象存储系统100中的一个或多个组件(如,处理设备110、用户端130)连接或通讯。在一些实施例中,存储设备140可以是处理设备110的一部分。在一些实施例中,处理设备110还可以位于用户端130中。
36.图2是根据本技术一些实施例所示的一种基于哈希算法的对象存储系统的示例性框图。
37.如图2所示,在一些实施例中,处理设备110可以包括文件存储模块、键值存储模块、存储请求获取模块及存储请求应答模块。
38.在一些实施例中,文件存储模块可以用于存储文件,还用于确定存储的每个已存储文件的对象id。在一些实施例中,文件存储模块可以基于对象存储服务(object storage service)存储文件。在一些实施例中,文件存储模块可以将已存储文件的存储地址作为已存储文件的对象id。
39.在一些实施例中,键值存储模块可以用于确定对应每个已存储文件的第一哈希值。在一些实施例中,键值存储模块可以根据哈希算法(例如,md5算法、sha256算法等)生成已存储文件的第一哈希值。
40.在一些实施例中,计算已存储文件的bucketid。其中,bucketid可以为固定长度的哈希值,文件的bucketid可以用于表征文件对应的第一键值对的哈希值。在一些实施例中,键值存储模块计算已存储文件的bucketid,可以包括:
41.获取已存储文件的文件大小;
42.判断已存储文件的文件大小是否大于第一预设大小阈值(例如,200mb);
43.若已存储文件的文件大小小于第一预设大小阈值,基于已存储文件计算对应已存储文件的bucketid;在一些实施例中,键值存储模块可以根据哈希算法(例如,md5算法、sha256算法等)基于已存储文件的全部数据直接计算已存储文件的第一哈希值;在一些实施例中,为了更准确地确定已存储文件的bucketid,键值存储模块还可以根据哈希算法(例如,md5算法、sha256算法等)基于已存储文件的去除文件头后的剩余数据直接计算已存储文件的bucketid;
44.若已存储文件的文件大小大于第一预设大小阈值,获取已存储文件的文件格式,基于已存储文件的文件格式将已存储文件分成多个第一切片,对多个第一切片进行抽样,获取第一抽样数据,基于第一抽样数据计算根据哈希算法(例如,md5算法、sha256算法等)已存储文件的bucketid。
45.其中,文件格式可以为jpeg(jpg)、png(png)、gif(gif)、tiff(tif)、windows bitmap(bmp)、cad(dwg)、adobe photoshop(psd)、rich text format(rtf)、xml(xml)、html(html)、email[thorough only](eml)、outlook express(dbx)、outlook(pst)、ms word(doc)、ms excel(xls)、ms access(mdb)、wordperfect(wpd)、、postscript(eps/ps)、adobe acrobat(pdf)、quicken(qdf)、windows password(pwl)、zip archive(zip)、rar archive
(rar)、wave(wav)、real audio(ram)、real media(rm)、mpeg(mpg)、mpeg(mpg)、quicktime(mov)、windows media(asf)、midi(mid)等格式中的一种。
[0046]
在一些实施例中,键值存储模块还可以用于预先建立切片首位置数据库,切片位置数据库存储有文件偏移量对应表,文件偏移量对应表可以用于存储文件类型、文件头及首部切片偏移量的文件偏移量对应关系。例如,对于jpeg格式的文件,其文件头(16进制)为ffd8ff,其对应的首部切片偏移量为24字节。在一些实施例中,首部切片偏移量可以用于表征从文件的首字节向后移动的字节数。
[0047]
在一些实施例中,文件偏移量对应表可以存储文件类型与首部切片偏移量的文件偏移量对应关系如表1所示。
[0048]
[0049][0050]
表1
[0051]
在一些实施例中,对文件大小是否大于第一预设大小阈值的文件进行切片抽样处理,能够有效提高计算文件的bucketid的效率。
[0052]
在一些实施例中,获取已存储文件的文件格式,基于已存储文件的文件格式将已存储文件分成多个第一切片,可以包括:
[0053]
获取已存储文件的文件头;
[0054]
基于已存储文件的文件头确定已存储文件的文件格式;在一些实施例中,键值存储模块可以根据文件偏移量对应表查找已存储文件的文件格式对应的文件格式;
[0055]
基于已存储文件的文件格式及文件偏移量对应关系,确定已存储文件的首部切片偏移量;在一些实施例中,键值存储模块可以根据文件偏移量对应表查找已存储文件的文件格式对应的首部切片偏移量;
[0056]
基于首部切片偏移量确定切片的切片起始位置;在一些实施例中,切片起始位置可以为首部切片偏移量后的第一个字节,例如,已存储文件为jpeg格式,其对应的首部切片偏移量为24字节,则该已存储文件的切片起始位置为第25个字节;
[0057]
基于切片起始位置按照文件将已存储文件分成多个第一切片,即将从已存储文件的切片起始位置至最后一个字节的数据分成多个第一切片;在一些实施例中,多个第一切片的大小相等。例如,多个第一切片中的每一个大小可以均为2mb。
[0058]
如图4所示,在一些实施例中,多个第一切片可以包括一个第一首切片、至少一个第一中间切片及一个第一尾切片。
[0059]
如图4所示,在一些实施例中,对多个第一切片进行抽样,获取第一抽样数据,图4中的阴影部分可以组成第一抽样数据。在一些实施例中,对多个第一切片进行抽样,获取第一抽样数据,可以包括:
[0060]
获取第一首切片的全部数据,即获取从已存储文件的切片起始位置至第一首切片的最后一个字节的全部数据;
[0061]
获取第一尾切片的全部数据,即获取从第一尾切片的第一个字节至第一尾切片的最后一个字节的全部数据;
[0062]
从第一中间切片中抽取至少一个中间字节,在一些实施例中,可以将第一中间切片分为三个子切片:即首部子切片、中部子切片及尾部子切片,首部子切片、中部子切片及尾部子切片的大小可以相同,可以从首部子切片、中部子切片及尾部子切片中的至少一个中抽取至少一个字节作为中间字节,例如,可以从首部子切片抽取第一个字节作为一个中间字节,还可以从中部子切片抽取第五个字节作为一个中间字节,并抽取中部子切片的第三十个字节作为中间字节;
[0063]
将第一首切片的全部字节、第一尾切片的全部字节及至少一个中间字节组成第一抽样数据;在一些实施例中,可以按照切片的先后顺序,将第一首切片的全部字节、第一尾切片的全部字节及至少一个中间字节组成第一抽样数据。
[0064]
在一些实施例中,从第一中间切片中抽取至少一个中间字节,可以包括:
[0065]
判断已存储文件的文件大小是否小于第二预设大小阈值(例如,1tb);
[0066]
若已存储文件的文件大小小于第二预设大小阈值,将第一中间切片分为三个子切片(即首部子切片、中部子切片及尾部子切片),基于第一预设规则,从每个子切片中均抽取第一预设量的字节,其中,第一预设量为2个字节;
[0067]
若已存储文件的文件大小大于第二预设大小阈值,将第一中间切片分为三个子切片(即首部子切片、中部子切片及尾部子切片),基于第二预设规则,从每个子切片中均抽取第二预设量的字节,其中,第二预设数量可以为2n个字节,其中,n为正整数。
[0068]
在一些实施例中,第一预设规则可以用于表征从每个子切片中抽取的第一预设量的中间字节的位置。例如,第一预设规则可以包括:从首部子切片抽取两个字节(首部子切片的第一个字节和第二个字节),从中部子切片抽取两个字节(中部子切片的第一个字节和第二个字节),从尾部子切片抽取两个字节(尾部子切片的第一个字节和第二个字节)作为中间字节。还例如,第一预设规则可以包括:从首部子切片抽取两个字节(首部子切片的倒数第一个字节和倒数第二个字节),从中部子切片抽取两个字节(中部子切片的第一个字节和第二个字节),从尾部子切片抽取两个字节(尾部子切片的倒数第一个字节和倒数第二个字节)作为中间字节。
[0069]
在一些实施例中,第一预设规则还可以与已存储文件的格式对应,不同格式的已存储文件对应的第一预设规则不同。例如,对于jpeg格式的文件,其对应的第一预设规则可以为:从首部子切片抽取两个字节(首部子切片的第一个字节和第二个字节),从中部子切片抽取两个字节(中部子切片的第一个字节和第五个字节),从尾部子切片抽取两个字节(尾部子切片的第一个字节和第二个字节)作为中间字节;对于gif格式的文件,其对应的第一预设规则可以为:从首部子切片抽取两个字节(首部子切片的倒数第一个字节和倒数第二个字节),从中部子切片抽取两个字节(中部子切片的第一个字节和第二个字节),从尾部子切片抽取两个字节(尾部子切片的倒数第一个字节和倒数第五个字节)作为中间字节;对于adobe acrobat格式的文件,其对应的第一预设规则可以包括:从首部子切片抽取两个字节(首部子切片的第一个字节和倒数第二个字节),从中部子切片抽取两个字节(中部子切片的第一个字节和倒数第二个字节),从尾部子切片抽取两个字节(尾部子切片的第一个字节和倒数第二个字节)作为中间字节。
[0070]
在一些实施例中,第二预设规则可以用于表征从每个子切片中抽取的第二预设量的中间字节的位置。例如,第二预设规则可以包括:从首部子切片抽取2n个字节(首部子切片的第一个字节至第2n个字节),从中部子切片抽取2n个字节(中部子切片的第一个字节至第2n个字节),从尾部子切片抽取2n个字节(尾部子切片的第一个字节至第2n个字节)作为中间字节。还例如,第一预设规则可以包括:从首部子切片抽取2n个字节(首部子切片的倒数第一个字节至倒数第2n个字节),从中部子切片抽取2n个字节(中部子切片的第一个字节至第2n个字节),从尾部子切片抽取2n个字节(尾部子切片的倒数第一个字节至倒数第2n个字节)作为中间字节。
[0071]
在一些实施例中,第二预设规则还可以与已存储文件的格式对应,不同格式的已存储文件对应的第二预设规则不同。例如,对于jpeg格式的文件,其对应的第二预设规则可以为:从首部子切片抽取2n个字节(首部子切片的第一个字节至第2n个字节),从中部子切片抽取2n个字节(中部子切片的第一个字节至第2n个字节),从尾部子切片抽取2n个字节(尾部子切片的第一个字节至第2n个字节)作为中间字节;对于png格式的文件,其对应的第二预设规则可以为:从首部子切片抽取2n个字节(首部子切片的倒数第2个字节至倒数第(2 2
n)
个字节),从中部子切片抽取2n个字节(中部子切片的第一个字节至第2n个字节),从尾部子切片抽取2n个字节(尾部子切片的倒数第一个字节至倒数第2n个字节)作为中间字节;对于adobe acrobat格式的文件,其对应的第二预设规则可以包括:从首部子切片抽取2n个字节(首部子切片的第3个字节至第(3 2n)个字节),从中部子切片抽取2n个字节(中部子切片的第5个字节至第(5 2n)个字节),从尾部子切片抽取2n个字节(尾部子切片的第一个字节至第2n个字节)作为中间字节。
[0072]
在一些实施例中,键值存储模块还可以判断已存储文件的文件大小是否大于第三预设大小阈值(例如,10tb),若是,将第一中间切片分为三个子切片(即首部子切片、中部子切片及尾部子切片),基于第三预设规则,从每个子切片中均抽取第三预设量的字节,其中,第三预设量为1个字节。其中,第三预设规则可以用于表征从每个子切片中抽取的第三预设量的中间字节的位置。例如,第三预设规则可以包括:从首部子切片抽取1个字节(首部子切片的第一个字节,从中部子切片抽取1个字节(中部子切片的第一个字节),从尾部子切片抽取1个字节(尾部子切片的第一个字节)作为中间字节。还例如,第三预设规则可以包括:从首部子切片抽取1个字节(首部子切片的倒数第一个字节),从中部子切片抽取1个字节(中部子切片的第25个字节),从尾部子切片抽取1个字节(尾部子切片的倒数第一个字节)作为中间字节。
[0073]
在一些实施例中,第三预设规则还可以与已存储文件的格式对应,不同格式的已存储文件对应的第三预设规则不同。例如,对于midi格式的文件,其对应的第三预设规则可以为:从首部子切片抽取1个字节(首部子切片的第一个字节,从中部子切片抽取1个字节(中部子切片的第一个字节),从尾部子切片抽取1个字节(尾部子切片的第一个字节)作为中间字节;对于windows password格式的文件,其对应的第三预设规则可以为:从首部子切片抽取1个字节(首部子切片的第100个字节),从中部子切片抽取1个字节(中部子切片的第25个字节),从尾部子切片抽取1个字节(尾部子切片的倒数第一个字节)作为中间字节;对于adobe acrobat格式的文件,其对应的第一预设规则可以包括:从首部子切片抽取1个字节(首部子切片的倒数第一个字节),从中部子切片抽取1个字节(中部子切片的第25个字
节),从尾部子切片抽取1个字节(尾部子切片的倒数第一个字节)作为中间字节。
[0074]
在一些实施例中,键值存储模块可以包括第一哈希表及第二哈希表,第一哈希表用于存储第一键值对,第一键值对用于表征第一哈希值与已存储文件的对象id的对应关系。在一些实施例中,第一键值对可以表示为“md5(key)=》value”,其中,md5(key)为第一哈希值,value为已存储文件的对象id。在一些实施例中,第二哈希表可以用于存储第二键值对,第二键值对用于表征第一哈希值与bucketid的对应关系。
[0075]
在一些实施例中,键值存储模块还可以通过利用全部字符类型(0~127)进行填充基于每个第一哈希值计算第一哈希值对应的已存储文件的bucketid。
[0076]
在一些实施例中,当键值存储模块中存储第一哈希值越多,第二哈希表也会越膨胀,所消耗的内存自然也会越大;第二哈希表的大量指针本身是长整型,所以内存存储的膨胀会十分可观,因此在优化内存时,可以考虑减少第一哈希值的个数,避免第一哈希表过于膨胀,从而达到减少内存消耗的目的。例如,通过预先计算,让至少一个第一哈希值在bucketid空间里碰撞,即一个bucketid下面挂了多个第一哈希值,示例地,平均每个bucketid下面挂10个第一哈希值,键值存储模块将会减少超过90%的第一哈希值的个数;第一哈希值的个数明显减少之后,第二哈希表就不会过于膨胀,消耗的内存自然就会减少,从而达到节约内存的目的。
[0077]
在一些实施例中,存储请求获取模块可以用于接收用户端130发送的待存储文件,确定对应待存储文件的bucketid。在一些实施例中,存储请求获取模块确定对应待存储文件的bucketid可以包括:
[0078]
判断待存储文件的文件大小是否大于第一预设大小阈值;
[0079]
若否,基于待存储文件计算对应待存储文件的bucketid;
[0080]
若是,获取待存储文件的文件格式,基于待存储文件的文件格式将待存储文件分成多个第二切片,对多个第二切片进行抽样,获取第二抽样数据,基于第二抽样数据计算对应待存储文件的bucketid。基于待存储文件的文件格式将待存储文件分成多个第二切片,对多个第二切片进行抽样,获取第二抽样数据的方式与基于已存储文件的文件格式将已存储文件分成多个第一切片,对多个第一切片进行抽样,获取第一抽样数据的方式类似,关于基于待存储文件的文件格式将待存储文件分成多个第二切片,对多个第二切片进行抽样的更多描述可以参见基于已存储文件的文件格式将已存储文件分成多个第一切片,对多个第一切片进行抽样的相关描述。
[0081]
在一些实施例中,存储请求应答模块可以用于判断键值存储模块的第二哈希表中是否存储有bucketid,若是,基于第二哈希表确定bucketid对应的第一哈希值,基于第一哈希表确定第一哈希值对应的已存储文件的对象id,将已存储文件的对象id发送至用户端130,若否,将待存储文件发送至文件存储模块进行存储,生成待存储文件的对象id,并计算待存储文件的第一哈希值,基于待存储文件的bucketid及第一哈希值更新第一哈希表及第二哈希表,例如,基于待存储文件的对象id和第一哈希值的对应关系更新第一哈希表,并基于待存储文件的第一哈希值和bucketid的对应关系更新第二哈希表。
[0082]
应该注意的是,上述描述仅出于说明性目的而提供,并不旨在限制本技术的范围。对于本领域普通技术人员而言,在本技术内容的指导下,可做出多种变化和修改。可以以各种方式组合本技术描述的示例性的实施例的特征、结构、方法和其他特征,以获得另外的
和/或替代的示例性的实施例。例如,存储设备140可以是包括云计算平台的数据存储设备,例如公共云、私有云、社区和混合云等。然而,这些变化与修改不会背离本技术的范围。
[0083]
图3是根据本技术一些实施例所示的一种基于哈希算法的对象存储方法的示例性流程图。
[0084]
如图3所示,一种基于哈希算法的对象存储方法可以包括下述步骤。在一些实施例中,一种基于哈希算法的对象存储方法可以由一种基于哈希算法的对象存储系统执行。下面呈现的一种基于哈希算法的对象存储方法的操作示意图是说明性的。在一些实施例中,可以利用一个或以上未描述的附加操作和/或未讨论的一个或以上操作来完成该过程。另外,图3中示出的和下面描述的流程的操作的顺序不旨在是限制性的。
[0085]
一种基于哈希算法的对象存储方法可以包括:
[0086]
建立第一哈希表,确定对应已存储文件的第一哈希值及对象id,第一哈希表用于存储第一键值对,第一键值对用于表征第一哈希值与已存储文件的对象id的对应关系;
[0087]
计算已存储文件的bucketid;
[0088]
建立第二哈希表,第二哈希表用于存储第二键值对,键值对用于表征第一哈希值与bucketid的对应关系;
[0089]
接收用户端发送的待存储文件,确定对应待存储文件的bucketid;
[0090]
判断第二哈希表中是否存储有待存储文件的bucketid是否已被存储;
[0091]
若是,基于第二哈希表确定bucketid对应的第一哈希值,基于第一哈希表确定第一哈希值对应的已存储文件的对象id,将已存储文件的对象id发送至用户端;
[0092]
若否,将待存储文件进行存储,并基于待存储文件的bucketid及第二哈希值更新第一哈希表及第二哈希表。
[0093]
在一些实施例中,可以通过判断键值存储模块是否存储有bucketid,来判断第二哈希值对应的bucketid是否已被存储,更多描述可以参考图1、2及其相关描述。
[0094]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0095]
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
再多了解一些

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

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

相关文献