CN109901798B - 数据存储方法及装置 - Google Patents
数据存储方法及装置 Download PDFInfo
- Publication number
- CN109901798B CN109901798B CN201910148730.9A CN201910148730A CN109901798B CN 109901798 B CN109901798 B CN 109901798B CN 201910148730 A CN201910148730 A CN 201910148730A CN 109901798 B CN109901798 B CN 109901798B
- Authority
- CN
- China
- Prior art keywords
- data
- storage
- storage capacity
- capacity
- request
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种数据存储方法及装置;其中,该方法包括:如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个请求中的一个请求分配查询权限;将分配到查询权限的请求确定为当前请求;查询当前用户的配额信息和当前请求包含的待存储数据的数据量;判断配额信息中的剩余存储容量是否满足数据量;如果是,从剩余存储容量中为当前请求锁定数据量大小的容量,上传待存储数据,并在待存储数据上传成功时,更新当前用户的配额信息。本公开可以避免多请求并发查询配额信息导致查询到的配额信息不准确,从而使用户的实际存储量超出用户配额的问题,提高用户体验度同时优化了存储系统的性能。
Description
技术领域
本公开涉及数据存储技术领域,尤其是涉及一种数据存储方法及装置。
背景技术
相关技术中,用户在使用数据存储服务时,如对象存储服务、块存储服务、文件存储服务等,可以预先设置用户配额,该用户配额即该用户可以使用的最大存储容量。用户在上传数据时,需要进行配额检查,当用户的剩余存储容量能够满足该数据时,才进行上传操作,进而再更新该用户的剩余存储容量;但是上传数据往往需要一定的时间,在高并发或负载均衡情况下,如果在更新剩余存储容量之前,其他数据也完成了上传,则会导致用户实际存储的数据量超出用户配额,从而影响用户体验度和存储系统的性能。
发明内容
有鉴于此,本公开的目的在于提供一种数据存储方法及装置,以避免多请求并发查询配额信息导致查询到的配额信息不准确,从而使用户的实际存储量超出用户配额的问题,提高用户体验度同时优化了存储系统的性能。
为了实现上述目的,本公开采用的技术方案如下:
第一方面,本公开提供了一种数据存储方法,该方法应用于存储集群的管理服务器;该方法包括:如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个请求中的一个请求分配查询权限;将分配到查询权限的请求确定为当前请求;查询当前用户的配额信息和当前请求包含的待存储数据的数据量;判断配额信息中的剩余存储容量是否满足数据量;如果是,从剩余存储容量中为当前请求锁定数据量大小的容量,上传待存储数据,并在待存储数据上传成功时,更新当前用户的配额信息。
第二方面,本公开提供了一种数据存储装置,该装置设置于存储集群的管理服务器;该装置包括:权限分配模块,用于如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个请求中的一个请求分配查询权限;当前请求确定模块,用于将分配到查询权限的请求确定为当前请求;数据量查询模块,用于查询当前用户的配额信息和当前请求包含的待存储数据的数据量;判断模块,用于判断配额信息中的剩余存储容量是否满足数据量;容量划分和数据上传模块,用于如果配额信息中的剩余存储容量满足数据量,从剩余存储容量中为当前请求锁定数据量大小的容量,上传待存储数据,并在待存储数据上传成功时,更新当前用户的配额信息。
第三方面,本公开提供了一种管理服务器,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述数据存储方法。
第四方面,本公开提供了一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述数据存储方法。
上述数据存储方法、装置、管理服务器和机器可读存储介质,如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个请求中的一个请求分配查询权限;对于分配到查询权限的当前请求,查询当前用户的配额信息和当前请求包含的待存储数据的数据量;如果当前用户的剩余存储容量满足数据量,则从剩余存储容量中为当前请求锁定数据量大小的容量,进而上传待存储数据并更新当前用户的配额信息。该方式中,对于一个用户,一次仅有一个请求查询配额信息,并从剩余存储容量中锁定待存储数据的数据量大小的容量,避免了多请求并发查询配额信息导致查询到的配额信息不准确,从而使用户的实际存储量超出用户配额的问题,提高了用户体验度同时优化了存储系统的性能。
本公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本公开的上述技术即可得知。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施方式,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施方式提供的一种存储集群的示意图;
图2为本公开实施方式提供的一种数据存储方法的流程图;
图3为本公开实施方式提供的另一种数据存储方法的流程图;
图4为本公开实施方式提供的为当前请求划分存储容量之前,当前用户的配额信息的示意图;
图5为本公开实施方式提供的为当前请求划分存储容量之后,当前用户的配额信息的示意图;
图6为本公开实施方式提供的为当前请求对应的待存储数据上传成功后,当前用户的配额信息的示意图;
图7为本公开实施方式提供的另一种数据存储方法的流程图;
图8为本公开实施方式提供的一种数据存储装置的结构示意图;
图9为本公开实施方式提供的一种管理服务器的结构示意图。
具体实施方式
为使本公开实施方式的目的、技术方案和优点更加清楚,下面将结合附图对本公开的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本公开一部分实施方式,而不是全部的实施方式。基于本公开中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本公开保护的范围。
为了便于理解,首先描述一种适用于本公开的数据存储方法的应用场景;如图1所示一种存储集群的示意图,该存储集群可以为对象存储集群、块存储集群、文件存储集群等,其中,对象存储集群是以对象为存储单元的存储集群,块存储集群是以数据块为存储单元的存储集群,文件存储集群是以文件为存储单元的存储集群;具体存储集群的类型以及数据存储形式在下述实施方式中不做具体限定。
该存储集群包括网关服务器、管理服务器和存储节点;其中,网关服务器和存储节点分别与管理服务器连接;图1中以两个网关服务器、三个存储节点为例,该存储节点可以为物理机形式的存储服务器或在物理机上划分的虚拟机形式的存储服务器;同理,管理服务器也可以为物理机或虚拟机形式。该管理服务器也可以为主备模式,即该管理服务器包括主服务器和备服务器,该主服务器和备服务器分别与上述存储节点连接;正常状态下,由主服务器对存储节点进行管理,当主服务器发生故障时,由备用服务器代替主服务器管理存储节点。
基于上述描述的存储集群,相关技术中的数据存储方法描述如下:
首先,网关服务器接收到用户发送的数据存储请求后,将该数据存储请求进行格式转换,转换成存储集群内部各个设备可以识别的请求,再将转换后的数据存储请求发送至管理服务器。
管理服务器接收到数据存储请求后,首先进行初始化处理,该初始化处理的过程中,检查该数据存储请求对应的用户的用户配额(用户配额即该用户可以使用的最大存储容量),并根据该用户的实际存储的数据量更新配额信息,该配额信息包含上述最大存储容量和剩余存储容量。初始化完毕后,进行配额检查处理;具体地,判断上述配额信息中的剩余存储容量是否大于上述数据存储请求对应的数据的数据量;如果大于,则上传该数据存储请求对应的数据,如果小于,则该数据存储请求响应失败,并告知用户。在上传数据的过程中,如果数据上传失败,则该数据存储请求响应失败,并告知用户。
具体而言,对于对象存储,同样会判断上述配额信息中的剩余存储容量是否大于上述数据存储请求对应的对象的数据量;如果大于,则上传该数据存储请求对应的对象的对象数据,该对象数据保存在上述集群中的存储节点中;如果小于,则该数据存储请求响应失败,并告知用户。对象的对象数据上传完毕后,再次检查用户的剩余存储容量是否大于该对象的元数据,如果大于,则更新该对象的元数据至上述集群中的存储节点中。对象的元数据上传完毕后,更新用户的剩余存储容量。在上述过程中,如果对象的对象数据上传失败或者元数据上传失败,则该数据存储请求响应失败,并告知用户。
当数据的数据量较大时,上传数据往往需要一定的时间;但是在高并发情况下,可能对多个数据同时上传,这就很容易导致用户实际存储的数据量超出用户配额;通常,并发量越大、网关服务器数量越多、数据越大,用户实际存储的数据量越容易超出用户配额。
例如,用户的剩余存储容量为1G,此时数据存储请求A和数据存储请求B同时触发,其中,数据存储请求A的数据的数据量为0.9G,数据存储请求B的数据的数据量为0.7G;由于数据存储请求A和数据存储请求B同时触发,针对每个数据存储请求执行上述数据存储方法时,在检查用户的剩余存储容量时可能都是1G,此时数据存储请求A的数据和数据存储请求B的数据都会被上传,两个数据上传完毕后,用户实际的实际存储的数据量就会超出用户配额0.6G。该情况下,可能会要求用户针对超出部分支付额外的存储费用,或者发现用户的实际存储的数据量就会超出用户配额后,直接删除部分数据;不论哪种情况,都会影响用户体验度和存储系统的性能。
基于上述问题,本公开实施方式首先提供一种数据存储方法,该方法可以应用于上述存储集群的管理服务器;如图2所示,该方法包括如下步骤
步骤S202,如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个所述请求中的一个请求分配查询权限。
对于管理服务器而言,通常通过网关服务器接收上述数据存储的请求;由于当前用户通过用户终端发送的数据存储的请求需要经互联网传输到达网关服务器,因而该数据存储的请求通常为http请求的格式;但是,受存储集群内部通信协议的限制,存储集群内部设备通常不能识别http请求格式的请求,因而网关服务器需要将http请求格式的数据存储的请求转换为存储集群内部可以识别的格式,如librados请求格式;转换完毕后,再由网关服务器发送请求至管理服务器。
在高并发情况下,管理服务器通常会同时或在很短的时间内接收到多个数据存储的请求,且这些请求均对应同一用户。请求中通常携带有发送该当前请求的用户的用户名、用户标识等用户信息,以表明该当前请求是谁发送的。管理服务器可以从当前请求中提取用户信息,并基于该用户信息识别请求与用户的对应关系。对于一个用户(即当前用户),在很短时间段内,管理服务器通常来不及处理完成一个数据存储的请求,此时,则会存在当前用户的多个数据存储的请求未被处理。为了避免多个请求并发处理,即多个请求同时查询同一个配额信息,一次仅向多个请求中的一个请求分配配额信息的查询权限。具体可以采用随机的形式,也可以按照预设的顺序确定被分配权限的请求。通过该方式,可以在某一时间点,最多仅有一个请求分配到查询权限,以避免多个请求同时查询一个配额信息造成的配额信息的不准确。
上述配额信息通常由当前用户设置,并上传保存至管理服务器或存储节点中,配额信息与用户信息关联保存。当前用户的配额信息包含当前用户可以使用的最大存储容量,即用户配置,还包含已用存储容量、剩余存储容量等。只有获得查询权限的请求,还有权限查询该请求对应的当前用户的配额信息。
步骤S204,将分配到所述查询权限的请求确定为当前请求。
由于一次仅有一个请求分配到查询权限,则在一个时间点下最多仅有一个当前请求。
步骤S206,查询当前用户的配额信息和当前请求包含的待存储数据的数据量。
具体可以基于当前请求中携带的用户信息查询该当前用户的配额信息;上述当前请求中通常还包含有待存储数据的数据量,管理服务器接收到当前请求后,可以从该当前请求中提取待存储数据的数据量。
步骤S208,判断配额信息中的剩余存储容量是否满足数据量。
可以理解,如果保存当前请求对应的待存储数据,需要配额信息中的剩余存储容量大于或等于待存储数据的数据量。因此,比较配额信息中的剩余存储容量与待存储数据的数据量,如果剩余存储容量大于或等于待存储数据的数据量,即可确定剩余存储容量满足数据量。
步骤S210,如果是,从剩余存储容量中为上述当前请求锁定数据量大小的容量,上传待存储数据,并在待存储数据上传成功时,更新当前用户的配额信息。
当前请求查询配额信息后,为了保证有足够的空间使当前请求的待存储数据能够成功上传,需要根据该待存储数据的数据量,从剩余存储容量中锁定部分容量,这些容量没有被待存储数据正式占用,但已从剩余存储容量中划分出来,后续其他请求根据划分后的剩余存储容量判断是否满足该请求对应的待存储数据的数据量,从而避免当前请求在查询配额信息时,剩余存储容量满足待存储数据的数据量,但上传数据时,剩余存储容量已不满足待存储数据的数据量,造成实际上传数据量超出用户的最大存储容量的情况。
在实际实现时,管理服务器可以根据待存储数据的数据量查找存储该待存储数据的存储节点,并将该待存储数据上传并保存至该存储节点中。当待存储数据的所有数据上传完毕后,即可确定该待存储数据上传成功。受数据存储格式的影响,从当前请求中提取到的待存储数据的数据量,可能与待存储数据实际占用存储节点的存储容量并不一致,因此,可以根据待存储数据实际占用存储节点的存储容量,更新当前用户的配额信息;具体而言,可以将该待存储数据上传之前的、配额信息中的剩余存储容量减去待存储数据实际占用存储节点的存储容量,得到更新的剩余存储容量;将该待存储数据上传之前的、配额信息中的已用存储容量加上待存储数据实际占用存储节点的存储容量,得到更新的已用存储容量。
需要说明的是,从剩余存储容量中为上述当前请求锁定数据量大小的容量之后,当前请求即可释放权限,进而将查询权限分配给其他没有被过查询权限的请求;上传待存储数据的过程中,可以多个请求的待存储数据同时上传,由于每个上传待存储数据的请求都从剩余存储容量中锁定了相应数据量大小的容量,即使多个数据同时上传,也不会造成实际上传数据量超出用户的最大存储容量的情况。
本公开实施方式提供的数据存储方法,如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个请求中的一个请求分配查询权限;对于分配到查询权限的当前请求,查询当前用户的配额信息和当前请求包含的待存储数据的数据量;如果当前用户的剩余存储容量满足数据量,则从剩余存储容量中为当前请求锁定数据量大小的容量,进而上传待存储数据并更新当前用户的配额信息。该方式中,对于一个用户,一次仅有一个请求查询配额信息,并从剩余存储容量中锁定待存储数据的数据量大小的容量,避免了多请求并发查询配额信息导致查询到的配额信息不准确,从而使用户的实际存储量超出用户配额的问题,提高了用户体验度同时优化了存储系统的性能。
本公开实施方式还提供另一种数据存储方法,该方法在上述实施方式提供的数据存储方法的基础上实现;该实施方式中,进一步限定了通过分布式锁的形式向多个请求中的一个请求分配查询权限;并且,为了进一步提高数据存储过程中数据上传的成功率和配额信息的准确性,将当前用户的配额信息设置为三部分,分别为已用存储容量、剩余存储容量和锁定待用存储容量;如果当前用户的配额信息中的剩余存储容量满足数据量,即从该剩余存储容量中划分出该数据量大小的存储容量至锁定待用存储容量中。
基于此,如图3所示,该方法包括如下步骤:
步骤S302,判断是否存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限;如果是,执行步骤S304;如果否,执行步骤S306;
步骤S304,通过预设的分布式锁,按照预设顺序向多个请求中的一个请求分配配额信息的查询权限;执行步骤S308;
通常,对于每个用户,均设置有一个分布式锁,以使该用户的多个请求实现互斥访问,即多个请求不能同时访问该用户的配额信息。该分布式锁通常具有下述属性:在一个时间点仅执行一个请求的线程,具体到本实施方式中,被执行的请求的线程即被分配查询权限的请求的线程;当线程执行完毕后,释放分布式锁,即查询完毕当前用户的配额信息,以及从剩余存储容量中为当前请求锁定数据量大小的容量之后,该请求对应的线程释放查询权限,以供其他请求获取查询权限,即分布式锁执行其他请求的线程。
上述分布式锁可以通过多种方式实现,例如,通过数据库实现上述分布式锁、通过缓存(如Redis等)实现分布式锁、通过Zookeeper实现分布式锁等。通常,为了合理地处理多个数据存储的请求,上述分布式锁通常以按照预设顺序形式分配查询权限,如按照请求到达管理服务器的时间顺序为每个请求分配查询权限,如果存在同时到达管理服务器的多个请求,则针对该多个请求,可以按照随机顺序逐一分配查询权限。
步骤S306,判断是否存在数据存储的请求;如果是,执行步骤S310;如果否,结束。
如果不存在多个数据存储的请求没有被分配配额信息的查询权限的情况,则判断是否存在存储的请求,如果存在,说明当前仅有一个数据存储的请求,则直接将该请求确定为当前请求,执行下述步骤。
步骤S308,将分配到所述查询权限的请求确定为当前请求;
步骤S310,查询当前用户的配额信息和当前请求包含的待存储数据的数据量;
步骤S312,判断上述数据量是否小于或等于配额信息中的剩余存储容量;如果是,执行步骤S314;如果否,执行步骤S318;
步骤S314,确定剩余存储容量满足数据量,从剩余存储容量中划分出与数据量相匹配的存储容量;
步骤S316,将划分出的存储容量添加至配额信息的锁定待用存储容量中;执行步骤S320。
步骤S318,确认请求响应失败,向当前用户发送请求响应失败的信息;结束。
例如,如果上述剩余存储容量为16G,锁定待用存储容量为3G,待存储数据的数据量为1G,从剩余存储容量中划分出1G的存储容量后,剩余存储容量更新为15G;将划分出的1G的存储容量添加至锁定待用存储容量后,该锁定待用存储容量更新为4G。
需要说明的是,上述锁定待用存储容量,可以仅包括被锁定容量的请求的总的被锁定容量,如上述4G;该锁定待用存储容量还可以保存有每个请求对应的已锁定的容量,即请求和请求对应的已锁定容量关联保存,如,请求A的已锁定容量为2M、请求B的已锁定容量为1.9G、请求C的已锁定容量为2.3K、请求D的已锁定容量为1G等。
步骤S320,上传待存储数据;
步骤S322,判断待存储数据是否上传成功;如果是,执行步骤S324;如果否,执行步骤S318;
可以理解,如果待存储数据上传成功,可以向当前用户发送请求响应成功的信息。
步骤S324,从配额信息的锁定待用存储容量中划分出与当前待存储数据的数据量相匹配的存储容量;
步骤S326,将划分出的存储容量添加至配额信息的已用存储容量。
例如,如果锁定待用存储容量为4G,已用存储容量为30G,待存储数据的数据量为1G,从锁定待用存储容量中划分出1G的存储容量后,锁定待用存储容量更新为3G,将划分出的1G的存储容量添加至已用存储容量后,该已用存储容量更新为31G。
图4至图6所示为在上述数据存储方法的执行过程中,当前用户的配额信息中的已用存储容量、剩余存储容量和锁定待用存储容量的示意图;图4为在为当前请求划分存储容量之前,当前用户的配额信息;该当前用户的最大存储容量为50G,其中,已用存储容量为30G,共多个数据占用,每个数据占用不同的存储空间,如4.8G、3.7K、5G等;剩余存储容量为17G,锁定待用存储容量为3G;这3G的锁定待用存储容量分别被不同的请求锁定,且不同请求锁定的容量不同,如2.3K、1.9G、2M等。
图5为在为当前请求划分存储容量之后,当前用户的配额信息;假设该当前请求对应的待存储数据的数据量为1G,则需要从剩余存储容量中划分出1G,划分后的剩余存储容量为16G;从剩余存储容量划分出的1G数据量,添加至锁定待用存储容量,则锁定待用存储容量由3G更新为4G。
图6为在为当前请求对应的待存储数据上传成功后,当前用户的配额信息;由于数据量为1G的待存储数据已经上传成功,已占用1G大小的存储空间,则需要将1G的存储空间从锁定待用存储容量划分出,并添加至已用存储容量,因此,锁定待用存储容量由4G更新为3G,已用存储容量由30G更新为31G,剩余存储容量在该过程中保持不变。
上述方式中,如果存在多个数据存储的请求没有被分配配额信息的查询权限,则通过分布式锁向多个请求中的一个请求分配查询权限;对于分配到查询权限的当前请求,查询当前用户的配额信息和当前请求包含的待存储数据的数据量;如果当前用户的剩余存储容量满足数据量,则从剩余存储容量中划分出数据量大小的容量,并将该容量添加至锁定待用存储容量中,进而上传待存储数据并更新当前用户的配额信息。该方式中,通过分布式锁可以便捷地实现一次仅有一个请求查询配额信息,并从剩余存储容量中锁定待存储数据的数据量大小的容量,实现了配额信息的顺序更新,避免了多请求并发查询配额信息导致查询到的配额信息不准确,从而使用户的实际存储量超出用户配额的问题,提高了用户体验度同时优化了存储系统的性能。
本公开实施方式还提供另一种数据存储方法,该方法在上述实施方式提供的数据存储方法的基础上实现;该实施方式中,重点描述上传待存储数据的具体过程,以及如果待存储数据上传失败的具体处理方式;本实施方式中以待存储数据为对象进行说明。
对象存储是以对象(对象包括对象数据和元数据)为基本单位的存储方式;对象存储是一种新型网络存储架构,摒弃了传统文件系统的目录层级结构,完全扁平化存储,直接根据每个对象的元数据中保存的ID来确定对象数据的存储位置。对象通常包括对象数据和元数据,因而本实施方式中,待存储数据包括对象数据和元数据;其中,对象数据即用户数据,也可以理解为当前用户想要上传和保存的数据;元数据即待存储数据的描述信息,包括对象数据的存储位置、数据量、历史修改记录等。另外,上述管理服务器与存储集群的至少一个存储节点连接;同一个对象的对象数据和元数据通常会保存在一个存储节点中,但可能会保存在同一存储节点的不同磁盘中。基于上述描述,如图7所示,该方法包括如下步骤:
步骤S702,判断是否存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限;如果是,执行步骤S704;如果否,执行步骤S706;
步骤S704,通过预设的分布式锁,按照预设顺序向多个请求中的一个请求分配配额信息的查询权限;执行步骤S708;
步骤S706,判断是否存在数据存储的请求;如果是,执行步骤S710;如果否,结束。
步骤S708,将分配到所述查询权限的请求确定为当前请求;
步骤S710,查询当前用户的配额信息和当前请求包含的待存储数据的数据量;
步骤S712,判断上述数据量是否小于或等于配额信息中的剩余存储容量;如果是,执行步骤S714;如果否,执行步骤S718;
步骤S714,确定剩余存储容量满足数据量;从剩余存储容量中划分出与数据量相匹配的存储容量;
步骤S716,将划分出的存储容量添加至配额信息的锁定待用存储容量中。执行步骤S720。
步骤S718,确认请求响应失败,向当前用户发送请求响应失败的信息;结束。
步骤S720,将待存储数据的对象数据上传至存储节点中;
如果管理服务器连接有多个存储节点,可能还需要查询每个存储节点的存储空间,并从中选择一个可以存储该待存储数据的存储节点。
步骤S722,判断接收到的是存储节点的上传成功信息,还是上传失败信息;如果是上传成功信息,执行步骤S724;如果是上传失败信息,执行步骤S732;
当对象数据成功上传至存储节点后,存储节点会向管理服务器发送上传成功的信息;但对象数据上传至存储节点的过程中,可能会受到网络拥堵、中断、节点硬件故障等因素的干扰,造成对象数据上传失败,此时,存储节点会向管理服务器发送上传失败信息。
步骤S724,将元数据更新至上述存储节点中;
对象数据成功上传至存储节点后,后续将该对象数据对应的元数据更新至上述存储节点中;通常,如果存储节点包含有多个磁盘,可能至少有一个磁盘用于保存该存储节点中保存的所有对象数据对应的元数据,其他磁盘用于保存对象数据。
步骤S726,判断接收到的是存储节点的更新成功信息,还是更新失败信息;如果是更新成功信息,执行步骤S728;如果是更新失败信息,执行步骤S732;
与上传对象数据类似,元数据在更新过程中也可能会收到上述多种因素的干扰,造成元数据更新失败,此时,存储节点会向管理服务器发送更新失败信息。
步骤S728,从配额信息的锁定待用存储容量中划分出与上述待存储数据的数据量相匹配的存储容量;
步骤S730,将划分出的存储容量添加至配额信息的已用存储容量,结束。
步骤S732,从配额信息的锁定待用存储容量中划分出与上述待存储数据的数据量相匹配的存储容量;
步骤S734,将划分出的存储容量添加至配额信息的剩余存储容量。
如果接收到所述存储节点的上传失败信息或者更新失败信息,说明当前请求的待存储数据并没有占用已锁定的存储容量,此时,则需要将已锁定的存储容量重新释放至剩余存储容量中。
另外,在上述判断数据量是否小于或等于配额信息中的剩余存储容量时,如果数据量小于配额信息中的剩余存储容量,再计算该剩余存储容量与该数据量的比值,根据该比值确定上传待存储数据的速度;可以理解该剩余存储容量与该数据量的比值越大,说明剩余存储容量越充裕,此时可以较快速地上传待存储数据;剩余存储容量与该数据量的比值越小,说明剩余存储容量越紧张,此时可以较慢地上传待存储数据,以进一步避免用户的实际存储量超出用户配额的问题。
需要说明的是,上述各方法实施方式均采用递进的方式描述,每个实施方式重点说明的都是与其他实施方式的不同之处,各个实施方式之间相同相似的部分互相参见即可。
对应于上述方法实施方式,参见图8所示的一种数据存储装置的结构示意图;该装置设置于存储集群的管理服务器;该装置包括:
权限分配模块80,用于如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个请求中的一个请求分配查询权限;
当前请求确定模块81,用于将分配到查询权限的请求确定为当前请求;
数据量查询模块82,用于查询当前用户的配额信息和当前请求包含的待存储数据的数据量;
判断模块83,用于判断配额信息中的剩余存储容量是否满足数据量;
容量划分和数据上传模块84,用于如果配额信息中的剩余存储容量满足数据量,从剩余存储容量中为当前请求锁定数据量大小的容量,上传待存储数据,并在待存储数据上传成功时,更新当前用户的配额信息。
本公开实施方式提供的数据存储装置,如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个请求中的一个请求分配查询权限;对于分配到查询权限的当前请求,查询当前用户的配额信息和当前请求包含的待存储数据的数据量;如果当前用户的剩余存储容量满足数据量,则从剩余存储容量中为当前请求锁定数据量大小的容量,进而上传待存储数据并更新当前用户的配额信息。该方式中,对于一个用户,一次仅有一个请求查询配额信息,并从剩余存储容量中锁定待存储数据的数据量大小的容量,避免了多请求并发查询配额信息导致查询到的配额信息不准确,从而使用户的实际存储量超出用户配额的问题,提高了用户体验度同时优化了存储系统的性能。
进一步地,上述权限分配模块,用于:通过预设的分布式锁,按照预设顺序向多个请求中的一个请求分配配额信息的查询权限。
进一步地,上述判断模块,用于:判断数据量是否小于或等于配额信息中的剩余存储容量;如果是,确定剩余存储容量满足数据量。
进一步地,上述容量划分和数据上传模块,用于:从剩余存储容量中划分出与数据量相匹配的存储容量;将划分出的存储容量添加至配额信息的锁定待用存储容量中。
进一步地,上述待存储数据包括对象数据和元数据;管理服务器与存储集群的至少一个存储节点连接;上述容量划分和数据上传模块,用于:将待存储数据的对象数据上传至存储节点中;当接收到存储节点的上传成功信息时,将元数据更新至存储节点中;当接收到存储节点的更新成功信息时,确认待存储数据上传成功。
进一步地,上述装置还包括:容量划分模块,用于如果接收到存储节点的上传失败信息或者更新失败信息,从配额信息的锁定待用存储容量中划分出与待存储数据的数据量相匹配的存储容量;添加模块,用于将划分出的存储容量添加至配额信息的剩余存储容量。
进一步地,上述容量划分和数据上传模块,用于:从配额信息的锁定待用存储容量中划分出与待存储数据的数据量相匹配的存储容量;将划分出的存储容量添加至配额信息的已用存储容量。
本实施方式提供了一种与上述方法实施方式相对应的管理服务器,图9为该管理服务器的结构示意图,如图9所示,该设备包括处理器901和存储器900;其中,存储器900用于存储一条或多条计算机指令,一条或多条计算机指令被处理器执行,以实现上述数据存储方法。
图9所示的管理服务器还包括总线902和通信接口903,处理器901、通信接口903和存储器900通过总线902连接。该管理服务器可以是网络边缘设备。
其中,存储器900可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。总线902可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
通信接口903用于通过网络接口与至少一个用户终端及其它网络单元连接,将封装好的IPv4报文或IPv9报文通过网络接口发送至用户终端。
处理器901可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器901中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器901可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DigitalSignal Processor,简称DSP)、专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施方式中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施方式所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器900,处理器901读取存储器900中的信息,结合其硬件完成前述实施方式的方法的步骤。
本发明实施方式还提供了一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述数据存储方法,具体实现可参见方法实施方式,在此不再赘述。
本发明实施方式所提供的管理服务器,其实现原理及产生的技术效果和前述方法实施方式相同,为简要描述,装置实施方式部分未提及之处,可参考前述方法实施方式中相应内容。
在本申请所提供的几个实施方式中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施方式仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施方式的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
最后应说明的是:以上所述实施方式,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施方式对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施方式所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施方式技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种数据存储方法,其特征在于,所述方法应用于存储集群的管理服务器;所述方法包括:
如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个所述请求中的一个请求分配所述查询权限;
将分配到所述查询权限的请求确定为当前请求;
查询所述当前用户的配额信息和所述当前请求包含的待存储数据的数据量;所述当前用户的配额信息是由所述当前用户设置并上传保存至所述管理服务器中的;
判断所述配额信息中的剩余存储容量是否满足所述数据量;
如果是,从所述剩余存储容量中为所述当前请求锁定所述数据量大小的容量,上传所述待存储数据,并在所述待存储数据上传成功时,更新所述当前用户的配额信息;
从所述剩余存储容量中为所述当前请求锁定所述数据量大小的容量的步骤,包括:
从所述剩余存储容量中划分出与所述数据量相匹配的存储容量;
将划分出的所述存储容量添加至所述配额信息的锁定待用存储容量中;其中,所述锁定待用存储容量包括被锁定容量的请求的总的被锁定容量和/或每个请求对应的已锁定的容量。
2.根据权利要求1所述的方法,其特征在于,向多个所述请求中的一个请求分配所述查询权限的步骤,包括:
通过预设的分布式锁,按照预设顺序向多个所述请求中的一个请求分配配额信息的查询权限。
3.根据权利要求1所述的方法,其特征在于,所述待存储数据包括对象数据和元数据;所述管理服务器与所述存储集群的至少一个存储节点连接;
上传所述待存储数据的步骤,包括:
将所述待存储数据的对象数据上传至所述存储节点中;
当接收到所述存储节点的上传成功信息时,将所述元数据更新至所述存储节点中;
当接收到所述存储节点的更新成功信息时,确认所述待存储数据上传成功。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
如果接收到所述存储节点的上传失败信息或者更新失败信息,从所述配额信息的锁定待用存储容量中划分出与所述待存储数据的数据量相匹配的存储容量;
将划分出的所述存储容量添加至所述配额信息的剩余存储容量。
5.根据权利要求1所述的方法,其特征在于,更新所述当前用户的配额信息的步骤,包括:
从所述配额信息的锁定待用存储容量中划分出与所述待存储数据的数据量相匹配的存储容量;
将划分出的所述存储容量添加至所述配额信息的已用存储容量。
6.一种数据存储装置,其特征在于,所述装置设置于存储集群的管理服务器;所述装置包括:
权限分配模块,用于如果存在当前用户的多个数据存储的请求没有被分配配额信息的查询权限,向多个所述请求中的一个请求分配所述查询权限;
当前请求确定模块,用于将分配到所述查询权限的请求确定为当前请求;
数据量查询模块,用于查询所述当前用户的配额信息和所述当前请求包含的待存储数据的数据量;所述当前用户的配额信息是由所述当前用户设置并上传保存至所述管理服务器中的;
判断模块,用于判断所述配额信息中的剩余存储容量是否满足所述数据量;
容量划分和数据上传模块,用于如果所述配额信息中的剩余存储容量满足所述数据量,从所述剩余存储容量中为所述当前请求锁定所述数据量大小的容量,上传所述待存储数据,并在所述待存储数据上传成功时,更新所述当前用户的配额信息;
所述容量划分和数据上传模块,用于:
从所述剩余存储容量中划分出与所述数据量相匹配的存储容量;
将划分出的所述存储容量添加至所述配额信息的锁定待用存储容量中;其中,所述锁定待用存储容量包括被锁定容量的请求的总的被锁定容量和/或每个请求对应的已锁定的容量。
7.根据权利要求6所述的装置,其特征在于,所述权限分配模块,用于:
通过预设的分布式锁,按照预设顺序向多个所述请求中的一个请求分配配额信息的查询权限。
8.根据权利要求6所述的装置,其特征在于,所述待存储数据包括对象数据和元数据;所述管理服务器与所述存储集群的至少一个存储节点连接;
所述容量划分和数据上传模块,用于:
将所述待存储数据的对象数据上传至所述存储节点中;
当接收到所述存储节点的上传成功信息时,将所述元数据更新至所述存储节点中;
当接收到所述存储节点的更新成功信息时,确认所述待存储数据上传成功。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
容量划分模块,用于如果接收到所述存储节点的上传失败信息或者更新失败信息,从所述配额信息的锁定待用存储容量中划分出与所述待存储数据的数据量相匹配的存储容量;
添加模块,用于将划分出的所述存储容量添加至所述配额信息的剩余存储容量。
10.根据权利要求6所述的装置,其特征在于,所述容量划分和数据上传模块,用于:
从所述配额信息的锁定待用存储容量中划分出与所述待存储数据的数据量相匹配的存储容量;
将划分出的所述存储容量添加至所述配额信息的已用存储容量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910148730.9A CN109901798B (zh) | 2019-02-27 | 2019-02-27 | 数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910148730.9A CN109901798B (zh) | 2019-02-27 | 2019-02-27 | 数据存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109901798A CN109901798A (zh) | 2019-06-18 |
CN109901798B true CN109901798B (zh) | 2022-12-09 |
Family
ID=66945783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910148730.9A Active CN109901798B (zh) | 2019-02-27 | 2019-02-27 | 数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109901798B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110888858B (zh) * | 2019-10-29 | 2023-06-30 | 北京奇艺世纪科技有限公司 | 数据库的操作方法和装置、存储介质、电子装置 |
CN111400324B (zh) * | 2019-11-08 | 2023-05-02 | 杭州海康威视系统技术有限公司 | 一种锁定云存储中对象的方法、装置及服务器 |
CN112565356B (zh) * | 2020-11-24 | 2023-04-21 | 北京百度网讯科技有限公司 | 数据存储方法、装置以及电子设备 |
CN113037864B (zh) * | 2021-04-07 | 2022-11-29 | 郑州师范学院 | 一种数据存储系统及一种数据存储方法 |
CN113778332A (zh) * | 2021-08-16 | 2021-12-10 | 联想凌拓科技有限公司 | 一种信息确定方法、第一存储服务器及存储介质 |
CN113886078B (zh) * | 2021-09-28 | 2022-06-17 | 江苏安超云软件有限公司 | 基于动态阈值机制实现配额统一管理的方法、装置、电子设备及计算机可读存储介质 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7146524B2 (en) * | 2001-08-03 | 2006-12-05 | Isilon Systems, Inc. | Systems and methods for providing a distributed file system incorporating a virtual hot spare |
CN1716937B (zh) * | 2004-06-30 | 2010-08-11 | 深圳市朗科科技股份有限公司 | 多用户数据存储服务系统 |
CA2684540A1 (en) * | 2009-11-05 | 2011-05-05 | Ibm Canada Limited - Ibm Canada Limitee | Navigation through historical stored interactions associated with a multi-user view |
CN106843773B (zh) * | 2017-02-16 | 2021-12-03 | 北京书生云科技有限公司 | 存储方法和分布式存储系统 |
CN107273061A (zh) * | 2017-07-12 | 2017-10-20 | 郑州云海信息技术有限公司 | 一种固态硬盘创建多namespace的方法及系统 |
CN107589915B (zh) * | 2017-09-25 | 2020-05-29 | 郑州云海信息技术有限公司 | 一种分布式存储系统的容量信息监控方法、装置及设备 |
CN107632791A (zh) * | 2017-10-10 | 2018-01-26 | 郑州云海信息技术有限公司 | 一种存储空间的分配方法及系统 |
CN108196787B (zh) * | 2017-12-21 | 2021-04-13 | 北京鲸鲨软件科技有限公司 | 集群存储系统的配额管理方法以及集群存储系统 |
CN108616598B (zh) * | 2018-05-10 | 2021-01-01 | 新华三技术有限公司成都分公司 | 数据同步方法、装置和分布式存储系统 |
-
2019
- 2019-02-27 CN CN201910148730.9A patent/CN109901798B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109901798A (zh) | 2019-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109901798B (zh) | 数据存储方法及装置 | |
CN108810041B (zh) | 一种分布式缓存系统的数据写入及扩容方法、装置 | |
CN110096220B (zh) | 一种分布式存储系统、数据处理方法和存储节点 | |
JP6357587B2 (ja) | 獲得ロック要求を処理するための方法及びサーバ | |
CN109788068B (zh) | 心跳状态信息上报方法、装置和设备及计算机存储介质 | |
CN104753994A (zh) | 基于集群服务器系统的数据同步方法及其装置 | |
CN110781129A (zh) | 一种fpga异构加速卡集群中的资源调度方法、设备及介质 | |
WO2021082465A1 (zh) | 一种保证数据一致性的方法及相关设备 | |
CN113794764A (zh) | 服务器集群的请求处理方法、介质和电子设备 | |
CN112153133A (zh) | 一种数据共享方法、设备以及介质 | |
CN111857992B (zh) | 一种Radosgw模块中线程资源分配方法和装置 | |
CN112256433A (zh) | 基于Kafka集群的分区迁移方法和装置 | |
US20140351536A1 (en) | Efficient replication of changes to a byte-addressable persistent memory over a network | |
CN114745358A (zh) | 负载均衡服务中的ip地址管理方法、系统及控制器 | |
CN114567674A (zh) | 一种数据处理方法、装置、计算机设备以及可读存储介质 | |
CN107707395B (zh) | 一种数据传输方法、装置和系统 | |
CN111008071A (zh) | 任务调度系统、方法和服务器 | |
CN117014189A (zh) | 多网关调度处理方法、设备、系统、服务器及存储介质 | |
CN115756955A (zh) | 一种数据备份、数据恢复的方法、装置及计算机设备 | |
CN115470041A (zh) | 一种数据灾备管理方法及装置 | |
CN113268327A (zh) | 事务请求的处理方法、装置和电子设备 | |
CN108718285B (zh) | 云计算集群的流量控制方法、装置及服务器 | |
US11757830B2 (en) | Method and apparatus for allocating CTDB-based virtual IP address, and distributed storage device | |
CN110750534A (zh) | 用于部署Redis集群的方法和装置 | |
CN111857548A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |