基于云存储的数据存储方法及装置与流程

文档序号:25213334发布日期:2021-05-28 14:09阅读:51来源:国知局
基于云存储的数据存储方法及装置与流程

本公开涉及计算机存储技术领域,具体而言,涉及一种【基于云存储的数据存储方法及装置】。



背景技术:

重复数据删除即数据去重是一种在存储系统中广泛应用的技术。通过分析数据中是否存在重复而只保留一份相同的数据,可以有效的节省用户的存储空间,间接节省了服务商的硬件采购成本、人力能耗和机房的使用空间等等。同时在基于云存储的情况下可以有效减少对网络带宽的占用,进而提高访问和检索效率。

现有技术中目前存在两种去重方案:基于文件级的去重存储技术和基于数据块级的去重存储技术。

如图1a所示,基于文件级的数据去重存储技术针对存储用户上传的文件,采用文件级整体hash对比,如果发现hash值一致,就更新引用计数。如果发现hash值不一致,就存储该文件,然后更新引用计数。这种方式可以很好解决复制文件的重复存储问题,可以不用存储重复的文件。但在存储和读取过程中,会占用大量的网络带宽。

如图1b所示,基于数据块级的去重存储方案,将数据块分块并计算指纹后,判断指纹是否存在,如果存在,则将数据块的哈希(hash)指纹计数加1;如果不存在,则存储数据块。但是,这种数据块级的去重存储方案是基于物理服务器和磁盘存储、分布式存储之上的,通常需要三台以上服务器。数据块的分块算法是采用系统全局配置的固长分块,或系统配置的全局范围的内容变长分块方案。

现有技术存在以下问题:

1)重复数据检测粒度很粗,文件稍微有1个字节变化,就失去了重复检测效果;

2)全局配置的分块去重算法和压缩算法,不能根据数据格式和数据内容,细化到数据块;

3)不能针对后端存储的特征,针对不同的数据特征,设置不同的可靠性保存策略和存储策略;

4)不能很好的结合云存储多副本、按需、任意接入点等特征,实现更加弹性、灵活、可靠的重复数据去重压缩存储方案;

5)针对海量复制数据存储场景,比如备份数据等,会消耗大量的存储空间;

6)存储和读取过程,占用大量的网络带宽。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本公开实施例提供了一种【基于云存储的数据存储方法及装置】,以至少解决【不能针对不同应用场景的文件和数据块个性化去重存储处理和由于采用基于物理的服务器、磁盘等的数据去重存储技术而造成的构建去重存储服务门槛高、存储空间规划不灵活、使用维护成本高】的技术问题。

根据本公开实施例的一个方面,提供了一种基于云存储的数据存储方法,包括:获取构成上传文件的一部分的一数据块,其中,所述数据块携带有一应用标记;基于所述应用标记,处理所述数据块;将处理后的所述数据块存储到多个云存储中的相应的一个云存储中。

在本公开实施例中,通过基于云存储服务api接口之上构建消重压缩存储服务层的方式,解决了相关技术中【不能针对不同应用场景的文件和数据块个性化去重存储处理和由于采用基于物理的服务器、磁盘等的数据去重存储技术而造成的构建去重存储服务门槛高、存储空间规划不灵活、使用维护成本高】的技术问题,具有存储成本低、资源消耗小的技术效果。

附图说明

此处所说明的附图用来提供对本公开的进一步理解,构成本申请的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。在附图中:

图1a是根据现有技术的一种基于文件级的去重存储方法的流程图;

图1b是根据现有技术的一种基于数据块级的去重存储方法的流程图;

图2是根据本公开实施例的云平台的架构图;

图3是根据本公开实施例的去重存储方法的流程示意图;

图4是根据本公开实施例的聚合重删云存储方法的流程示意图;

图5是根据本公开实施例的从聚合重删云存储中读取文件的方法的流程示意图;

图6是根据本公开实施例的去重存储方法的另一流程示意图;

图7是根据本公开实施例的去重存储方法的又一流程示意图

图8是根据本公开实施例的基于云存储的数据存储方法的流程图。

具体实施方式

为了使本技术领域的人员更好地理解本公开方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分的实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。

需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本公开首先对所涉及到的一些术语进行定义:

数据块:数据块由任意多个字节构成,一个文件通常由任意多个数据块构成。

子数据块:将数据块进行分块后得到的小的数据块。

去重:是将重复的数据找出来,去掉重复的,保留一份并存储下来。

云存储:是指通过集群应用、网格技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。具体地,通过在数据中心建立一个或多个集中存储池,通过互联网协议接口提供存储服务,并提供数据上传、下载、存储目录管理等编程接口。

云kvdb:键值数据库,相对于普通关系型数据库,擅长存储键(key)值(value)对,并提供高性能查询和读写能力。通常查询和写入的时候,以key字符串作为请求参数,value可以是任何对象,比如字符串,整数等。

如上所述,现有技术中存在存储成本高、网络带宽资源消耗大的问题,为了解决该问题,本公开通过在云存储服务api接口之上构建一层分布式消重压缩存储服务层,来完成分布式重复数据检测和去重,从而大大降低了数据存储的成本、网络带宽资源消耗。同时,通过多个云存储的聚合,提供了更好的可靠性和弹性存储服务能力。

实施例1

根据本公开实施例,提供了一种云平台。图2是根据本公开实施例的云平台的架构图,如图2所示,该云平台200包括分布式消重压缩存储服务层22和云存储层l30和元数据存储层l31。

消重压缩存储服务层22包括应用接口222、分布式底层接口l1、分布式数据块去重写入层l21、分布式数据块读取层l22、分布式数据块缓存层l40和元数据缓存层l50。

在本实施例中,如图2所示,应用接口222包括httpapi2222、客户端2224、或者是操作系统读写接口(posxi文件系统接口)2226。在其他的实施例中,可以根据需要部署多个应用接口。为了方便访问,系统提供三种方式供使用。httpapi方式适合程序中集成云存储服务,posxi文件系统接口方式适合给予文件系统的应用存储数据,客户端方式适合安装部署到需要备份的服务器或电脑设备中。

底层分布式读写接口层l1被配置为实现基本的数据块读写,根据上层应用的写请求写入数据和根据上层应用的读请求从系统读取数据块。在其他的实施例中,可以根据实际需要在底层分布式读写接口层l1部署多个底层分布式读写接口。

在分布式数据块去重写入层l21中,根据实际需要,可以部署多个分布式数据块去重写入点。每个分布式数据块去重写入点被配置为对写入数据进行重复数据消除,以及把去重后的数据向下写入。

分布式数据块去重写入点包括:分割模块,被配置为将待写入的文件分割为多个数据块;去重模块,被配置为对所述多个数据块进行去重处理;存储模块,被配置为针对去重后的数据块中的每一个数据块,获取与该数据块对应的云存储连接信息,并调用云存储服务api接口,基于所述云存储连接信息将该数据块写入云存储层中的多个云存储中的相应的一个云存储中。

在本公开的另一个实施方式中,分布式数据块去重写入点还可以包括:获取模块,被配置为获取构成上传文件的一部分的一数据块,其中,所述数据块携带有一应用标记;处理模块,被配置为基于所述应用标记,处理所述数据块;存储模块,被配置为将处理后的所述数据块存储到多个云存储中的相应的一个云存储中。

在本公开的又一个实施方式中,分布式数据块去重写入点能够执行下文关于图3、图4和图8的数据块去重写入方法,此处不再赘述。

在分布式数据块读取层l22中,根据实际需要,可以部署多个分布式数据块读取点。每个读取点被配置为从底层用于存储数据块的云存储层l30中的云存储中读取数据块。

分布式数据块读取点包括:哈希值获取模块,被配置为根据元数据中记录的数据块的偏移,获取所述数据块的哈希值,其中,所述数据块为构成待读取的文件的多个数据块中的一个;数据块获取模块,被配置为根据所述哈希值判断分布式数据块缓存中是否存在所述哈希值对应的数据块;在所述分布式数据块缓存中不存在所述数据块的情况下,根据所述哈希值获取与所述数据块对应的云存储连接信息,并基于所述云存储连接信息从云存储层中的多个云存储中的相应的一个云存储中获取所述数据块;在所述分布式数据块缓存中存在所述数据块的情况下,直接从所述分布式数据块缓存中获取所述数据块;文件生成模块,被配置为基于所获取的数据块,生成所述待读取的文件。

在本公开的另一个实施方式中,分布式数据块读取点还可以包括应用标记获取模块,被配置为获取数据块的元数据中记录的应用标记;数据块获取模块,被配置为基于所述应用标记对所述数据块进行相应的处理,并读取处理后的数据块;文件生成模块,被配置为基于所获取的数据块,生成待读取的文件。

分布式数据块读取点能够用于执行下文关于图5的数据块去重读取方法,此处不再赘述。

分布式数据块缓存层l40被配置为将数据块缓存在内存中,从而提升系统的读写性能。在一个实施例实施方式中,可以采用memcache、redis或dcache等分布式k-v(key-value)服务来构建缓存点。

元数据缓存层l50被配置为将元数据缓存到内存中。

云存储层l30可以包括多个云存储,例如图2所示,云存储1、云存储2…云存储m。根据性能、可靠性、容量等需要可以增加更多的云存储。数据块云存储层l30被配置为存储数据块。

元数据存储层l31可以包括多个云kvdb(key-valuedatastore),例如,云kvdb1至云kvdbk,被配置为存储数据块的hash值、数据块偏移、文件唯一id等元数据。

因保存数据块哈希值的数据库服务器访问频率很高,为了降低io延迟,本公开实施例采用在构建查询服务器时,选择固态云盘或内存作为其加速缓存存储介质,并采用kvdb数据库进行存储,每次写入数据块所在文件的全局id、数据块在文件中的偏移和哈希值。

本公开实施例构建了针对虚拟化的云平台、数据库、或者一些频繁数据改写场景的云备份场景。云平台通常规模大,含有大量的重复数据,这些重复数据如果采用普通的云备份场景,备份产生的数据量随着备份次数的增加,数据量将积极增加。一个云平台,备份一年,产生的数据会高达数十倍,甚至百倍的原始数据。这将消耗大量的存储和网络带宽,以及计算资源。采用本技术方案以后,一个云平台,备份一年,累计需要的空间只是不重复数据的大小,大大优于传统的云存储方案。

实施例2

根据本公开实施例,提供了一种去重存储方法。图3是根据本公开实施例的去重存储方法的流程示意图。在本实施例中,该去重存储方法可以应用于如图2所示的云平台中。

下面,将结合图2和图3描述根据本公开实施例的去重存储方法。

在步骤s301处,写接口接收写入数据。

在写接口接收写入数据之前,系统需要进行初始化,将云存储划分为多个数据存储组。

在一个示例性实施方式中,根据云存储规模大小,规划对应的数据存储组的规模,例如4096个。一个数据存储组可以根据情况,设置固定的大小(例如100gb,或者其他),并且在该数据存储组中包含云存储连接信息(可以是同一个品牌,或不同品牌的云存储)、存储桶、在云存储中的映射目录路径等信息。

同时,根据配置的内存情况,初始化分布式数据块缓存的缓存容量,缓存策略先按照如下顺序缓存:访问频率越高,数据块最新,可以采用数据块引用越多。缓存get/set接口的键(key)用数据块的哈希(hash)值,键值(value)是数据块。

在系统初始化完成之后,写接口接收待写入的文件,在该写入接口中携带有应用标记,其中,应用标记用于指示如何处理及存储构成文件的数据块。

将文件分割为多个数据块,其中,每个数据块携带有应用标记。

在步骤s302处,根据应用标记进行预处理。

针对文件分割成的多个数据块中的每一个数据块,根据应用标记中的去重位,来判断是否将该数据块进行分块。在去重位指示需要去重的情况下,确定该数据块需要进行分块,否则,确定不需要进行分块。在需要分块的情况下,进一步根据应用标记的分块方式位确定是固长分块还是变长分块,然后对数据块进行分块,得到固定长度的多个子数据块或者变长的多个子数据块。

选取能保证唯一性的hash算法,计算每一个子数据块的hash值(也称为特征值或指纹)。常用的hash算法包括md5、sha1、sha-256、sha-512等。

在步骤s303处,遍历哈希值是否存在。

针对每一个哈希值,从保存子数据块的哈希值的元数据缓存层中查询是否存在相同的哈希值。为了提高查询速度,首先从缓存服务器中查询,如果从元数据缓存层中没有查询到存在相同的哈希值,则进一步从云kvdb的哈希值映射表中查询,并把从云kvdb查询到的记录更新到元数据缓存层中。

如果没有查找到相同的哈希值,说明该哈希值不存在,也就是云存储中没有当前待写入的子数据块,此时,执行步骤s305,否则,说明该哈希值已存在,也就是云存储中存在当前待写入的子数据块,执行步骤s304。

在步骤s304处,将hash值引用计数加1。

在当前子数据块的哈希值在哈希值映射表中存在时,即,云存储中存在当前待写入的子数据块时,则引用该hash记录,建立当前待写入的子数据块的哈希值与云存储所在的物理地址的映射关系,并更新哈希值引用计数将哈希值引用计数加1,在这种情况下,无需存储当前待写入的子数据块。在哈希值引用计数成功之后,跳到步骤s303,处理下一个被分割的数据子块。

在步骤s305处,基于应用标记对当前待写入的子数据块进行处理,计算当前待写入的子数据块对应的存储组信息,并获取云存储连接信息。

基于应用标记,确定是否要对该子数据块进行相应的处理,例如,加密或压缩。并在应用标记的加密位或压缩位指示加密或存储的情况下,对该子数据块进行加密或压缩。

采用分布均匀效果较好的hash函数(比如times33算法)计算hash的整数值,以存储组数量为模,对该整数值取模计算后的值映射到存储组编号。即计算出该子数据块对应的存储组的编号。

在获取到存储组的编号之后,根据存储组的编号获取该存储组对应的云存储连接信息,包括云存储入口和目录路径等。

在步骤s306处,判断子数据块写入云存储是否成功。

调用云存储的写入接口(通常为http协议形式实现),往云存储中写入当前待写入的子数据块。例如,基于应用标记中的归档位、跨云位和多副本位,确定将子数据块存储到哪个云存储中,以及是否需要备份副本。

如果存储成功,则跳到步骤s307,否则重新执行本步骤s306。

在步骤s307处,将哈希值等写入云kvdb,并将哈希值引用计数设置为1。

在判断当前待写入的数据块已保存成功之后,保存子数据块的在文件中的偏移值、哈希值、哈希值的引用计数(默认为0)和子数据块的应用标记到云kvdb服务器,并设置该哈希值的引用计数为1。

为了保证存储数据块签名值可靠性,通常至少选取2个以上的不同物理区域的云kvdb数据库服务器进行保存。在更新哈希值的时候,两个服务器更新成功,才算成功。否则重新发起更新流程,如果多次重试失败,则向应用反馈错误,中止存储写入流程。

为了提供更好的弹性性能,可以进一步根据数据块哈希值计算出的存储组编号,采用一致性hash算法,根据规划的云kvdb数量,映射到对应的云kvdb数据库存储服务器。

在步骤s308处,将子数据块存储到分布式数据块缓存层。

为了提升性能和数据可靠性,针对该子数据块,继续调用分布式缓存请求接口,向分布式数据块缓存层写入,并向其他多个位置的云存储服务器进行写入更新。在云存储写入前,通常根据访问来源ip地址,比对该ip和最近的云存储,优先写入最近位置的云存储服务器,同时异步向其他云存储服务器进行更新。

实施例3

因分块的数据块很小,通常在4kb-128kb之间大小,这样的大小,直接存入云存储,效率会非常低。因此可以将数据块进一步聚合为更大数据块的文件,比如1mb,后者更大。具体在重组时候,将数据块hash值、偏移、长度以及该聚合文件的全局唯一文件id进行映射,存储到云kvdb数据库,并将聚合后的数据块存储到云存储中。

根据本公开实施例,提供了另一种去重存储方法。图4是根据本公开实施例的聚合重删云存储方法的流程示意图。在本实施例中,该去重存储方法可以应用于如图2所示的云平台中。

图4中的步骤s401至步骤s404与图3中的步骤s301至s304的步骤相同,此处不再赘述。

在步骤s405处,聚合子数据块。

将不存在相同哈希值的各个子数据块进一步聚合为多个更大的数据块,比如1mb。

具体在聚合时,还将所有所分割的子数据块的哈希值、偏移、长度以及该聚合文件的全局唯一文件id进行映射。

在步骤s406处,存储聚合后的数据块。

计算聚合后的数据块对应的存储组信息,并获取云存储连接信息,根据云存储连接信息和存储组信息,将聚合后的数据块存储到存储组中。

在步骤s407,存储聚合后的数据块的元数据信息。

将映射后的所有所分割的数据块的哈希值、偏移、长度以及该聚合文件的全局唯一文件id存储到云kvdb中。

实施例4

根据本公开实施例,提供了一种从聚合重删云存储读取文件的方法。图5是根据本公开实施例的从聚合重删云存储读取文件的方法的流程示意图。

在步骤s501处,读接口接收到读取文件的读请求。

在步骤s502处,根据数据块在文件的偏移,获取所有数据块的哈希值。

当从聚合重删云存储读取文件时,也通常会选择访问来源ip地址,选取最近的云存储进行读取。当选择最近的云存储后,根据数据块在文件的偏移,获取所有数据块的哈希值。

在步骤s503处,从分布式数据缓存层中,根据哈希值读取数据块内容。

根据文件对应偏移的数据块的hash值,从分布式数据缓存层中读取对应的数据块。如果读取到数据块,则返回本步骤,从分布式数据缓存层中读取下一个数据块。否则,执行步骤s504。

在步骤s504处,根据哈希值查找数据存储组信息,进而得到包括云存储连接信息等。

在步骤s505处,从对应云存储中读取数据块。

如果从云存储中读取到数据块,则执行步骤s506,否则,返回本步骤继续读取该数据块。

在步骤s506处,根据数据块的应用标记进行相应的处理。

例如,应用标记的压缩位指示压缩的情况下,对数据块进行解压缩,在应用标记的加密位指示加密的情况下,对数据块进行解密处理。

在步骤s507处,根据数据分块方式位置重组所读取的数据块。

根据数据块在文件中的偏移值依次进行重组为原始的文件,最后返回给读取端口。

在另外的实施例中,当从聚合重删的云存储读取文件时,也通常会选择访问来源ip地址,选取最近的云存储进行读取。当选择最近的云存储后,会根据文件对应偏移的数据块的hash值,读取到对应的数据块,并根据数据块在文件中的偏移值依次进行重组为原始的文件,最后返回给读取端口。

实施例5

图6是根据本公开实施例的另一分布式数据块去重存储方法的示意图,如图6所示,该方法包括以下步骤:

步骤s602,在云存储服务api接口之上的消重压缩存储服务层,将待写入的文件分割为多个数据块,对所述多个数据块进行去重处理。

步骤s604,针对去重后的数据块中的每一个数据块,获取与该数据块对应的云存储连接信息。

步骤s606,调用云存储服务api接口,基于所述云存储连接信息将该数据块写入云存储层中的多个云存储中的相应的一个云存储中。

图7是根据本公开实施例的另一分布式数据块去重存储方法的示意图,如图7所示,该方法包括以下步骤:

步骤s702,获取构成上传文件的一部分的一数据块,其中,所述数据块携带有一应用标记;

步骤s704,基于所述应用标记,处理所述数据块;

步骤s706,将处理后的所述数据块存储到多个云存储中的相应的一个云存储中。

实施例6

本公开的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质存储有程序,在所述程序被执行时,可以使计算机执行如上所述的图3、4、6-8所示出的方法。

本公开的实施例还提供了另一种存储介质。可选地,在本实施例中,上述存储介质存储有程序,在所述程序被执行时,可以使计算机执行如上所述的图5所示出的方法。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

实施例7

本公开的实施例还提供了一计算机设备。可选地,在本实施例中,上述计算机设备能够执行如上所述的图3、4、6-8所示出的方法。

本公开的实施例还提供了另一种计算机设备。上述计算机设备能够执行如上所述的图5所示出的方法。

实施例8

本公开实施方式还提供了一种基于云存储的数据存储方法。如图8所示,包括以下步骤:

步骤s801,获取带有应用标记的文件。

在调用接口上传数据(文件)的时候,根据数据类型,或计划需要系统完成去重、压缩、加密、多副本、归档、或跨云等处理,在上传数据的同时携带应用标记这个参数。

应用标记是一个长度为1的无符号字节,其各个位可以表示如下的含义:

其中,bit1为预留位;bit2为跨云位,用于指示是否进行跨云存储;bit3为归档位,用于指示是否存储为归档;bit4为多副本位,用于指示是否进行多副本存储;bit5为加密位,用于指示是否进行加密处理;bit6为压缩位,用于指示是否进行压缩处理;bit7为分块方式位,用于指示是固长分块还是变长分块;bit8为去重位,用于指示是否进行去重处理。

步骤s802,解析应用标记,并保存该应用标记。

步骤s803,进行预处理。

前置云服务器接收到客户端上传的一个文件及与文件关联的应用标记后,将文件分割成多个数据块,并根据接口中的应用标记进行预处理。

例如,如果应用标记中的去重位指示去重,则表示需要对构成文件一部分的多个数据块中的每个数据块进行分块,并对分块后得到的子数据块进行去重。如果应用标记中的去重位指示不需要去重,则意味着该数据块无需分块,对该数据块去重即可。

