CN117827772A - 对象存储文件数据以及元数据的分离存储方法及装置 - Google Patents
对象存储文件数据以及元数据的分离存储方法及装置 Download PDFInfo
- Publication number
- CN117827772A CN117827772A CN202311701079.6A CN202311701079A CN117827772A CN 117827772 A CN117827772 A CN 117827772A CN 202311701079 A CN202311701079 A CN 202311701079A CN 117827772 A CN117827772 A CN 117827772A
- Authority
- CN
- China
- Prior art keywords
- metadata
- file
- migration
- uploading
- stored
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 230000008569 process Effects 0.000 claims abstract description 21
- 238000013508 migration Methods 0.000 claims description 140
- 230000005012 migration Effects 0.000 claims description 139
- 238000004064 recycling Methods 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 15
- 238000000926 separation method Methods 0.000 claims description 9
- 230000008878 coupling Effects 0.000 abstract description 2
- 238000010168 coupling process Methods 0.000 abstract description 2
- 238000005859 coupling reaction Methods 0.000 abstract description 2
- 238000002955 isolation Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000009977 dual effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000011435 rock Substances 0.000 description 2
- WGZDBVOTUVNQFP-UHFFFAOYSA-N N-(1-phthalazinylamino)carbamic acid ethyl ester Chemical compound C1=CC=C2C(NNC(=O)OCC)=NN=CC2=C1 WGZDBVOTUVNQFP-UHFFFAOYSA-N 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及对象存储技术领域,具体公开了一种对象存储文件数据以及元数据的分离存储方法及装置。本申请实现了数据与元数据的分离存储,使得对象文件上传过程中减少对底层的大量操作,极大地提高了程序的执行效率,提高了对象存储的效率;另一方面,解除了数据与元数据的耦合关系,可以对数据集群进行横向扩容支持,缓解单数据集群的访问压力和存储压力,进一步提升整个资源池的输入输出效率,实现了数据集群的故障隔离,提高了集群的稳定性。
Description
技术领域
本申请涉及对象存储技术领域,尤其涉及一种对象存储文件数据以及元数据的分离存储方法、装置、计算机设备及存储介质。
背景技术
元数据即描述数据属性的数据,主要是用来支持如表示存储位置、历史数据、数据查找以及数据记录等功能。在互联网(尤其是移动互联网)、物联网、云计算、大数据等高速发展的大背景下,数据呈现爆炸式地增长。社会化网络、移动通信、网络视频音频、电子商务、传感器网络、科学实验等各种应用产生的数据,不仅存储容量巨大,而且还具有数据类型繁多、数据大小变化大、流动快等显著特点,往往能够产生千万级、亿级甚至十亿、百亿级的海量文件,在元数据管理方面面临巨大的挑战性,因此文件元数据管理问题也成为了工业界和学术界公认的难题。基于ceph14.2.8版本的对象存储服务,在当前的存储流程中,对于元数据管理存在以下两个问题:
1、文件数达到十亿级的数量之后,在扩容时数据均衡的速率下降比较明显。因为在ceph中对于用户上传的文件,依据分片规则,可能会产生多个的rados对象(一个头对象和多个尾对象),文件数据就切片保存在这些rados对象上,其中头对象保存着文件xattr元数据,每一个rados对象都对应着一个Linux文件系统的一个文件,xattr就通过该文件的扩展属性来存储。由于用户上传的一个文件到了后端可能对应着多个Linux文件,所以随着文件数越来越多,xfs文件系统列举文件效率下降,导致数据均衡效率下降,对象存储的效率下降。
2、当前ceph对象存储的每个资源池只能对应一个数据集群,随着该集群的逐步扩容,会带来单资源池容量瓶颈、硬件差异和故障率而导致的集群稳定性等问题。
因此如何提高对象存储的效率以及集群的稳定性成为了亟需解决的问题。
发明内容
本申请提供了一种对象存储文件数据以及元数据的分离存储方法、装置、计算机设备及存储介质,以提高对象存储的效率以及集群的稳定性。
第一方面,本申请提供了一种对象存储文件数据以及元数据的分离存储方法,所述方法包括:
基于预设的配置参数,对文件的属性以及读写信息进行配置,获得迁移配置信息;
基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储。
进一步地,所述基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储之后,还包括:
在接收到用户上传的待存储文件时,在普通上传以及覆盖上传中确定所述待存储文件的目标上传类型;
基于所述目标上传类型,确定目标上传流程;
基于所述目标上传流程,将所述待存储文件进行上传并存储。
进一步地,所述基于所述目标上传流程,将所述待存储文件进行上传并存储,包括:
当所述目标上传类型为普通上传时,将所述待存储文件写入data数据池;
基于所述待存储文件生成元数据,并将所述元数据存储至bucket.index数据池中,以实现对象存储文件数据与元数据的分离存储。
进一步地,所述基于所述目标上传流程,将所述待存储文件进行上传并存储,包括:
当所述目标上传类型为覆盖上传时,将所述待存储文件写入data数据池;
在bucket.index数据池中获取所述待存储文件的扩展属性omap;
基于所述待存储文件的扩展属性omap,覆盖历史待存储文件的扩展属性omap,以更新所述待存储文件的元数据并实现对象存储文件数据与元数据的分离存储。
进一步地,所述基于所述目标上传流程,将所述待存储文件进行上传并存储之后,还包括:
当所述目标上传类型为普通上传且所述待存储文件上传失败,或所述目标上传类型为覆盖上传且所述待存储文件上传失败时,将所述待存储文件发送到垃圾回收队列,以等待回收;
当所述目标上传类型为覆盖上传且所述待存储文件上传成功时,将所述待存储文件对应的历史存储文件的历史头对象以及所述历史存储文件加入所述垃圾回收队列,以等待回收。
进一步地,所述基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,包括:
在所述待迁移对象为单个文件对象时,基于用户输入的待迁移对象的标识,获取所述待迁移对象的地址标签idtag;
基于所述idtag获取所述元数据的位置,并基于所述迁移配置信息,判断所述元数据的位置是否在omap中;
当所述元数据的位置不在bucket.index数据池的扩展属性omap中时,将所述元数据写入到所述扩展属性omap中,并检验所述待迁移对象是否被删除;
在所述迁移对象未被删除时,检验所述idtag是否更新;
若所述idtag未更新,则修改所述元数据的位置,以实现所述元数据的迁移。
进一步地,所述基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,还包括:
在所述待迁移对象为集群时,读取元数据的迁移状态;
在所述迁移状态为进行中时,获取待迁移桶列表,并对所述待迁移桶列表中的第一个桶加锁;
获取所述第一个桶的桶信息,基于所述桶信息,获取所述第一个桶元数据迁移阶段;
在所述元数据迁移阶段为迁移已完成且迁移时间不大于预设时间时,将所述第一个桶解锁,并将所述第一个桶从所述待迁移桶列表中删除,依次遍历所述待迁移桶列表中的所有桶;
在所述待迁移列表为空时,修改所述元数据的迁移状态为已完成,以将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储。
第二方面,本申请还提供了一种对象存储文件数据以及元数据的分离存储装置,所述装置包括:
迁移配置信息获得模块,用于基于预设的配置参数,对文件的属性以及读写信息进行配置,获得迁移配置信息;
分离存储模块,用于基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储。
第三方面,本申请还提供了一种计算机设备,所述计算机设备包括存储器和处理器;所述存储器,用于存储计算机程序;所述处理器,用于执行所述计算机程序并在执行所述计算机程序时实现如上述的对象存储文件数据以及元数据的分离存储方法。
第四方面,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时使所述处理器实现如上述的对象存储文件数据以及元数据的分离存储方法。
本申请公开了一种对象存储文件数据以及元数据的分离存储方法、装置、计算机设备及存储介质,基于预设的配置参数,对文件的属性以及读写信息进行配置,获得迁移配置信息;基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储。本申请实现了数据与元数据的分离存储,使得对象文件上传过程中减少对底层的大量操作,极大地提高了程序的执行效率,提高了对象存储的效率;另一方面,解除了数据与元数据的耦合关系,可以对数据集群进行横向扩容支持,缓解单数据集群的访问压力和存储压力,进一步提升整个资源池的输入输出效率,实现了数据集群的故障隔离,提高了集群的稳定性。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的第一实施例示意流程图;
图2是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的改进前对象数据与元数据分布示意图;
图3是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的改进后对象数据与元数据分布示意图;
图4是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的单个对象元数据迁移流程图;
图5是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的元数据迁移流程图;
图6是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的元数据分离升级流程示意图;
图7是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的第二实施例示意流程图;
图8是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的改进后待存储文件上传流程图;
图9为本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储装置的示意性框图;
图10为本申请的实施例提供的一种计算机设备的结构示意性框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
附图中所示的流程图仅是示例说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解、组合或部分合并,因此实际执行的顺序有可能根据实际情况改变。
应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
本申请的实施例提供了一种对象存储文件数据以及元数据的分离存储方法、装置、计算机设备及存储介质。其中,该对象存储文件数据以及元数据的分离存储方法可以应用于服务器中,通过将数据与元数据分离存储,提高对象存储的效率以及集群的稳定性。其中,该服务器可以为独立的服务器,也可以为服务器集群。
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
请参阅图1,图1是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的示意流程图。该对象存储文件数据以及元数据的分离存储方法可应用于服务器中,用于通过将数据与元数据分离存储,提高对象存储的效率以及集群的稳定性。
如图1所示,该对象存储文件数据以及元数据的分离存储方法具体包括步骤S101至步骤S102。
S101、基于预设的配置参数,对文件的属性以及读写信息进行配置,获得迁移配置信息;
在一个实施例中,ceph是一种统一的分布式文件系统,具有优秀的性能、高可用性和可扩展性。ceph的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。所有存储不管是块设备、对象存储、文件存储最后都转化成了底层的对象object,这个object包含3个元素data,xattr,omap。data是保存对象的数据,xattr和omap均是保存对象的扩展属性,存放于ceph内置的KV数据库rocksDB中,主要用于列举bucket内的文件。由于xattr和omap的特性,单多版本都有对应版本的元数据,所以可以把xattr存放到omap中,具体版本的xattr存到对应版本,也就是把xattr从Linux文件系统的扩展属性中迁到rocksDB中。
在一个实施例中,为了在原始集群上如何进行元数据分离而不影响文件的正常上传下载业务,重新设计文件的omap属性,除了将xattr属性迁移到omap属性上,还需要增加读写标志,用于在不同的升级阶段保证文件的正常读写,为此增加xattr_pos扩展属性,其用于记录文件元数据的存放位置,缺省值为0,其中:0表示该对象的元数据存在于Data数据池的头对象中;1表示该对象的元数据位于Index池的rados对象的omap属性中;2表示该对象的元数据既位于头对象中,也位于omap中。
在一个实施例中,is_complete:写结束的标志,存在于omap的index数据结构中,该字段用于双写流程(既写omap,又写xattr)更新omap的操作,用来解决由于双写过程中,写头对象成功,更新omap失败,导致的数据不一致,对读结果的影响,默认值为true。
在一个实施例中,为了确保在原有集群基础上升级后,进行元数据分离的写入流程,设计了两个配置项,分别是rgw_xattrs_write_flag和rgw_xattrs_read_flag。
其中,rgw_xattrs_write_flag:缺省值为1,值为1,表示只写头对象,如果发现xattr_pos为1,则对该对象进行双写;值为2,表示只写omap;值为3,表示先写omap再写头对象;rgw_xattrs_read_flag:缺省值为1,值为1,表示只读头对象;值为2,表示只读omap;值为3,表示先读omap,找不到再读头对象。
在一个实施例中,提供迁移工具支持在升级过程中将老对象的元数据从data池head对象的xattr中迁移至bucket.index池的omap中,因此在RGWBucketInfo中增加xattrs_pos_status参数用于识别对象是否已经迁移完成,参数具体取值及含义为:
0:xattr在head对象中,未迁移,旧集群创建的bucket,默认值为0。
1:xattr在head对象中或omap中,迁移中。
2:xattr在omap中,已完成迁移或升级后新建bucket。
在一个实施例中,为了实时记录每个bucket下每个对象的迁移状态,在log池中增加一个特殊的命名空间xattr_migration,其中只创建一个rados对象,对象名为:xattrs_migration,其omap header中记录了xattr迁移的状态,并且维护omap列表,记录了正在迁移的bucket列表,omap_key为bucket_name,omap_value为结构体:schedule_migration,其定义为:
0:uninitial,未初始化,升级后的初始值,是指升级后,没有使用命令行工具执行xattr数据迁移。当前迁移状态为该值时,后台线程需要定时检查迁移状态;
1:processing,迁移中,使用命令行工具执行迁移xattr数据后,迁移状态变为该值,后台线程检测到迁移状态为该值时就开始执行xattr迁移过程;
2:processed,迁移完成,后台线程检测到迁移状态为该值时,就可以退出线程,节省cpu资源;
在一个实施例中,为了不影响正常业务,设计了两个配置项用于指定迁移工作时段和间隔,分别为:rgw_xattrs_migration_work_time,元数据迁移线程的工作时间段,默认为00:00-06:00,rgw_xattrs_migration_debug_interval,元数据迁移线程的执行时间间隔,默认10min。
S102、基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储。
在一个实施例中,如2所示,图2左侧为index池中文件的omap元数据信息,该元数据存储在某个bucket分片的omap中,一个bucket分片可以存储多个文件omap元数据,因此是一对多的关系;右侧data池中文件的元数据主要存储在head头对象上,右图可知,对于一个分段上传的文件对象obj1,在底层会生成一个head对象和多个multipart分段头对象和多个shadow分段尾对象。Head头对象中只存储了该对象的xattr元数据信息,不存储任何数据信息。
在一个实施例中,由上述元数据的存储方式可以想到如果将obj1的head头对象保存的xattr元数据信息迁移到index池中对应obj1的omap属性上,那么底层就会少生成一个rados对象,从而减少了一次底层的op操作。这对于海量对象的存储场景下,减少的rados数量将显著提高存储效率。改进后对象元数据-数据分布如图3所示。
进一步地,所述基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,还包括:在所述待迁移对象为集群时,读取元数据的迁移状态;在所述迁移状态为进行中时,获取待迁移桶列表,并对所述待迁移桶列表中的第一个桶加锁;获取所述第一个桶的桶信息,基于所述桶信息,获取所述第一个桶元数据迁移阶段;在所述元数据迁移阶段为迁移已完成且迁移时间不大于预设时间时,将所述第一个桶解锁,并将所述第一个桶从所述待迁移桶列表中删除,依次遍历所述待迁移桶列表中的所有桶;在所述待迁移列表为空时,修改所述元数据的迁移状态为已完成,以将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储。
在一个实施例中,如前所述迁移配置信息中包含数据迁移的工作时段和间隔,基于该工作时段和间隔进行数据迁移工作。
具体实施例中,待迁移对象可以是整个集群,整个集群的迁移过程如图4所示,在集群元数据开始迁移时,读取xattr迁移状态。若迁移状态为processing(进行中状态),则获取bucket列表,对列表中的第一个bucket加锁,并获取bucket info(桶信息),当不满足xattrs_pos_status==2时,将该bucket添加到迁移列表,读取迁移进度,当xattrs_pos_status==1时,判断time_now-last_time是否大于1小时,若time_now-last_time小于1小时,则对bucket解锁并从迁移列表中删除该bucket,获取bucket列表中的第二个bucket,对第二个bucket进行上述操作,遍历bucket列表中的所有bucket,遍历完成后,判断迁移列表是否为空,在迁移列表为空时修改xattr迁移状态为processed(已处理状态)。
在另一实施例中,当不满足xattrs_pos_status==1时,令xattrs_pos_status=1,并对bucket解锁,根据Starmark获取1000个对象,获取第一个对象的xattr位置,判断该位置是否在omap中,若不在,则从head对象中读取xattr写入到omap中,并修改xattr数据的位置在omap中,当遍历完所有的1000个对象时,记录当前对象的bucket的迁移进度,并记录last_time,当bucket中的所有对象全部遍历完成时,对该bucket加锁,当xattrs_pos_status=2时,对该bucket解锁,从迁移列表中删除该bucket,获取第二个bucket,当所有bucket遍历完且迁移列表为空时,修改xattr迁移状态为processed(已处理状态)。
进一步地,所述基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,包括:在所述待迁移对象为单个文件对象时,基于用户输入的待迁移对象的标识,获取所述待迁移对象的地址标签idtag;基于所述idtag获取所述元数据的位置,并基于所述迁移配置信息,判断所述元数据的位置是否在omap中;当所述元数据的位置不在bucket.index数据池的扩展属性omap中时,将所述元数据写入到所述扩展属性omap中,并检验所述待迁移对象是否被删除;在所述迁移对象未被删除时,检验所述idtag是否更新;若所述idtag未更新,则修改所述元数据的位置,以实现所述元数据的迁移。
具体实施例中,待迁移对象还可以是单个文件对象,单个文件对象的迁移过程如图5所示,根据数据的待迁移对象的标识获取待迁移对象的地址标签,并根据该地址标签获取元数据的存储位置,并判断元数据的存储位置是否在omap中,若不在omap中,则获取元数据将元数据写入到omap中,在写入成功后校验元数据的地址标签,判断该地址标签是否更新,若未更新则修改元数据的位置信息,以完成元数据迁移。
在一个实施例中,完整的元数据分离升级流程如图6所示,升级CEPH至元数据分离版本,开启单写、单读head头对象,与升级版本前保持一致,开启双读、双写,进行读写omap的灰度验证,开启双读单写omap,并进行元数据迁移,迁移老数据完成后,开启单读、单写omap。在上述任一阶段,发现稳定性较差时都可以及时通过修改读写配置项,及时切换到原始读写head头对象的流程,保证业务在短期内就后恢复稳定运行。
请参阅图7,图7是本申请的实施例提供的一种对象存储文件数据以及元数据的分离存储方法的示意流程图。该对象存储文件数据以及元数据的分离存储方法可应用于服务器中,用于通过将数据与元数据分离存储,提高对象存储的效率以及集群的稳定性。
如图7所示,该对象存储文件数据以及元数据的分离存储方法具体包括步骤S201至步骤S203。
S201、在接收到用户上传的待存储文件时,在普通上传以及覆盖上传中确定所述待存储文件的目标上传类型;
S202、基于所述目标上传类型,确定目标上传流程;
S203、基于所述目标上传流程,将所述待存储文件进行上传并存储。
进一步地,所述基于所述目标上传流程,将所述待存储文件进行上传并存储,包括:当所述目标上传类型为普通上传时,将所述待存储文件写入data数据池;基于所述待存储文件生成元数据,并将所述元数据存储至bucket.index数据池中,以实现对象存储文件数据与元数据的分离存储。
进一步地,所述基于所述目标上传流程,将所述待存储文件进行上传并存储,包括:当所述目标上传类型为覆盖上传时,将所述待存储文件写入data数据池;在bucket.index数据池中获取所述待存储文件的扩展属性omap;基于所述待存储文件的扩展属性omap,覆盖历史待存储文件的扩展属性omap,以更新所述待存储文件的元数据并实现对象存储文件数据与元数据的分离存储。
进一步地,所述基于所述目标上传流程,将所述待存储文件进行上传并存储之后,还包括:当所述目标上传类型为普通上传且所述待存储文件上传失败,或所述目标上传类型为覆盖上传且所述待存储文件上传失败时,将所述待存储文件发送到垃圾回收队列,以等待回收;当所述目标上传类型为覆盖上传且所述待存储文件上传成功时,将所述待存储文件对应的历史存储文件的历史头对象以及所述历史存储文件加入所述垃圾回收队列,以等待回收。
在一个实施例中,普通上传即对新的待存储文件的上传,覆盖上传即对已上传过的文件进行上传。
在一个实施例中,如图8所示,对于已经开启元数据分离配置的网关而言,其待存储文件的普通上传具体步骤为:
步骤1、将尾对象写入data池;
步骤2、获取bucket.index中的omap,初次上传的对象还没有在bucket.index池生成其omap,因此生成omap并写入index池,完成本次上传流程。此时尾对象仍然存储在data池,元数据则存放在index池,若本次上传失败,便将尾对象加入垃圾回收队列等待回收。
在一个实施例中,对于覆盖上传场景,则其具体流程为:
步骤1、将尾对象写入data池;
步骤2、在bucket.index中获取该对象omap。对于覆盖上传,一定能获取到omap,且omap中存在对象的xattr属性。
步骤3、覆盖写该对象的omap属性,将元数据更新;
步骤4、判断该文件是否完成迁移,元数据分离升级完成是建立在老对象元数据已经完成迁移的基础之上,因此此时必定完成迁移,便将老对象的head头对象和尾对象加入gc对象,若写omap失败,则将当前尾对象加入GC等待回收。其中,GC为垃圾回收队列。
上述实施例提供了一种对象存储文件数据以及元数据的分离存储方法,为新老数据的上传、下载和删除提供两种不同的处理逻辑,从而在兼容老文件对象的同时,也能够逐步将老文件对象的xattr元数据从head头对象中迁移至index池的omap属性中,从而更好的为后续统一的元数据集群服务做技术支持。
请参阅图9,图9是本申请的实施例提供一种对象存储文件数据以及元数据的分离存储装置的示意性框图,该对象存储文件数据以及元数据的分离存储装置用于执行前述的对象存储文件数据以及元数据的分离存储方法。其中,该对象存储文件数据以及元数据的分离存储装置可以配置于服务器。
如图9所示,该对象存储文件数据以及元数据的分离存储装置300,包括:
迁移配置信息获得模块301,用于基于预设的配置参数,对文件的属性以及读写信息进行配置,获得迁移配置信息;
分离存储模块302,用于基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储。
进一步地,所述对象存储文件数据以及元数据的分离存储装置300,还包括:文件上传存储模块,所述文件上传存储模块,包括:
目标上传类型确定单元,用于在接收到用户上传的待存储文件时,在普通上传以及覆盖上传中确定所述待存储文件的目标上传类型;
目标上传流程确定单元,用于基于所述目标上传类型,确定目标上传流程;
文件上传单元,用于基于所述目标上传流程,将所述待存储文件进行上传并存储。
进一步地,所述文件上传单元,包括:
存储文件写入子单元,用于当所述目标上传类型为普通上传时,将所述待存储文件写入data数据池;
元数据生成子单元,用于基于所述待存储文件生成元数据,并将所述元数据存储至bucket.index数据池中,以实现对象存储文件数据与元数据的分离存储。
进一步地,所述文件上传单元,包括:
存储文件写入子单元,用于当所述目标上传类型为覆盖上传时,将所述待存储文件写入data数据池;
扩展属性omap获取子单元,用于在bucket.index数据池中获取所述待存储文件的扩展属性omap;
扩展属性omap覆盖子单元,用于基于所述待存储文件的扩展属性omap,覆盖历史待存储文件的扩展属性omap,以更新所述待存储文件的元数据并实现对象存储文件数据与元数据的分离存储。
进一步地,所述文件上传存储模块,还包括:
等待回收单元,用于当所述目标上传类型为普通上传且所述待存储文件上传失败,或所述目标上传类型为覆盖上传且所述待存储文件上传失败时,将所述待存储文件发送到垃圾回收队列,以等待回收;
等待回收单元,用于当所述目标上传类型为覆盖上传且所述待存储文件上传成功时,将所述待存储文件对应的历史存储文件的历史头对象以及所述历史存储文件加入所述垃圾回收队列,以等待回收。
进一步地,所述分离存储模块302,包括:
地址标签idtag获取单元,用于在所述待迁移对象为单个文件对象时,基于用户输入的待迁移对象的标识,获取所述待迁移对象的地址标签idtag;
位置判断单元,用于基于所述idtag获取所述元数据的位置,并基于所述迁移配置信息,判断所述元数据的位置是否在omap中;
元数据写入单元,用于当所述元数据的位置不在bucket.index数据池的扩展属性omap中时,将所述元数据写入到所述扩展属性omap中,并检验所述待迁移对象是否被删除;
idtag检验单元,用于在所述迁移对象未被删除时,检验所述idtag是否更新;
位置修改单元,用于若所述idtag未更新,则修改所述元数据的位置,以实现所述元数据的迁移。
进一步地,所述分离存储模块302,还包括:
迁移状态读取单元,用于在所述待迁移对象为集群时,读取元数据的迁移状态;
桶加锁单元,用于在所述迁移状态为进行中时,获取待迁移桶列表,并对所述待迁移桶列表中的第一个桶加锁;
迁移阶段获取单元,用于获取所述第一个桶的桶信息,基于所述桶信息,获取所述第一个桶元数据迁移阶段;
桶解锁单元,用于在所述元数据迁移阶段为迁移已完成且迁移时间不大于预设时间时,将所述第一个桶解锁,并将所述第一个桶从所述待迁移桶列表中删除,依次遍历所述待迁移桶列表中的所有桶;
迁移状态修改单元,用于在所述待迁移列表为空时,修改所述元数据的迁移状态为已完成,以将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储。
需要说明的是,所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和各模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
上述的装置可以实现为一种计算机程序的形式,该计算机程序可以在如图10所示的计算机设备上运行。
请参阅图10,图10是本申请的实施例提供的一种计算机设备的结构示意性框图。该计算机设备可以是服务器。
参阅图10,该计算机设备包括通过系统总线连接的处理器、存储器和网络接口,其中,存储器可以包括非易失性存储介质和内存储器。
非易失性存储介质可存储操作系统和计算机程序。该计算机程序包括程序指令,该程序指令被执行时,可使得处理器执行任意一种对象存储文件数据以及元数据的分离存储方法。
处理器用于提供计算和控制能力,支撑整个计算机设备的运行。
内存储器为非易失性存储介质中的计算机程序的运行提供环境,该计算机程序被处理器执行时,可使得处理器执行任意一种对象存储文件数据以及元数据的分离存储方法。
该网络接口用于进行网络通信,如发送分配的任务等。本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
应当理解的是,处理器可以是中央处理单元(Central Processing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
其中,在一个实施例中,所述处理器用于运行存储在存储器中的计算机程序,以实现如下步骤:
基于预设的配置参数,对文件的属性以及读写信息进行配置,获得迁移配置信息;
基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储。
在一个实施例中,所述处理器在实现基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储之后,还用于实现:
在接收到用户上传的待存储文件时,在普通上传以及覆盖上传中确定所述待存储文件的目标上传类型;
基于所述目标上传类型,确定目标上传流程;
基于所述目标上传流程,将所述待存储文件进行上传并存储。
在一个实施例中,所述处理器在实现基于所述目标上传类型,确定目标上传流程时,用于实现:
当所述目标上传类型为普通上传时,将所述待存储文件写入data数据池;
基于所述待存储文件生成元数据,并将所述元数据存储至bucket.index数据池中,以实现对象存储文件数据与元数据的分离存储。
在一个实施例中,所述处理器在实现基于所述目标上传流程,将所述待存储文件进行上传并存储时,用于实现:
当所述目标上传类型为覆盖上传时,将所述待存储文件写入data数据池;
在bucket.index数据池中获取所述待存储文件的扩展属性omap;
基于所述待存储文件的扩展属性omap,覆盖历史待存储文件的扩展属性omap,以更新所述待存储文件的元数据并实现对象存储文件数据与元数据的分离存储。
在一个实施例中,所述处理器在实现基于所述目标上传流程,将所述待存储文件进行上传并存储之后,还用于实现:
当所述目标上传类型为普通上传且所述待存储文件上传失败,或所述目标上传类型为覆盖上传且所述待存储文件上传失败时,将所述待存储文件发送到垃圾回收队列,以等待回收;
当所述目标上传类型为覆盖上传且所述待存储文件上传成功时,将所述待存储文件对应的历史存储文件的历史头对象以及所述历史存储文件加入所述垃圾回收队列,以等待回收。
在一个实施例中,所述处理器在实现基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储时,用于实现:
在所述待迁移对象为单个文件对象时,基于用户输入的待迁移对象的标识,获取所述待迁移对象的地址标签idtag;
基于所述idtag获取所述元数据的位置,并基于所述迁移配置信息,判断所述元数据的位置是否在omap中;
当所述元数据的位置不在bucket.index数据池的扩展属性omap中时,将所述元数据写入到所述扩展属性omap中,并检验所述待迁移对象是否被删除;
在所述迁移对象未被删除时,检验所述idtag是否更新;
若所述idtag未更新,则修改所述元数据的位置,以实现所述元数据的迁移。
在一个实施例中,所述处理器在实现基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储时,还用于实现:
在所述待迁移对象为集群时,读取元数据的迁移状态;
在所述迁移状态为进行中时,获取待迁移桶列表,并对所述待迁移桶列表中的第一个桶加锁;
获取所述第一个桶的桶信息,基于所述桶信息,获取所述第一个桶元数据迁移阶段;
在所述元数据迁移阶段为迁移已完成且迁移时间不大于预设时间时,将所述第一个桶解锁,并将所述第一个桶从所述待迁移桶列表中删除,依次遍历所述待迁移桶列表中的所有桶;
在所述待迁移列表为空时,修改所述元数据的迁移状态为已完成,以将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储。
本申请的实施例中还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序中包括程序指令,所述处理器执行所述程序指令,实现本申请实施例提供的任一项对象存储文件数据以及元数据的分离存储方法。
其中,所述计算机可读存储介质可以是前述实施例所述的计算机设备的内部存储单元,例如所述计算机设备的硬盘或内存。所述计算机可读存储介质也可以是所述计算机设备的外部存储设备,例如所述计算机设备上配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种对象存储文件数据以及元数据的分离存储方法,其特征在于,包括:
基于预设的配置参数,对文件的属性以及读写信息进行配置,获得迁移配置信息;
基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储。
2.根据权利要求1所述的对象存储文件数据以及元数据的分离存储方法,其特征在于,基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储之后,还包括:
在接收到用户上传的待存储文件时,在普通上传以及覆盖上传中确定所述待存储文件的目标上传类型;
基于所述目标上传类型,确定目标上传流程;
基于所述目标上传流程,将所述待存储文件进行上传并存储。
3.根据权利要求2所述的对象存储文件数据以及元数据的分离存储方法,其特征在于,基于所述目标上传流程,将所述待存储文件进行上传并存储,包括:
当所述目标上传类型为普通上传时,将所述待存储文件写入data数据池;
基于所述待存储文件生成元数据,并将所述元数据存储至bucket.index数据池中,以实现对象存储文件数据与元数据的分离存储。
4.根据权利要求2所述的对象存储文件数据以及元数据的分离存储方法,其特征在于,基于所述目标上传流程,将所述待存储文件进行上传并存储,包括:
当所述目标上传类型为覆盖上传时,将所述待存储文件写入data数据池;
在bucket.index数据池中获取所述待存储文件的扩展属性omap;
基于所述待存储文件的扩展属性omap,覆盖历史待存储文件的扩展属性omap,以更新所述待存储文件的元数据并实现对象存储文件数据与元数据的分离存储。
5.根据权利要求2所述的对象存储文件数据以及元数据的分离存储方法,其特征在于,基于所述目标上传流程,将所述待存储文件进行上传并存储之后,还包括:
当所述目标上传类型为普通上传且所述待存储文件上传失败,或所述目标上传类型为覆盖上传且所述待存储文件上传失败时,将所述待存储文件发送到垃圾回收队列,以等待回收;
当所述目标上传类型为覆盖上传且所述待存储文件上传成功时,将所述待存储文件对应的历史存储文件的历史头对象以及所述历史存储文件加入所述垃圾回收队列,以等待回收。
6.根据权利要求1所述的对象存储文件数据以及元数据的分离存储方法,其特征在于,基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,包括:
在所述待迁移对象为单个文件对象时,基于用户输入的待迁移对象的标识,获取所述待迁移对象的地址标签idtag;
基于所述idtag获取所述元数据的位置,并基于所述迁移配置信息,判断所述元数据的位置是否在omap中;
当所述元数据的位置不在bucket.index数据池的扩展属性omap中时,将所述元数据写入到所述扩展属性omap中,并检验所述待迁移对象是否被删除;
在所述迁移对象未被删除时,检验所述idtag是否更新;
若所述idtag未更新,则修改所述元数据的位置,以实现所述元数据的迁移。
7.根据权利要求1至6任一项所述的对象存储文件数据以及元数据的分离存储方法,其特征在于,基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,还包括:
在所述待迁移对象为集群时,读取元数据的迁移状态;
在所述迁移状态为进行中时,获取待迁移桶列表,并对所述待迁移桶列表中的第一个桶加锁;
获取所述第一个桶的桶信息,基于所述桶信息,获取所述第一个桶元数据迁移阶段;
在所述元数据迁移阶段为迁移已完成且迁移时间不大于预设时间时,将所述第一个桶解锁,并将所述第一个桶从所述待迁移桶列表中删除,依次遍历所述待迁移桶列表中的所有桶;
在所述待迁移列表为空时,修改所述元数据的迁移状态为已完成,以将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储。
8.一种对象存储文件数据以及元数据的分离存储装置,其特征在于,包括:
迁移配置信息获得模块,用于基于预设的配置参数,对文件的属性以及读写信息进行配置,获得迁移配置信息;
分离存储模块,用于基于所述迁移配置信息,执行预设的元数据迁移流程,将待迁移对象在data数据池中的元数据迁移至bucket.index数据池进行存储,以实现对象存储文件数据与元数据的分离存储。
9.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器;
所述存储器,用于存储计算机程序;
所述处理器,用于执行所述计算机程序并在执行所述计算机程序时实现如权利要求1至7中任一项所述的对象存储文件数据以及元数据的分离存储方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时使所述处理器实现如权利要求1至7中任一项所述的对象存储文件数据以及元数据的分离存储方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311701079.6A CN117827772A (zh) | 2023-12-12 | 2023-12-12 | 对象存储文件数据以及元数据的分离存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311701079.6A CN117827772A (zh) | 2023-12-12 | 2023-12-12 | 对象存储文件数据以及元数据的分离存储方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117827772A true CN117827772A (zh) | 2024-04-05 |
Family
ID=90503620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311701079.6A Pending CN117827772A (zh) | 2023-12-12 | 2023-12-12 | 对象存储文件数据以及元数据的分离存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117827772A (zh) |
-
2023
- 2023-12-12 CN CN202311701079.6A patent/CN117827772A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210124573A1 (en) | Firmware upgrade method and apparatus, and terminal | |
CN111324606B (zh) | 数据分片的方法及装置 | |
US10983718B2 (en) | Method, device and computer program product for data backup | |
WO2023160327A1 (en) | Container image management | |
CN111984196B (zh) | 一种文件迁移方法、装置、设备及可读存储介质 | |
CN110298031B (zh) | 一种词典服务系统及模型版本一致性配送方法 | |
CN115098297B (zh) | 一种云原生存储数据卷的一致性快照生成方法和系统 | |
CN111090782A (zh) | 一种图数据存储方法、装置、设备及存储介质 | |
CN114328007B (zh) | 一种容器备份还原方法、装置及其介质 | |
CN117827772A (zh) | 对象存储文件数据以及元数据的分离存储方法及装置 | |
CN114070889B (zh) | 配置方法、流量转发方法、设备、存储介质及程序产品 | |
US11977559B2 (en) | Providing instant and distributed access to a source blob via copy-on-read blobs and link blobs | |
US10678453B2 (en) | Method and device for checking false sharing in data block deletion using a mapping pointer and weight bits | |
CN115599295A (zh) | 一种存储系统的节点扩容方法和装置 | |
CN114860378A (zh) | 一种文件系统迁移方法、装置、系统及其介质 | |
US10860533B1 (en) | File size as an indicator of file properties | |
CN111581157A (zh) | 一种对象存储平台以及对象操作方法、装置和服务器 | |
CN111858234A (zh) | 一种任务执行方法、装置、设备、介质 | |
CN111142791A (zh) | 数据迁移方法和装置 | |
US11983147B2 (en) | Deduplicating data integrity checks across systems | |
CN115421785B (zh) | 应用程序的移植处理方法、装置和介质 | |
US11379147B2 (en) | Method, device, and computer program product for managing storage system | |
CN111797062B (zh) | 数据处理方法、装置和分布式数据库系统 | |
WO2024114105A1 (zh) | 一种数据库的数据更新方法、系统及计算设备集群 | |
WO2024066904A1 (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 |