对于无需再分块的数据块,抽样字节来计算该数据块的哈希值(指纹)。

对于需要再分块的数据块,如果分块方式位指示固长分块,则基于预设的固定长度对该数据块进行分块得到多个子数据块,并计算固定长的子数据块的哈希值集合;如果分块方式位指示变长分块,则基于内容识别等对该数据块进行变长切块得到多个子数据块,并计算变长的子数据块的哈希值集合。此外,每个子数据块都携带有应用标记,并且应用标记都是相同的。

此外,如果该数据块是预先配置的特征块,则直接设置特征块的哈希值而无需计算,并且,也不需要对该数据块进行分块。

对数据块进行分块后得到的每一个子数据块的对应的应用标记都保留在元数据服务器中该子数据块对应的元数据中。

步骤s804,判断是否已存在哈希值。

如果在步骤s803中,数据块被固长分块或变长分块,则在本步骤中针对数据块分块后形成的每一个子数据块,进行去重处理。即,查询云存储哈希指纹库,判断云存储哈希指纹库中是否存在针对该子数据块的哈希值,如果存在,则执行步骤s805,否则执行步骤s806。

如果在步骤s803中,数据块并没有被分块,即是无需分块的情况下,则在本步骤中直接对该数据块进行去重处理,去重处理的步骤类似于子数据块的去重处理,此处不再赘述。

需要注意的是,在步骤s804至s818中,所针对的处理对象因在s803中的分块与否而不同。如果在步骤s803中对数据块进行了分块处理,则,处理的对象是分块后得到的多个子数据块中的一个子数据块,如果在步骤s803中对数据块未进行分块处理,则,处理的对象是该数据块。此后,为简单起见,用数据块或子数据块来统称不同情况下的处理对象,即,处理对象为数据块时,针对的是未分块的情形,处理对象为子数据块时,针对的是分块的情形。

步骤s805,将哈希值引用计数加1。

将数据块或子数据块的哈希值引用计数加1,并结束对该数据块或子数据块的处理,而执行对下一个数据块或子数据块的处理。

步骤s806,判断是否压缩。

基于当前数据块或子数据块的应用标记中的压缩位,判断该数据块或子数据块是否需要压缩。如果需要压缩,则执行步骤s807,否则执行步骤s808。

步骤s807,压缩处理。

对数据块或子数据块进行压缩处理。

步骤s808,判断是否加密。

基于数据块或子数据块应用标记中的加密位,判断是否需要加密。如果需要加密,执行步骤s809,否则执行步骤s810。

步骤s809,加密处理。

对数据块或子数据块基于初始化的加密算法进行加密。

步骤s810,判断是否跨云。

基于数据块或子数据块的应用标记中的跨云位,判断该数据块或子数据块是否需要跨云存储。如果需要跨云,则执行步骤s811,否则,执行步骤s812。

步骤s811,选取不同云存储品牌配置。

步骤s812,判断是否归档。

基于数据块或子数据块的应用标记的归档位,判断该数据块或子数据块是否需要归档存储。如果需要归档存储,执行步骤s813,以存入云归档服务,否则执行步骤s814,以存入普通的云存储服务。

步骤s813,选取归档配置。

步骤s814,存储到云存储中。

在执行了归档配置的情况下,将数据块或子数据块存储到云归档服务中,否则将该数据块或子数据块存储到普通的云存储服务中。

步骤s815,在该云存储位置,创建哈希值,并设置为1。

步骤s816,判断是否为多副本。

如果数据块或子数据块的应用标记的副本位指示多副本,则执行步骤s817,否则,则进行下一个数据块或子数据块的处理。

步骤s817,存储到另外指定云存储上。

将该数据块或子数据块存储一到多分到另外指定的云存储上。

步骤s818,在该云存储位置创建哈希值,并设置为1。

在该云存储位置创建哈希值,并设置为1,并进行下一个数据块或子数据块的处理。

在本公开的另一实施方式中,在开始执行上述流程之前还可以先进行初始化。

初始化两种品牌以上的云存储服务、云存储类型(普通云存储,或归档云存储)和规模大小,规划对应的数据存储组的规模(比如4096个)。每种品牌对应的两类可存储类型可以各自初始化一定存储组规模。一个存储组可以根据情况,固定一个大小(比如100gb,或者其他),并且包含云存储连接信息(可以是同一个品牌,或不同品牌的云存储)、存储桶、在云存储中的映射目录路径等信息。一个数据块计算完hash后,并进一步采用分布均匀效果较好的hash函数(比如times33算法)计算hash的整数值,以存储组数量为模,对整数值取模计算后的值映射到存储组编号。即数据块对应存储组的编号。

同时,根据平台配置的内存情况,初始化分布式缓存服务的缓存容量,缓存策略先按照如下顺序缓存:访问频率越高,数据块最新,可以采用数据块引用越多。

同时针对特征块,设置初始化特征库集合,其中包括空块及空块对应的哈希值。

初始化加密算法和加密key,用作后期数据块加密使用。

初始化固长分块算法的固定长度,以及基于内容边界识别的变长分块算法。

此外,在本实施例中,处理多个子数据块时,是采用的循环方式,即,一个子数据块处理完之后,再处理下一个子数据块,直到所有的子数据块都处理完。同样的,处理构成一个文件的多个数据块时,也是一个数据块处理完之后再处理其他的数据块。但本公开并不限于此,在其他的实施方式中,可以多任务并发地同时处理多个子数据块或者数据块,以提高存储速度。

本公开还提供了如下配置的示例。

1.一种基于云存储的数据存储方法,其中,包括:

获取构成上传文件的一部分的一数据块,其中,所述数据块携带有一应用标记;

基于所述应用标记,处理所述数据块;

将处理后的所述数据块存储到多个云存储中的相应的一个云存储中。

2.根据示例1所述的方法,其中,所述应用标记包括以下至少之一:

去重位,用于指示是否进行去重处理;

分块方式位,用于指示是固长分块还是变长分块;

压缩位,用于指示是否进行压缩处理;

加密位,用于指示是否进行加密处理;

多副本位,用于指示是否进行多副本存储;

归档位,用于指示是否存储为归档;和

跨云位,用于指示是否进行跨云存储。

3.根据示例2所述的方法,其中,基于所述应用标记,处理所述数据块包括以下至少之一:在所述去重位指示进行去重处理的情况下,对所述数据块进行去重处理;

在所述压缩位指示进行压缩处理的情况下,对所述数据块进行压缩处理;

在所述加密位指示进行加密处理的情况下,对所述数据块进行加密处理;

在所述跨云位指示跨云存储的情况下,选取不同云存储品牌配置,以对所述数据块进行跨云存储;

在所述归档位指示归档存储的情况下,选取归档配置,以对所述数据块进行归档存储。

4.根据示例2所述的方法,其中,将处理后的所述数据块存储到多个云存储中的相应的一个云存储中之后,所述方法还包括:在所述多副本位指示进行多副本存储的情况下,将所述数据块写入到所述多个云存储中的其他的一云存储中。

5.根据示例2所述的方法,其中,在基于所述应用标记处理所述数据块之前,所述方法还包括:基于所述应用标记对所述数据块进行预处理。

6.根据示例5所述的方法,其中,基于所述应用标记对所述数据块进行预处理包括以下至少之一:

在所述去重位指示需要去重的情况下,确定所述数据块需要分块,并在所述分块方式位指示固长分块的情况下,基于预设的固定长度将所述数据块分割为多个子数据块,在所述分块方式位指示变长分块的情况下,基于所述数据块的内容识别,以变长切块的方式将所述数据块分割为多个子数据块;和

在所述去重位指示无需去重的情况下,无需对所述数据块进行分块。

7.根据示例6所述的方法,其中,基于所述应用标记对所述数据块进行预处理还包括:

在所述去重位指示无需去重的情况下,对所述数据块进行抽样字节,并基于所述抽样字节计算所述数据块的指纹;和/或

在所述去重位指示需要去重的情况下,分别计算所述多个子数据块中的每个子数据块的指纹。

8.根据示例5所述的方法,其中,基于所述应用标记对所述数据块进行预处理之前,所述方法还包括:在所述数据块为特征块的情况下,无需对所述数据块进行分块,并且无需计算所述数据块的指纹而直接设置所述数据块的指纹。

9.根据示例5至8中任一项所述的方法,其中,基于所述应用标记对所述数据块进行预处理之后,所述方法还包括将所述应用标记保存在所述数据块的元数据中。

10.根据示例1所述的方法,其中,在获取构成上传文件的一部分的一数据块之前,所述方法还包括初始化过程,其中,所述初始化过程包括以下至少之一:

初始化所述多个云存储,为所述多个云存储中的每个云存储设置云存储类型、云存储规模大小和存储组,其中,所述云存储类型包括普通云存储和归档云存储;

初始化分布式缓存服务的缓存容量;

针对特征块,设置初始化特征库集合,所述特征库集合包括空块及空块对应的指纹;

初始化加密算法和加密秘钥,用于加密所述数据块;

初始化固长分块算法的固定长度和基于内容边界识别的变长分块算法,用于将所述数据块分割为多个子数据块。

11.根据示例3所述的方法,其中,对所述数据块进行去重处理包括:

基于所述分块方式位,将所述数据块分为多个子数据块,其中,在所述分块方式位指示固长分块的情况下,基于预设的固定长度将所述数据块分割为多个子数据块,在所述分块方式位指示变长分块的情况下,基于所述数据块的内容识别,以变长切块的方式将所述数据块分割为多个子数据块;

对所述多个子数据块中的每一个子数据块进行去重处理。

12.根据示例11所述的方法,其中,对所述多个子数据块中的每一个子数据块进行去重处理包括:

选取能够保证唯一性的哈希算法,计算所述多个子数据块中的每一个子数据块的哈希值;

针对所计算出的每一个子数据块的哈希值,遍历所存储的元数据,以判断所述元数据中是否存在所述哈希值,其中,所述元数据中包括已存储的子数据块的哈希信息;

在所述元数据中存在所述哈希值的情况下,将所述哈希值对应的子数据块从所述多个子数据块中消除,不进行存储;

在所述元数据中不存在所述哈希值的情况下,将所述哈希值对应的子数据块作为所述去重后的子数据块中的一个。

13.根据示例12所述的方法,其中,遍历所存储的元数据,以判断所述元数据中是否存在所述哈希值包括:

遍历元数据缓存中的元数据,以判断所述元数据缓存中的元数据中是否存在所述哈希值;

在所述元数据缓存中的元数据中不存在所述哈希值的情况下,进一步遍历元数据存储层中的元数据,以判断所述元数据存储层中的元数据中是否存在所述哈希值;

其中,所述元数据存储层包括多个云kvdb。

14.根据示例13所述的方法,其中,在所述元数据存储层中的元数据中存在所述哈希值的情况下,将所述哈希值更新到所述元数据缓存中。

15.根据示例12所述的方法,其中,在所述元数据中存在所述哈希值的情况下,所述方法还包括:更新在所述元数据中的已存储的子数据块的哈希信息中的、与所述哈希值对应的哈希值引用计数。

16.根据示例11至15中任一项所述的方法,其中,在对所述多个子数据块中的每一个子数据块进行去重处理之后,所述方法还包括:

基于所述去重后的子数据块的数量及所述去重后的子数据块中的每一个子数据块的大小,将所述去重后的数据子块中的至少部分数据子块聚合为一个数据块,并将该数据块作为处理后的所述数据块。

17.根据示例1所述的方法,其中,将处理后的所述数据块存储到多个云存储中的相应的一个云存储中包括:

在所述数据块被分割为多个子数据块的情况下,将所述多个子数据块中的每一个子数据块作为处理后的所述数据块;

在所述数据块未被分割为多个子数据块的情况下,将所述数据块作为处理后的所述数据块;

获取处理后的所述数据块的云存储连接信息,基于所述云存储连接信息将处理后的所述数据块写入所述多个云存储中的相应的一个云存储中的多个存储组中的一存储组中。

18.根据示例17所述的方法,其中,获取处理后的所述数据块的云存储连接信息包括:

采用分布均匀效果好的哈希函数计算处理后的所述数据块的哈希的整数值,以所述多个存储组的数量为模,对所述整数值取模,得到一计算值;

基于所述计算值,获取与所述计算值对应的所述存储组的编号;

基于所述存储组的编号,获取所述云存储连接信息。

19.根据示例18所述的方法,其中,所述云存储连接信息包括以下至少之一:云存储入口、映射目标路径、所述存储组的编号、归档参数和云存储类型。

20.根据示例1所述的方法,其中,将处理后的所述数据块存储到多个云存储中的相应的一个云存储中包括:

根据所述文件的来源ip地址,选择离所述来源ip地址最近的云存储;

调用云存储服务api接口,将处理后的所述数据块写入所选的云存储中。

21.根据示例1所述的方法,其中,将处理后的所述数据块存储到多个云存储中的相应的一个云存储中之后,所述方法还包括:

将处理后的所述数据块的哈希值的引用计数设置为1;

将所述文件的id、处理后的所述数据块在所述文件中的偏移值、处理后的所述数据块的所述哈希值以及所述哈希值的引用计数保存到元数据存储层中。

22.根据示例21所述的方法,其中,将处理后的所述数据块在所述文件中的偏移值、所述哈希值和所述哈希值的引用计数保存到元数据存储层中之后,所述方法还包括:将所述文件的id、处理后的所述数据块在所述文件中的偏移值、处理后的所述数据块的所述哈希值以及所述哈希值的引用计数缓存到元数据缓存中。

23.根据示例22所述的方法,其中,所述元数据缓存通过采用分布式k-v服务来构建,所述分布式k-v服务包括memcache、redis或dcache。

24.根据示例22或23所述的方法,其中,所述元数据的缓存为预先初始化的元数据缓存层,用于缓存所述元数据。

25.根据示例1所述的方法,其中,将处理后的所述数据块存储到多个云存储中的相应的一个云存储中之后,所述方法还包括:

调用分布式缓存请求接口,将该数据块缓存到分布式数据缓存中;

基于该数据块的重要等级,将该数据块保存到与所述云存储不同的其他云存储中。

26.根据示例25所述的方法,其中,所述分布式数据块缓存的缓存策略基于以下至少之一:数据块的访问频率、数据块的更新时间和数据块的哈希值被引用次数。

27.根据示例25所述的方法,其中,在获取构成上传文件的一部分的一数据块之前,所述方法还包括:

接收所述上传文件和与所述文件关联的所述应用标记;

将所述上传文件分割为多个数据块,其中,所述多个数据块中包括构成所述上传文件的一部分的所述数据块。

28.一种读取基于云存储的数据的方法,其中,包括:

获取数据块的元数据中记录的应用标记;

基于所述应用标记对所述数据块进行相应的处理;

基于处理后的数据块,生成待读取的文件。

29.根据示例28所述的方法,其中,包括:基于所述应用标记对所述数据块进行相应的处理之前,所述方法还包括:

获取所述数据块的哈希值,其中,所述数据块为构成待读取的文件的多个数据块中的一个;

根据所述哈希值判断分布式数据块缓存中是否存在所述哈希值对应的数据块;

在所述分布式数据块缓存中不存在所述数据块的情况下,根据所述哈希值获取与所述数据块对应的云存储连接信息,并基于所述云存储连接信息从云存储层中的多个云存储中的相应的一个云存储中获取所述数据块;

在所述分布式数据块缓存中存在所述数据块的情况下,直接从所述分布式数据块缓存中获取所述数据块。

30.根据示例29所述的方法,其中,基于所述云存储连接信息从云存储层中的多个云存储中的相应的一个云存储中获取所述数据块包括:

根据所述待读取的文件的读取请求的来源ip地址,选择离所述来源ip地址最近的云存储;

根据所述哈希值,从所选的云存储中的相应的一个存储组中读取所述数据块。

31.根据示例30所述的方法,其中,基于所述应用标记对所述数据块进行相应的处理包括:

在所述应用标记的压缩位指示进行压缩处理的情况下,对所获取的数据块进行解压缩处理;

在所述应用标记的加密位指示进行加密处理的情况下,对所获取的数据块进行解密处理。

32.一种分布式数据块去重写入点,其中,包括:

获取模块,被配置为获取构成上传文件的一部分的一数据块,其中,所述数据块携带有一应用标记;

处理模块,被配置为基于所述应用标记,处理所述数据块;

存储模块,被配置为将处理后的所述数据块存储到多个云存储中的相应的一个云存储中。

33.根据示例32所述的写入点,其中,所述应用标记包括以下至少之一:

去重位,用于指示是否进行去重处理;

分块方式位,用于指示是固长分块还是变长分块;

压缩位,用于指示是否进行压缩处理;

加密位,用于指示是否进行加密处理;

多副本位,用于指示是否进行多副本存储;

归档位,用于指示是否存储为归档;和

跨云位,用于指示是否进行跨云存储。

34.根据示例33所述的写入点,其中,所述处理模块还被配置为以下至少之一:

在所述去重位指示进行去重处理的情况下,对所述数据块进行去重处理;

在所述压缩位指示进行压缩处理的情况下,对所述数据块进行压缩处理;

在所述加密位指示进行加密处理的情况下,对所述数据块进行加密处理;

在所述跨云位指示跨云存储的情况下,选取不同云存储品牌配置,以对所述数据块进行跨云存储;

在所述归档位指示归档存储的情况下,选取归档配置,以对所述数据块进行归档存储。

35.根据示例33所述的写入点,其中,所述处理模块,被配置为:在所述多副本位指示进行多副本存储的情况下,将所述数据块写入到所述多个云存储中的其他的一云存储中。

36.根据示例33所述的写入点,其中,还包括预处理模块,被配置为:基于所述应用标记对所述文件进行预处理。

37.根据示例35所述的写入点,其中,所述预处理模块还被配置为以下至少之一:

在所述去重位指示需要去重的情况下,确定所述数据块需要分块,并在所述分块方式位指示固长分块的情况下,基于预设的固定长度将所述数据块分割为多个子数据块,在所述分块方式位指示变长分块的情况下,基于所述数据块的内容识别,以变长切块的方式将所述数据块分割为多个子数据块;和

在所述去重位指示无需去重的情况下,无需对所述数据块进行分块。

38.根据示例37所述的写入点,其中,所述预处理模块还被配置为:

在所述去重位指示无需去重的情况下,对所述数据块进行抽样字节,并基于所述抽样字节计算所述数据块的指纹;和/或

在所述去重位指示需要去重的情况下,分别计算所述多个子数据块中的每个子数据块的指纹。

39.根据示例36所述的写入点,其中,所述预处理模块还被配置为:在所述数据块为特征块的情况下,无需对所述数据块进行分块,并且无需计算所述数据块的指纹而直接设置所述数据块的指纹。

40.根据示例32至39中任一项所述的写入点,其中,所述处理模块还被配置为将所述应用标记保存在所述数据块的元数据中。

41.根据示例34所述的写入点,其中,所述处理模块还被配置为:

基于所述分块方式位,将所述数据块分为多个子数据块,其中,在所述分块方式位指示固长分块的情况下,基于预设的固定长度将所述数据块分割为多个子数据块,在所述分块方式位指示变长分块的情况下,基于所述数据块的内容识别,以变长切块的方式将所述数据块分割为多个子数据块;

对所述多个子数据块中的每一个子数据块进行去重处理。

42.一种分布式数据块读取点,其中,包括:

应用标记获取模块,被配置为获取数据块的元数据中记录的应用标记;

数据块获取模块,被配置为基于所述应用标记对所述数据块进行相应的处理,并读取处理后的数据块;

文件生成模块,被配置为基于所获取的数据块,生成待读取的文件。

43.一种分布式消重压缩存储服务层,其中,设置在云存储服务api接口之上,所述消重压缩存储服务层包括分布式数据块去重写入层和分布式数据块读取层,其中,所述分布式数据块去重写入层包括至少一个如示例32至41中任一项所述的分布式数据块去重写入点,所述分布式数据块读取层包括至少一个如示例42所述的分布式数据块读取点。

44.根据示例43所述的分布式消重压缩存储服务层,其中,所述分布式消重压缩存储服务层还包括:

分布式数据块缓存层,被配置为缓存数据块;

元数据缓存层,被配置为缓存所述数据块的元数据,

其中,所述分布式数据块缓存层和所述元数据缓存层的存储介质为固态云盘或内存。

45.一种云平台,其中,包括:

云存储层,用于存储数据;

云存储服务api接口;

如示例43和44中任一项所述的分布式消重压缩存储服务层,设置在所述云存储服务api接口之上,被配置为通过所述云存储服务api接口与所述云存储层通信,以从所述云存储层读取数据和/或向所述云存储层写入数据。

46.根据示例45所述的云平台,其中,所述数据块云存储层包括多个云存储,所述元数据存储层包括多个云kvdb。

47.根据示例45所述的云平台,其中,所述云平台还包括应用接口层,所述应用接口层包括以下至少之一:httpapi,客户端、posxi文件系统接口。

48.根据示例47所述的云平台,其中,所述云平台还包括分布式底层读写接口层,被配置为基于所述应用接口层的读写请求,调用所述分布式消重压缩存储服务层。

49.一种计算机可读存储介质,其上存储有程序,在所述程序被执行时,使得计算机执行如示例1至31中任一项所述的方法。

50.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其中,所述处理器执行所述计算机程序时实现如示例1至31中任一项所述的方法。

以上所述仅是本公开的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本公开原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本公开的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1