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

元数据操作方法、存储系统、装置、节点以及存储介质与流程

2022-03-02 00:26:55 来源:中国专利 TAG:

元数据操作方法、存储系统、装置、节点以及存储介质1.本技术要求于2020年08月29日提交的申请号为202010890479.6、发明名称为“分布式存储系统中元数据管理方法及计算机可读存储介质”的中国专利申请的优先权,其全部内容通过引用结合在本技术中。
技术领域
2.本技术涉及数据存储
技术领域
,特别涉及一种元数据操作方法、存储系统、装置、节点以及存储介质。
背景技术
:3.在分布式存储系统中,数据节点可以通过缓存加速技术,来提高读/写数据的效率,以写数据为例,数据节点可以先将数据写入到本地缓存区中,当在本地缓存区写入完成后,数据节点显示写入成功响应,后续本地缓存区可以再将缓存的数据写入存储节点。4.而数据节点除了能够进行读/写数据的操作以外,还可以进行元数据操作,例如创建目录和删除目录等操作。以创建目录为例,数据节点可以通过与存储节点进行交互,在存储节点中创建目录,但是由于分布式存储系统的组织结构较为复杂,为了维护分布式存储系统中的数据一致性,数据节点在存储节点创建目录的过程比较复杂且耗时长,从而导致数据节点进行元数据操作的效率低。技术实现要素:5.本技术实施例提供了一种元数据操作方法、存储系统、装置、节点以及存储介质,能够提高数据节点进行元数据操作的效率。该技术方案如下:6.第一方面,提供了一种存储系统中元数据操作方法,所述存储系统包括第一数据节点和存储节点,所述第一数据节点包括存储设备,所述方法包括:7.所述第一数据节点获取元数据操作请求,所述元数据操作请求用于指示对第一对象进行元数据操作;8.所述第一数据节点将目标日志数据存储至所述存储设备,所述目标日志数据用于记录对所述第一对象进行元数据操作的事件;9.所述存储节点根据所述存储设备中存储的所述目标日志数据,对所述第一对象进行元数据操作。10.该方法通过数据节点将用于记录进行元数据操作事件的日志数据存储至本地的存储设备,即可完成数据节点进行的元数据操作,后续以便由存储节点根据数据节点中存储的日志数据,对对象进行元数据操作,而无需数据节点直接在存储节点对对象进行元数据操作,从而减少了数据节点进行元数据操作的时间,提高了数据节点进行元数据操作的效率。11.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之前,所述方法还包括:12.所述第一数据节点将所述第一对象的状态信记录到所述存储系统的全局状态表,所述全局状态表用于记录所述存储系统中多个对象的状态信息,所述全局状态表中的每个对象的状态信息用于指示所述对象的元数据操作状态以及对所述对象进行元数据操作的数据节点。13.基于上述可能的实现方式,在对对象进行元数据操作的过程中,数据节点实时在全局状态表中记录或更新对象的状态,便于存储系统中的各个节点均能在全局状态表中查询各个对象的状态,避免各个节点进行的元数据操作的对象出现冲突。14.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之前,所述方法还包括:15.所述第一数据节点将所述第一对象的状态信息记录到本地状态表,所述本地状态表用于记录所述第一数据节点进行元数据操作的对象的状态信息,所述第一数据节点进行元数据操作的对象的状态信息用于指示所述第一数据节点进行元数据操作的对象的元数据操作状态以及所述第一数据节点。16.基于上述可能的实现方式,在对对象进行元数据操作的过程中,数据节点实时在本地状态表中记录或更新对象的状态,便于后续在本地查询本节点进行的元数据操作的对象的状态信息17.在一种可能的实现方式中,所述元数据操作状态包括第一状态、第二状态、第三状态、第四状态以及第五状态;18.所述第一状态,用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点是同一个节点;19.所述第二状态,用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点不是同一个节点;20.所述第三状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且所述对象不存在子对象;21.所述第四状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且正在对所述子对象进行元数据操作;22.所述第五状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且对所述子对象所进行的元数据操作已经完成。23.在一种可能的实现方式中,所述存储节点根据所述存储设备中存储的所述目标日志数据,对所述第一对象进行元数据操作之前,所述方法还包括:24.若所述第一对象的元数据操作状态为所述第二状态,所述存储设备在目标时长之内,将所述目标日志数据写入所述存储节点。25.基于上述可能的实现方式,在第一对象的元数据操作状态为第二状态的情况下,存储设备在目标时长内将目标日志数据写入存储节点,能够实现快速刷盘。26.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之后,所述方法还包括:27.所述第一数据节点存储所述目标日志数据的索引信息,所述索引信息用于指示所述目标日志数据在所述存储设备中的存储位置。28.基于上述可能的实现方式,数据节点通过存储目标日志数据的索引信息,以便后续数据节点能够根据存储的该索引信息,快速在存储设备中查询到目标日志数据。29.在一种可能的实现方式中,所述第一数据节点获取元数据操作请求包括:30.所述第一数据节点生成所述元数据操作请求。31.基于上述可能的实现方式,数据节点自己生成元数据操作请求,从而使得请求对对象进行元数据操作的数据节点和对对象进行元数据操作的数据节点为同一个节点,实现了场景亲和。32.在一种可能的实现方式中,所述第一数据节点生成所述元数据操作请求之后,所述方法包括:33.所述第一数据节点确定所述第一数据节点为对第二对象进行元数据操作的数据节点,其中,所述第二对象为所述第一对象的父对象。34.基于上述可能的实现方式中,若所述第一数据节点为对第二对象进行元数据操作的数据节点,所述第一数据节点仍存储该第一对象的目标日志数据,从而该第一数据节点能够保持第一对象与第二对象之间的亲和关系。35.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之前,所述方法包括:36.所述第一数据节点确定所述存储节点中已经存储有所述第二对象。37.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之后,所述方法还包括:38.所述第一数据节点生成完成响应,所述完成响应用于指示数据节点对所述第一对象进行的元数据操作已经完成。39.在一种可能的实现方式中,所述存储系统还包括第二数据节点,所述第一数据节点获取元数据操作请求包括:40.所述第一数据节点从所述第二数据节点接收所述元数据操作请求。41.在一种可能的实现方式中,所述第一数据节点从所述第二数据节点接收所述元数据操作请求之前,所述方法还包括:42.若所述第一数据节点为对第二对象进行元数据操作的数据节点,且所述第二对象处于第一状态,则所述第二数据节点向所述第一数据节点发送所述元数据操作请求,所述第二对象为所述第一对象的父对象,一个对象的第二状态用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点是同一个节点。43.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之后,所述方法还包括:44.所述第一数据节点向所述第二数据节点发送完成响应,所述完成响应用于指示数据节点对所述第一对象进行的元数据操作已经完成。45.第二方面,提供一种存储系统中元数据操作方法,所述存储系统包括第一数据节点,所述第一数据节点包括存储设备,所述方法包括:46.所述第一数据节点获取元数据操作请求,将目标日志数据存储至所述存储设备,由所述存储设备将存储的所述目标日志数据写入所述存储节点,其中,所述元数据操作请求用于指示对第一对象进行元数据操作,所述目标日志数据用于记录对所述第一对象进行元数据操作的事件。47.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之前,所述方法还包括:48.所述第一数据节点将所述第一对象的状态信记录到所述存储系统的全局状态表,所述全局状态表用于记录所述存储系统中多个对象的状态信息,所述全局状态表中的每个对象的状态信息用于指示所述对象的元数据操作状态以及对所述对象进行元数据操作的数据节点。49.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之前,所述方法还包括:50.所述第一数据节点将所述第一对象的状态信息记录到本地状态表,所述本地状态表用于记录所述第一数据节点进行元数据操作的对象的状态信息,所述第一数据节点进行元数据操作的对象的状态信息用于指示所述第一数据节点进行元数据操作的对象的元数据操作状态以及所述第一数据节点。51.在一种可能的实现方式中,所述存储系统还包括存储节点,所述元数据操作状态包括第一状态、第二状态、第三状态、第四状态以及第五状态;52.所述第一状态,用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点是同一个节点;53.所述第二状态,用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点不是同一个节点;54.所述第三状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且所述对象不存在子对象;55.所述第四状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且正在对所述子对象进行元数据操作;56.所述第五状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且对所述子对象所进行的元数据操作已经完成。57.在一种可能的实现方式中,所述存储系统还包括存储节点,所述第一存储节点将目标日志数据存储至所述存储设备之后,所述方法还包括:58.若所述第一对象的元数据操作状态为所述第二状态,所述存储设备在目标时长之内,将所述目标日志数据写入所述存储节点。59.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之后,所述方法还包括:60.所述第一数据节点存储所述目标日志数据的索引信息,所述索引信息用于指示所述目标日志数据在所述存储设备中的存储位置。61.在一种可能的实现方式中,所述第一数据节点获取元数据操作请求包括:62.所述第一数据节点生成所述元数据操作请求。63.在一种可能的实现方式中,所述第一数据节点生成所述元数据操作请求之后,所述方法包括:64.所述第一数据节点确定所述第一数据节点为对第二对象进行元数据操作的数据节点,其中,所述第二对象为所述第一对象的父对象。65.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之前,所述方法包括:66.所述第一数据节点确定所述存储节点中已经存储有所述第二对象。67.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之后,所述方法还包括:68.所述第一数据节点生成完成响应,所述完成响应用于指示数据节点对所述第一对象进行的元数据操作已经完成。69.在一种可能的实现方式中,所述存储系统还包括第二数据节点,所述第一数据节点获取元数据操作请求包括:70.所述第一数据节点从所述第二数据节点接收所述元数据操作请求。71.在一种可能的实现方式中,所述第一数据节点从所述第二数据节点接收所述元数据操作请求之前,所述方法还包括:72.若所述第一数据节点为对第二对象进行元数据操作的数据节点,且所述第二对象处于第一状态,则所述第二数据节点向所述第一数据节点发送所述元数据操作请求,所述第二对象为所述第一对象的父对象,一个对象的第二状态用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点是同一个节点。73.在一种可能的实现方式中,所述第一数据节点将目标日志数据存储至所述存储设备之后,所述方法还包括:74.所述第一数据节点向所述第二数据节点发送完成响应,所述完成响应用于指示数据节点对所述第一对象进行的元数据操作已经完成。75.第三方面,提供了一种存储系统中元数据操作方法,所述存储系统包括第一数据节点和存储节点,所述第一数据节点包括存储设备,所述方法包括:76.所述存储节点根据第一数据节点的存储设备中存储的目标日志数据,对第一对象进行元数据操作,所述目标日志数据用于记录对所述第一对象进行元数据操作的事件。77.在一种可能的实现方式中,所述存储节点根据第一数据节点的存储设备中存储的目标日志数据,对第一对象进行元数据操作包括:78.所述存储节点获取所述存储设备写入的所述目标日志数据;所述存储节点根据获取的所述目标日志数据,对所述第一对象进行元数据操作。79.第四方面,提供了一种存储系统,所述存储系统包括第一数据节点和存储节点,所述第一数据节点包括存储设备;80.所述第一数据节点,用于获取元数据操作请求,所述元数据操作请求用于指示对第一对象进行元数据操作;将目标日志数据存储至所述存储设备,所述目标日志数据用于记录对所述第一对象进行元数据操作的事件;81.所述存储节点,用于根据所述存储设备中存储的所述目标日志数据,对所述第一对象进行元数据操作。82.在一种可能的实现方式中,所述第一数据节点,还用于将所述第一对象的状态信息记录到所述存储系统的全局状态表,所述全局状态表用于记录所述存储系统中多个对象的状态信息,所述全局状态表中的每个对象的状态信息用于指示所述对象的元数据操作状态以及对所述对象进行元数据操作的数据节点。83.在一种可能的实现方式中,所述第一数据节点,还用于将所述第一对象的状态信息记录到本地状态表,所述本地状态表用于记录所述第一数据节点进行元数据操作的对象的状态信息,所述第一数据节点进行元数据操作的对象的状态信息用于指示所述第一数据节点进行元数据操作的对象的元数据操作状态以及对所述第一数据节点。84.在一种可能的实现方式中,所述元数据操作状态包括第一状态、第二状态、第三状态、第四状态以及第五状态;85.所述第一状态,用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点是同一个节点;86.所述第二状态,用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点不是同一个节点;87.所述第三状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且所述对象不存在子对象;88.所述第四状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且正在对所述子对象进行元数据操作;89.所述第五状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且对所述子对象所进行的元数据操作已经完成。90.在一种可能的实现方式中,所述存储设备,用于若所述第一对象的元数据操作状态为所述第二状态,在目标时长之内将所述目标日志数据写入所述存储节点。91.在一种可能的实现方式中,所述第一数据节点,还用于存储所述目标日志数据的索引信息,所述索引信息用于指示所述目标日志数据在所述存储设备中的存储位置。92.在一种可能的实现方式中,所述第一数据节点,用于生成所述元数据操作请求。93.在一种可能的实现方式中,所述第一数据节点,还用于确定所述第一数据节点为对第二对象进行元数据操作的数据节点,其中,所述第二对象为所述第一对象的父对象。94.在一种可能的实现方式中,所述第一数据节点,还用于确定所述存储节点中已经存储有所述第二对象。95.在一种可能的实现方式中,所述第一数据节点,还用于生成完成响应,所述完成响应用于指示数据节点对所述第一对象进行的元数据操作已经完成。96.在一种可能的实现方式中,所述存储系统还包括第二数据节点,所述第一数据节点,用于从所述第二数据节点接收所述元数据操作请求。97.在一种可能的实现方式中,所述第二数据节点,用于若所述第一数据节点为对第二对象进行元数据操作的数据节点,且所述第二对象处于第一状态,向所述第一数据节点发送所述元数据操作请求,所述第二对象为所述第一对象的父对象,一个对象的第二状态用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点是同一个节点。98.在一种可能的实现方式中,所述第一数据节点,还用于向所述第二数据节点发送完成响应,所述完成响应用于指示数据节点对所述第一对象进行的元数据操作已经完成。99.第五方面,提供了一种元数据操作装置,用于执行上述存储系统中元数据操作方法。具体地,该元数据操作装置包括用于执行上述第一方面或上述第一方面的任一种可选方式提供的存储系统中元数据操作方法中第一数据节点的功能模块。100.第六方面,提供了一种元数据操作装置,用于执行上述存储系统中元数据操作方法。具体地,该元数据操作装置包括用于执行上述第一方面或上述第一方面的任一种可选方式提供的存储系统中元数据操作方法中存储节点的功能模块。101.第七方面,提供一种数据节点,该数据节点包括处理器和存储器,该存储器中存储有至少一条程序代码,该程序代码由该处理器加载并执行以实现如上述存储系统中元数据操作方法中第一数据节点所执行的操作。102.第八面,提供一种存储节点,该存储节点包括处理器和存储器,该存储器中存储有至少一条程序代码,该程序代码由该处理器加载并执行以实现如上述存储系统中元数据操作方法中存储节点所执行的操作。103.第九方面,提供一种计算机可读存储介质,该存储介质中存储有至少一条程序代码,该程序代码由处理器加载并执行以实现如上述存储系统中元数据操作方法所执行的操作。104.第十方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括程序代码,该程序代码存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取该程序代码,处理器执行该程序代码,使得该计算机设备执行上述第一方面或者第一方面的各种可选实现方式中提供的方法。附图说明105.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。106.图1是本技术实施例提供的一种存储系统的示意图;107.图2是本技术实施例提供的一种数据节点的结构示意图;108.图3是本技术实施例提供的一种节点设备的结构示意图;109.图4是本技术实施例提供的一种存储系统中元数据操作方法的流程图;110.图5是本技术实施例提供的一种状态信息的分布示意图;111.图6是本技术实施例提供的一种目录创建方法的流程图;112.图7是本技术实施例提供的一种存储系统中元数据操作方法的流程图;113.图8是本技术实施例提供的一种目录创建方法的流程图;114.图9是本技术实施例提供的一种存储系统中元数据操作方法的流程图;115.图10是本技术实施例提供的一种目录创建方法的流程图;116.图11是本技术实施例提供的一种对象状态变化的示意图;117.图12是本技术实施例提供的一种元数据操作装置的结构示意图;118.图13是本技术实施例提供的一种元数据操作装置的结构示意图。具体实施方式119.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。120.图1是本技术实施例提供的一种存储系统的示意图,参见图1,存储系统100包括多个数据节点101以及多个存储节点102,可选地,该多个存储节点102还能够为至少一个文件系统(filesystem,fs)提供存储空间。其中,数据节点101,用于获取元数据操作请求,该元数据操作请求用于指示对一个对象(object)进行元数据操作,并将该对象的日志数据存储至本地的存储设备内,后续数据节点101将本地存储设备内存储的日志数据写入任一存储节点102,由该任一存储节点102根据写入的日志数据,对该对象进行元数据操作。其中,一个对象的日志数据用于记录对该对象进行元数据操作的事件,可选地,该日志数据的日志类型是写前日志(writeaheadlog,wal)。可选地,该数据节点101是计算机设备、服务器等计算设备,该数据节点101是任一具有数据存储能力的设备。121.在一种可能的实现方式中,该数据节点101包括应用程序(application,app)1011、客户端(client)1012以及存储设备1013。其中,应用程序1011,用于生成元数据操作请求,并向客户端1012发送生成的元数据操作请求。客户端1012,用于接收该元数据操作请求,并基于接收到的元数据操作请求,在该存储设备1013中存储该元数据操作请求所指示的对象的日志数据。该客户端1012,还用于为该应用程序1011提供数据处理的服务,例如客户端1012将应用程序1011生成的数据写入存储节点102,或者客户端1012将从存储节点102读取到的数据发送至应用程序1011。该客户端可1012以是私有客户端。该存储设备1013,用于存储多个对象的日志数据,并将多个对象的日志数据刷盘至存储节点102。122.在一种可能的实现方式中,存储设备1013包括存储设备a、存储设备b以及存储设备c,例如图2所示的本技术实施例提供的一种数据节点的结构示意图。可选地,客户端1012将多个日志数据存储在存储设备a,以实现本地访问。在一些可能的情况下,多个日志数据的对象之间可能具有层级关系或者父子关系。以对象为目录为例,目录之间具有父子关系(例如父目录和子目录),那么,存储设备a在存储具有层级关系或者父子关系的多个对象的日志数据时,能够按照多个对象之间的层级关系对应存储多个日志数据,使得多个日志数据之间也具有层级关系或者父子关系。可选地,该存储设备a是突发缓冲区(burstbuffer,bb)或存储级内存(storageclassmemory,scm)。当客户端1012每在存储设备a中存储一条日志数据后,该客户端1012还能够将该日志数据的索引信息存储在存储设备b,以便数据节点101后续从存储设备b查找和读取该日志数据,例如存储设备b中存储有索引信息1、6和8。可选地,该存储设备b是随机存取存储器(randomaccessmemory,ram)或其他存储器。该客户端1012在将一条日志数据存储在存储设备a之前,还能够在存储系统100的全局状态表中记录该日志数据的对象的状态信息,以便该存储系统100中的各个节点均能在全局状态表中查询到该对象的状态信息,存储系统100的全局状态表的存储空间由各个数据节点101中的存储设备来提供,例如该数据节点101中的存储设备c用于为全局状态表提供存储空间,该存储设备c还能够支持单边远程直接内存访问(remotedirectmemoryaccess,rdma),以便其他数据节点101能够通过单边rdma的方式,从该存储设备c获取全局状态表中的各个对象的状态信息。多个数据节点101均能够将数据写入至多个存储节点102,由多个存储节点102存储各个数据节点101写入的数据,从而该多个存储节点102能够实现分布式存储。全局状态表具体实现可以是列表、索引结构等数据结构,本发明实施例对此不作限定。123.在一种可能的实现方式中,该数据节点101还包括接口转换库1014以及数据接口1015,例如图1中的数据节点101,其中,该接口转换库1014,用于接收该应用程序1011发送的数据(例如元数据操作请求或者待写入的应用数据),对接收到的数据进行数据格式转化,将转换后的数据通过数据接口1015发送至客户端1012,客户端1012能够直接将接收到数据存储至存储节点102,或者,也能够将数据暂时存储在存储设备1013,存储设备1013再通过异步刷盘将存储的数据刷入存储节点102。可选地,该接口数据库是高层次(highlevel)输入输出(inputout,io)库,例如层次性数据格式第五版(hierarchicaldataformatversion5,hdf5)。可选地,该数据接口1015是可移植操作系统接口(portableoperatingsysteminterface,posix),消息传递接口(messagepassinginterface,mpi)-io或私有接口。124.本技术实施例还提供的一种节点设备的结构示意图,例如图3所示的节点设备300,该节点设备300是数据节点,或者是存储节点,该节点设备300可因配置或性能不同而产生比较大的差异,包括一个或一个以上处理器301和一个或一个以上的存储器302,其中,可选地,所述处理器301是中央处理器(centralprocessingunit,cpu),所述存储器302中存储有至少一条程序代码,所述至少一条程序代码由所述处理器301加载并执行以实现下述各个方法实施例提供的元数据操作方法中数据节点或存储节点所执行的步骤。当然,该节点设备300还能够具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该节点设备300还可以包括其他用于实现设备功能的部件,在此不做赘述。125.在示例性实施例中,还提供了一种计算机可读存储介质,例如包括程序代码的存储器,上述程序代码可由终端中的处理器执行以完成下述实施例中的元数据操作方法。例如,该计算机可读存储介质是只读存储器(read-onlymemory,rom)、ram、只读光盘(compactdiscread-onlymemory,cd-rom)、磁带、软盘和光数据存储设备等。126.对于具有层级关系或父子关系的至少两个对象,该至少两个对象的元数据操作均能够由同一个数据节点来实现,为了进一步说明该过程,参见如图4所示的本技术实施例提供的一种存储系统中元数据操作方法的流程图。127.401、第一数据节点获取元数据操作请求,该元数据操作请求用于指示对第一对象进行元数据操作。128.该第一数据节点为存储系统中的任一数据节点,该第一数据节点包括第一存储设备。该第一对象为待进行元数据操作的对象,可选地,元数据操作的对象为目录或者文件,本技术实施例仅以对象为目录为例进行说明。129.该元数据操作请求包括该第一对象的对象标识以及元数据操作标识,一个对象的对象标识用于唯一指示该对象,该对象的对象标识包括该对象所属的fs的身份标识(identity,id)以及该对象的id。元数据操作标识包括创建标识、删除标识或设置标识,其中,创建标识用于指示在存储系统中创建该第一对象,若该第一对象为存储系统中的第二对象的一个子对象(第二对象也即是该第一对象的父对象),则该元数据操作请求还包括第二对象的对象标识,此时该元数据操作请求用于指示存储系统中的第二对象下创建该第一对象;该删除标识用于指示删除存储系统中的该第一对象;该设置标识用于指示设置第一对象的属性。130.在一种可能的实现方式中,该第一数据节点能够生成该元数据操作请求。可选地,该第一数据节点还包括第一应用程序,生成该元数据操作请求的过程由该第一应用程序来执行。可选地,用户操作能够触发该第一应用程序生成该元数据操作请求。用户在该第一数据节点的元数据操作界面内输入该第一对象的对象标识以及元数据操作标识,当该第一数据节点检测到用户在该元数据操作界面内执行了确认操作后,则触发第一应用程序生成包括该第一对象的对象标识以及元数据操作标识的元数据操作请求。131.可选地,该第一数据节点还包括第一客户端,当该第一应用程序生成该元数据操作请求后,该第一应用程序向该第一客户端发送该元数据操作请求,以便该第一客户端根据该元数据操作请求,对该第一对象进行元数据操作。132.402、该第一数据节点确定对第二对象进行元数据操作的数据节点,该第二对象为该第一对象的父对象。133.对于任一对象,数据节点对该任一对象进行元数据操作的过程是指:数据节点将该任一对象的日志数据存储在本地的存储设备内,因此,存储该任一对象的日志数据的数据节点也即是对该任一对象进行元数据操作的节点,也即是对第二对象进行元数据操作的数据节点为存储第二对象的日志数据的数据节点。134.在一种可能的实现方式中,该第一数据节点先查询第一存储设备中是否存储有该第二对象的日志数据,若在该第一存储设备中查询到该第二对象的日志数据,则说明对该第二对象进行元数据操作的数据节点为第一数据节点。若在该第一存储设备中未查询到该第二对象的日志数据,说明第一存储设备可能已经将第二对象的日志数据写入存储节点(也即是刷盘至存储节点),或者该第一数据节点并不是对第二对象进行元数据操作的数据节点,则该第一数据节点获取该第二对象的状态信息,根据该第二对象的状态信息确定对第二对象进行元数据操作的数据节点。135.其中,一个对象的状态信息包括该对象的元数据操作状态的状态标识以及对该对象进行元数据操作的数据节点的节点标识。可选地,该状态信息还包括该对象的对象标识、数据节点对该对象进行元数据操作的时间以及该元数据操作标识。该元数据操作状态包括第一状态、第二状态、第三状态、第四状态以及第五状态。其中,第一状态,用于指示该对象的日志数据存储在数据节点,且存储该日志数据的数据节点与请求对该对象进行元数据操作的数据节点是同一个节点,可选地,该第一状态的状态标识是bb_local;该第二状态,用于指示该对象的日志数据存储在数据节点,且存储该日志数据的数据节点与请求对该对象进行元数据操作的数据节点不是同一个节点,可选地,该第二状态的状态标识是bb_remote;该第三状态,用于指示该存储节点对该对象进行的元数据操作已经完成,且该对象不存在子对象,可选地,该第三状态的状态标识是fs_empty;该第四状态,用于指示存储节点对该对象所进行的元数据操作已经完成,且正在对该子对象进行元数据操作,可选地,该第四状态的状态标识是bb_fs;该第五状态,用于指示该存储节点对该对象所进行的元数据操作已经完成,且对该子对象所进行的元数据操作已经完成,也即是该对象下存在子对象,可选地,该第五状态的状态标识是fs_n_empty。需要说明的是,请求对该对象进行元数据操作的数据节点为:生成用于指示对该对象进行元数据操作的元数据操作请求的数据节点,例如在本实施例中,请求对第一对象进行元数据操作的数据节点为第一数据节点。136.在一些实施例中,第一数据节点每在第一存储设备存储一条日志数据后,还能够在本地存储该日志数据的索引信息,该索引信息用于指示该日志数据在该第一存储设备中的存储位置,该索引信息包括该日志数据对应的对象的对象标识以及该日志数据在该第一存储设备中的存储位置。可选地,该第一数据节点将该多个日志数据的索引信息,存储在哈希表中。在一种可能的实现方式中,该第一数据节点确定第一存储设备中是否存储有该第二对象的日志数据的过程为:该第一数据节点根据该第二对象的对象标识,从本地存储的多个日志数据的索引信息中,查询该第二对象的日志数据的索引信息,若能够查询到该第二对象的日志数据的索引信息,则说明该第一数据节点的第一存储设备中存储有第二对象的日志数据。可选地,该第一数据节点以该第二对象的对象标识为关键字(keyword),若在该哈希表中能够查询到该第二对象的对象标识所对应的索引信息,则查询到的索引信息也即是第二对象的日志数据的索引信息。137.在一种可能的实现方式中,第一数据节点获取第二对象的状态信息的过程为:该第一数据节点在该存储系统的全局状态表中查询该第二对象的状态信息,该全局状态表用于记录该存储系统中多个对象的状态信息,该全局状态表中的每个对象的状态信息用于指示该对象的元数据操作状态以及对该对象进行元数据操作的数据节点,该全局状态表对该存储系统中的各个节点均可见。138.可选地,该全局状态表存储在云端,则该第一数据节点在该存储系统的全局状态表中查询该第二对象的状态信息的过程为:第一数据节点向云端服务器发送状态查询请求,该状态查询请求包括该第二对象的对象标识,该云端服务器根据该状态查询请求中第二对象的对象标识,从存储的全局状态表中查询该第二对象的状态信息,并向该第一数据节点发送查询到的第二对象的状态信息,该第一数据节点从云端服务器接收该第二对象的状态信息。139.可选地,该全局状态表存储在存储系统中的多个数据节点所提供的存储空间内,则该第一数据节点在该存储系统的全局状态表中查询该第二对象的状态信息的过程为:该第一数据节点根据该第二对象的对象标识以及预设存储规则,确定用于存储该第二对象的状态信息的第一目标数据节点,第一数据节点向该第一目标数据节点发送状态查询请求,该第一目标数据节点根据该状态查询请求中第二对象的对象标识,从本地存储的全局状态表中查询该第二对象的状态信息,并向该第一数据节点发送查询到的第二对象的状态信息,该第一数据节点从第一目标数据节点接收该第二对象的状态信息。可选地,预设存储规则是哈希算法,可选地,该第一数据节点根据该第二对象的对象标识以及预设存储规则,确定用于存储该第二对象的状态信息的第一目标数据节点的过程是:该第一数据节点以该第二对象的对象标识为关键字,对该第二对象的对象标识进行哈希运算,该第一数据节点将哈希运算的结果所指示的数据节点确定为该第一目标数据节点。140.在一些实施例中,存储系统中的每个数据节点内均存储有本地状态表,一个数据节点内存储的本地状态表用于存储该数据节点进行元数据操作的对象的状态信息,该数据节点进行元数据操作的对象的状态信息用于指示该数据节点进行元数据操作的对象的元数据操作状态以及该数据节点。例如图5所示的本技术实施例提供的一种状态信息的分布示意图,假设存储系统包括数据节点1-3,数据节点1-3均提供10g的存储空间用于存储全局状态表,数据节点1-3均能访问各个数据节点存储的该全局状态表,例如数据节点1能够访问数据节点2-3中存储的全局状态表。数据节点1-3分别另外提供1g的存储空间用于存储本地状态表,数据节点1-3均仅能访问本地存储的本地状态表,不能访问其他数据节点存储的本地状态表,例如,数据节点1仅能访问本地存储的本地状态表,但是不能访问数据节点2-3存储的本地状态表。本地状态表具体实现可以是列表、索引结构等数据结构,本发明实施例对此不作限定。141.在一种可能实现方式中,第一数据节点获取第二对象的状态信息的过程为:该第一数据节点根据该元数据操作请求中第二对象的对象标识,在本地状态表中查询该第二对象的状态信息,若能够在本地状态表中查询到该第二对象的状态信息,则说明第一数据节点为对第二对象进行元数据操作的数据节点,该第一数据节点从该本地状态表中获取查询到的该第二对象的状态信息,若在本地状态表中未查询到该第二对象的状态信息,则该第一数据节点在该存储系统的全局状态表中查询该第二对象的状态信息。142.在一种可能的实现方式中,第一数据节点根据该第二对象的状态信息确定对第二对象进行元数据操作的数据节点的过程为:该第一数据节点从该第二对象的状态信息获取对该第二对象进行元数据操作的数据节点的节点标识,该节点标识所指示的数据节点也即是对该第二对象进行元数据操作的数据节点。例如该节点标识所指示的数据节点为第一数据节点,则该第一数据节点为对第二对象进行元数据操作的数据节点,此时步骤402所示的过程也即是第一数据节点确定该第一数据节点为对第二对象进行元数据操作的数据节点的过程。143.需要说明的是,若该第一对象具有父对象,则该第一数据节点执行本步骤402,若该第一对象不具有父对象,则该第一数据节点不执行本步骤402(例如第一对象为根目录)。可选地,本步骤402所示的过程能够由第一数据节点中的第一客户端来执行。144.403、若该第一数据节点为对第二对象进行元数据操作的数据节点,该第一数据节点将该第一对象的状态信息记录到该存储系统的全局状态表。145.该第一对象的状态信息包括该第一对象的元数据操作状态的状态标识、该第一数据节点的节点标识、该第一对象的对象标识、该第一数据节点对该第一对象进行元数据操作的时间以及该元数据操作标识。由于后续该第一数据节点将该第一对象的日志数据存储在第一数据节点,且该第一数据节点不仅是对第一对象进行元数据操作的数据节点,也是请求对第一对象进行元数据操作的数据节点,因此,该第一对象处于第一状态,则此时该第一对象的元数据操作状态为第一状态。146.该第一数据节点根据该元数据操作请求所携带的内容,生成该第一对象的状态信息,并将生成的第一对象的状态信息记录到该存储系统的全局状态表。147.在一种可能的实现方式中,该第一数据节点根据该第一对象的对象标识以及该预设存储规则,确定第二目标数据节点,并向该第二目标数据节点发送状态信息存储请求,该状态信息存储请求包括该第一对象的状态信息;该第二目标数据节点将该状态信息存储请求中第一对象的状态信息,记录到本地的全局状态表中。148.为了后续便于查找第一对象的状态信息,该第一数据节点还能够将该第一对象的状态信息记录到本地状态表,该本地状态表用于记录该第一数据节点进行元数据操作的对象的状态信息,该第一数据节点进行元数据操作的对象的状态信息用于指示该第一数据节点进行元数据操作的对象的元数据操作状态以及该第一数据节点。149.404、若该第一数据节点为对第二对象进行元数据操作的数据节点,该第一数据节点将目标日志数据存储至该第一存储设备,该目标日志数据用于记录对该第一对象进行元数据操作的事件。150.该目标日志数据也即是第一对象的日志数据,该目标日志数据包括该第一对象的对象标识、该第一数据节点对该第一对象进行元数据操作的时间以及该元数据操作标识,该第一数据节点对该第一对象进行元数据操作的时间也即是该第一数据节点向第一存储设备存储目标日志数据的时间。可选地,该目标日志数据还包括第一数据节点的节点标识以及第二对象的对象标识。151.该第一数据节点根据该元数据操作请求所携带的内容,生成该目标日志数据,并将该目标日志数据存储在第一存储设备。152.本步骤404所示的过程能够由第一数据节点中的第一客户端来执行,在一种可能的实现方式中,第一客户端在生成该目标日志数据后,向该第一存储设备发送日志数据存储请求,该日志数据存储请求包括该目标日志数据,当该第一存储设备接收到该日志数据存储请求后,对该日志数据存储请求中的目标日志数据进行存储。153.当该第一数据节点将该目标日志数据存储在该第一存储设备后,说明该第一数据节点对该第一对象进行的元数据操作已经完成,后续还需要存储节点基于该目标日志数据对该第一对象进行元数据操作,也即是此时该存储系统正在对第一对象进行元数据操作。若该第二对象已经存在于存储节点,则也即是存储系统正在对第二对象的子对象进行元数据操作,则该第一数据节点还能够将该第二对象的状态修改为第四状态。154.在一种可能的实现方式中,该第一数据节点能够将全局状态表中该第二对象的状态信息内的状态标识修改第四状态的状态标识。可选地,若该全局状态表存储在云端,该第一数据节点向云端服务器发送状态修改请求,该状态修改请求包括该第二对象的对象标识、该第四状态的状态标识以及修改标识,该修改标识用于指示修改全局状态表中记录的对象的状态;当该云端服务器接收到该状态修改请求后,基于该状态修改请求,将存储的全局状态表中该第二对象的状态信息内的状态标识修改为第四状态的状态标识。可选地,若该全局状态表存储在存储系统中的多个数据节点所提供的存储空间内,则该第一数据节点向第一目标数据节点发送状态修改请求;当该第一目标数据节点接收到该状态修改请求后,基于该状态修改请求,将存储的全局状态表中该第二对象的状态信息内的状态标识修改为第四状态的状态标识。155.在一种可能的实现方式中,该第一数据节点将本地状态表中该第二对象的状态信息内的状态标识修改第四状态的状态标识。156.在一种可能的实现方式中,修改第二对象的状态的过程由该第一数据节点中的第一客户端来执行,当该第一存储设备将该目标日志数据存储完成后,该第一存储设备向该第一客户端发送存储完成响应,该存储完成响应用于指示已经存储完成该第一对象的该目标日志数据,则当第一客户端接收到该存储完成响应后,该第一客户端将该第二对象的状态修改为第四状态。157.405、该第一数据节点生成该目标日志数据的目标索引信息,并对该目标索引信息进行存储。158.该目标索引信息包括该第一对象的对象标识以及该目标日志数据在该第一存储设备中的存储位置。该第一数据节点根据目标日志数据以及该目标日志数据在第一存储设备中的存储位置,生成该目标索引信息,并在本地的存储设备中存储该目标索引信息。在一种可能的实现方式中,本步骤405所示的过程由第一数据节点中的第一客户端来执行。159.406、该第一数据节点生成该完成响应,并显示该完成响应,该完成响应用于指示数据节点对该第一对象进行的元数据操作已经完成。160.该完成响应包括该第一对象的对象标识以及完成标识,该完成标识用于指示数据节点对该第一对象进行的元数据操作已经完成。当该第一数据节点将该目标日志数据存储至第一存储设备后,说明该第一数据节点对该第一对象所进行的元数据操作已经完成,则该第一数据节点生成该完成响应,并显示该完成响应,以提示用户对该第一对象所进行的元数据操作已经完成。161.在一种可能的实现方式中,该第一数据节点中的第一客户端生成该完成响应,并向该第一应用程序返回该完成响应,当该第一应用程序接收到该完成响应后,该第一应用程序显示该完成响应,以提示用户对该第一对象所进行的元数据操作已经完成。162.为了进一步说明上述步骤401-406所示的过程,以元数据操作为在目录0(也即是第二对象)下创建目录1(也即是第一对象)为例进行说明,参见图6所示的本技术实施例提供的一种目录创建方法的流程图,第一客户端为分布式私有客户端(distributedprivateclient,dpc)1,第一数据节点中的第一应用程序向dpc1发送元数据操作请求,此时该元数据操作请求包括目录0和1的对象标识以及创建操作标识;dpc1根据该元数据操作请求中目录0的对象标识,在本地状态表中查询目录0的状态信息,通过目录0的状态信息,dpc1确定第一数据节点为创建目录0的数据节点;为了保持目录0与目录1之间的亲和性,则dpc1在全局状态表中存储目录1的状态信息,并在本地存储用于记录创建目录1的事件的目标日志数据以及该目标日志数据的索引信息,当在本地存储完该目标日志数据以及该目标日志数据的索引信息后,dpc1向第一应用程序发送完成响应。163.407、该第一数据节点中的第一存储设备将该目标日志数据写入存储节点。164.该第一存储设备通过目标写请求,将该目标日志数据写入该存储节点。可选地,该第一存储设备向该存储节点发送目标写请求,该目标写请求包括该目标日志数据。165.408、该存储节点根据写入的目标日志数据,对该第一对象进行元数据操作。166.该存储节点能够根据该目标日志数据中的元数据操作标识,对该第一对象进行该元数据操作标识所指示的元数据操作。167.若该元数据操作标识为创建标识,则该存储节点创建该第一对象,若该目标日志数据还包括第二对象的对象标识,则该存储节点在该第二对象下创建该第一对象。若该元数据操作标识为删除标识,则该存储节点删除第一对象。若该元数据操作标识为设置标识,则该存储节点对该第一对象的属性进行设置。168.409、该存储节点向第一数据节点发送目标完成响应,该目标完成响应用于指示存储节点对该第一对象进行的元数据操作已经完成。169.该目标完成响应包括该第一对象的对象标识以及目标完成标识,该目标完成标识用于指示存储节点对该第一对象进行的元数据操作已经完成。170.在一种可能的实现方式中,该存储节点向该第一数据节点中的第一存储设备发送该目标完成响应,当该第一存储设备接收到该目标完成响应后,将接收到的目标完成响应转发至第一客户端。在另一种可能的实现方式中,该存储节点向该第一客户端发送该目标完成响应,该第一客户端从该存储节点接收该目标完成响应。171.410、该第一数据节点接收该目标完成响应。172.当接收到该目标完成响应后,该第一数据节点基于该目标完成响应中的目标完成标识,确定该存储节点对该第一对象进行的元数据操作已经完成,由于该第一对象为新创建的对象,则该第一对象此时不存在子对象,则该第一数据节点将该第一对象的状态修改为第三状态。其中,第一数据节点将该第一对象的状态修改为第三状态的过程与第一数据节点将该第二对象的状态修改为第四状态的过程同理,在此,本技术实施例对第一数据节点将该第一对象的状态修改为第三状态的过程不做赘述。173.若该元数据操作为在第二对象下创建第一对象,则此时第二对象中已经存在子对象,则该第一数据节点将该第二对象的状态修改为第五状态。其中,第一数据节点将该第二对象的状态修改为第五状态的过程与该第一数据节点将该第二对象的状态修改为第四状态的过程同理,在此,本技术实施例对第一数据节点将该第二对象的状态修改为第五状态的过程不做赘述。174.本技术实施例提供的方法,通过数据节点将用于记录进行元数据操作事件的日志数据存储至本地的存储设备,即可完成数据节点进行的元数据操作,后续以便由存储节点根据数据节点中存储的日志数据,对对象进行元数据操作,而无需数据节点直接在存储节点对对象进行元数据操作,从而减少了数据节点进行元数据操作的时间,提高了数据节点进行元数据操作的效率,从而减少了数据节点进行元数据操作的时间,提高了数据节点进行元数据操作的效率。并且,在对对象进行元数据操作的过程中,数据节点实时在本地状态表中记录或更新对象的状态,便于后续在本地查询本节点进行的元数据操作的对象的状态信息。并且,在对对象进行元数据操作的过程中,数据节点实时在全局状态表中记录或更新对象的状态,便于存储系统中的各个节点均能在全局状态表中查询各个对象的状态,避免各个节点进行的元数据操作的对象出现冲突。并且,具有层次关系或父子关系的两个对象均由同一个数据节点进行元数据操作,从而能够保持这个两个对象之间的亲和性。若请求对对象进行元数据操作的数据节点与对对象进行元数据操作的数据节点为同一个节点,从而能够保持对象与数据节点之间的亲和性,也即是数据节点在本地对对象进行元数据操作,从而能够便于数据节点在本地访问对象。175.在一些情况中,若请求对第一对象进行元数据操作的数据节点与对第二对象进行元数据操作的数据节点不是同一个数据节点时,由对第二对象进行元数据操作的数据节点来对第一对象进行元数据操作,为了进一步说明该过程,参见图7所示的本技术实施例提供的一种存储系统中元数据操作方法的流程图。176.701、第二数据节点生成元数据操作请求,该元数据操作请求用于指示对第一对象进行元数据操作。177.该第二数据节点包括第二应用程序、第二客户端以及第二存储设备。其中,本步骤701所示的过程能够由第二应用程序来执行,而第二应用程序生成元数据操作请求的过程与步骤401中第一应用程序生成元数据操作请求的过程同理,在此,本技术实施例对第二应用程序生成元数据操作请求的过程不做赘述。此时,该第二数据节点为请求对第一对象进行元数据操作的数据节点。178.702、该第二数据节点确定对第二对象进行元数据操作的数据节点以及该第二对象的状态,该第二对象为该第一对象的父对象。179.该第二数据节点确定对第二对象进行元数据操作的数据节点的过程与步骤701中该第一数据节点确定对第二对象进行元数据操作的数据节点的过程同理,在此,本技术实施例对该第二数据节点确定对第二对象进行元数据操作的数据节点的过程不做赘述。180.第二数据节点获取该第二对象的状态信息,并根据该第二对象的状态信息中的状态标识,确定该第二对象的状态,例如,该第二对象的状态信息中的状态标识为第一状态的状态标识,则该第二对象处于第一状态,也即是该第二对象的状态为第一状态。其中,第二数据节点获取该第二对象的状态信息的过程与步骤402中第一数据节点获取该第二对象的状态信息的过程同理,在此本技术实施例对第二数据节点获取该第二对象的状态信息的过程不做赘述。181.本步骤702所示的过程能够由第二数据节点中的第二客户端来执行,在一种可能的实现方式中,第二应用程序生成该元数据操作请求后,向第二客户端发送生成的元数据操作请求,当该第二客户端接收到该元数据操作请求后,执行本步骤702。182.703、若该第一数据节点为对第二对象进行元数据操作的数据节点,且该第二对象处于第一状态,则该第二数据节点向该第一数据节点发送该元数据操作请求。183.若该第一数据节点为对第二对象进行元数据操作的数据节点,且该第二对象处于第一状态,说明此时第一数据节点内还存储有第二对象的日志数据,且存储节点还未能基于该第二对象的日志数据,对第二对象进行元数据操作,那么为了保持第一对象与第二对象之间的亲和性,该第二数据节点将该元数据操作请求发送给第一数据节点,由第一数据节点基于该元数据操作请求,对该第一对象进行元数据操作,也即是第一数据节点为对第一对象进行元数据操作的数据节点。184.在一种可能的实现方式中,本步骤703所示的过程由第二数据节点中的第二客户端来执行,该第二客户端在确定该第一数据节点为对第二对象进行元数据操作的数据节点,且该第二对象处于第一状态后,第二客户端向第一数据节点中的第一客户端发送该元数据操作请求。185.704、该第一数据节点从该第二数据节点接收该元数据操作请求。186.可选地,本步骤704所示的过程由第一数据节点中的第一客户端来执行。本步骤704所示的过程也即是第一数据节点获取该元数据操作请求的过程。187.705、该第一数据节点将该第一对象的状态信息记录到该存储系统的全局状态表。188.本步骤705所示的过程与步骤403所示的过程同理,在此本技术实施例对本步骤704不做赘述。189.需要说明的是,本步骤705中第一对象的状态与步骤403中第一对象的状态不同。由于此时请求对第一对象进行元数据操作的数据节点为第二数据节点,而后续对第一对象进行元数据操作的数据节点为该第一数据节点,也即是请求对第一对象进行元数据操作的数据节点与对第一对象进行元数据操作的数据节点不是同一节点,则此时该第一对象处于第二状态,则此时该第一对象的状态信息中的状态标识为第二状态的状态标识。190.706、该第一数据节点将目标日志数据存储至该第一存储设备。191.本步骤706所示的过程与步骤404所示的过程同理,在此本技术实施例对本步骤706不做赘述。192.需要说明的是,由于此时第二对象的元数据操作可能已经完成,也即是第二对象可能已经存在于存储节点,为了保持第一对象与第二对象之间的亲和性,第一客户端向第一存储设备发送的该日志数据存储请求中还携带快速写入标识,该快速写入标识用于指示在目标时长内将该目标日志数据写入存储节点。193.当该第一数据节点将该目标日志数据存储在该第一存储设备后,说明该第一数据节点对该第一对象进行的元数据操作已经完成,后续还需要存储节点基于该目标日志数据对该第一对象进行元数据操作,此时,也即是该存储系统正在对第一对象进行元数据操作。若该第二对象已经存在于存储节点,则也即是存储系统正在对第二对象的子对象进行元数据操作,则该第一数据节点还能够将该第二对象的状态修改为第四状态。194.707、该第一数据节点生成该目标日志数据的目标索引信息。195.本步骤707所示的过程与步骤405所示的过程同理,在此本技术实施例对本步骤707不做赘述。196.708、若该第一对象的元数据操作状态为该第二状态,第一数据节点中的第一存储设备在目标时长之内,将该目标日志数据写入该存储节点。197.当第一存储设备接收到的日志数据存储请求中携带有该快速写入标识时,则说明此时该第一对象可能处于第二状态,则该第一存储设备能够在目标时长内向存储节点发送目标写请求,以将该目标写请求携带的目标日志数据写入该存储节点。198.709、该第一数据节点生成完成响应。199.其中,第一数据节点生成完成响应的过程在步骤406中相关介绍,在此本技术实施例对本步骤709所示的过程不做赘述。200.710、该第一数据节点向该第二数据节点发送该完成响应。201.当第一客户端生成该完成响应后,向该第二数据节点中的第二客户端发送该完成响应。202.711、第二数据节点接收该完成响应,并显示该完成响应。203.当第二客户端从第一客户端接收到该完成响应后,第二客户端向第二应用程序转发该完成响应,并由第二应用程序显示该完成响应。204.为了进一步说明上述步骤701-711所示的过程,以元数据操作为在目录1(也即是第二对象)下创建目录2(也即是第一对象)为例进行说明,参见图8所示的本技术实施例提供的一种目录创建方法的流程图,第一客户端和第二客户端分别为dpc1和dpc2,第二数据节点中的第二应用程序向dpc2发送元数据操作请求,此时该元数据操作请求包括目录1和2的对象标识以及创建操作标识;dpc2根据该元数据操作请求中目录1的对象标识,在本地状态表中查询目录1的状态信息,若在本地状态表中未查询到目录1的状态信息,则dpc2在全局状态表中查询目录1的状态信息,并通过查询到的目录1的状态信息,dpc2确定第一数据节点为创建目录1的数据节点;为了保持目录1与目录2之间的亲和性,则dpc2向dpc1发送元数据操作请求,dpc1根据该元数据操作请求,在全局状态表中存储目录2的状态信息,并在本地存储用于记录创建目录2的事件的目标日志数据以及该目标日志数据的索引信息,当在本地存储完该目标日志数据以及该目标日志数据的索引信息后,dpc1向dpc2发送完成响应,dpc2向第二应用程序转发接收到完成响应。205.712、该存储节点根据写入的目标日志数据,对该第一对象进行元数据操作。206.本步骤712所示的过程与步骤408所示的过程同理,在此本技术实施例对本步骤712不做赘述。207.713、该存储节点向第一数据节点发送目标完成响应。208.本步骤713所示的过程与步骤409所示的过程同理,在此本技术实施例对本步骤713不做赘述。209.714、该第一数据节点接收该目标完成响应。210.本步骤714所示的过程与步骤410所示的过程同理,在此本技术实施例对本步骤714做赘述。若该元数据操作为在第二对象下创建第一对象,则此时第二对象中已经存在子对象,则该第一数据节点可将该第二对象的状态修改为第五状态。211.本技术实施例提供的方法,通过数据节点将用于记录进行元数据操作事件的日志数据存储至本地的存储设备,即可完成数据节点进行的元数据操作,后续以便由存储节点根据数据节点中存储的日志数据,对对象进行元数据操作,而无需数据节点直接在存储节点对对象进行元数据操作,从而减少了数据节点进行元数据操作的时间,提高了数据节点进行元数据操作的效率,从而减少了数据节点进行元数据操作的时间,提高了数据节点进行元数据操作的效率。并且,在对对象进行元数据操作的过程中,数据节点实时在本地状态表中记录或更新对象的状态,便于后续在本地查询本节点进行的元数据操作的对象的状态信息。并且,在对对象进行元数据操作的过程中,数据节点实时在全局状态表中记录或更新对象的状态,便于存储系统中的各个节点均能在全局状态表中查询各个对象的状态,避免各个节点进行的元数据操作的对象出现冲突。并且,具有层次关系或父子关系的两个对象均由同一个数据节点进行元数据操作,从而能够保持这个两个对象之间的亲和性。212.在一些情况中,若请求对第一对象进行元数据操作的数据节点与对第二对象进行元数据操作的数据节点不是同一个数据节点时,也能够由请求对第一对象进行元数据操作的数据节点对第一对象进行元数据操作,为了进一步说明该过程,参见图9所示的本技术实施例提供的一种存储系统中元数据操作方法的流程图。213.901、第一数据节点获取元数据操作请求,该元数据操作请求用于指示对第一对象进行元数据操作。214.此时,该第一数据节点也即是请求对第一对象进行元数据操作的数据节点。本步骤901所示的过程与步骤401所示的过程同理,在此本技术实施例对本步骤901不做赘述。215.902、该第一数据节点确定对第二对象进行元数据操作的数据节点以及第二对象的状态。216.其中,该第一数据节点确定对第二对象进行元数据操作的数据节点以及第二对象的状态的过程在步骤402中有相关介绍,在此,本技术实施例对本步骤902不做赘述。217.903、若对该第二对象进行元数据操作的数据节点为第三数据节点,且该第二对象处于第二状态,则该第一数据节点等待第二对象的状态转变第三状态。218.若该第二对象处于第二状态,则该第三数据节点可能正在向存储节点写入第二对象的日志数据,或者,存储节点正在基于写入的第二对象的日志数据,对第二对象进行元数据操作,则该第一数据节点为了保持第一对象与数据节点之间的亲和性,暂时不对第一对象进行元数据操作,而是等待第二对象的状态变化为处于第三状态后,再对第一对象进行元数据操作。219.904、若该第二对象处于第三状态,该第一数据节点将该第一对象的状态信息记录到该存储系统的全局状态表。220.其中,该第一数据节点将该第一对象的状态信息记录到该存储系统的全局状态表的过程在步骤403中有相关介绍,在此,本技术实施例对本步骤904不做赘述。221.905、第一数据节点将目标日志数据存储至该第一存储设备。222.本步骤905所示的过程与步骤404所示的过程同理,在此本技术实施例对本步骤905不做赘述。223.需要说明的是,若第二对象处于第三状态、第四状态或第五状态中的任一状态,第一数据节点无需执行上述步骤903,而直接执行步骤904和905。由于若第二对象处于第三状态、第四状态或第五状态中的任一状态,则说明该第二对象已经存在于存储节点中,则该第一数据节点无须关心第二对象的存储位置,则该第一数据节点直接执行本步骤903和905,也即是,若第一数据节点确定该存储节点中已经存储有第二对象,则该第一数据节点执行将该目标日志数据存储至第一数据节点中的第一存储设备的步骤。224.906、该第一数据节点生成该目标日志数据的目标索引信息,并对该目标索引信息进行存储。225.本步骤906所示的过程与步骤405所示的过程同理,在此本技术实施例对本步骤906不做赘述。226.907,该第一数据节点生成该完成响应,并显示该完成响应。227.本步骤907所示的过程与步骤406所示的过程同理,在此本技术实施例对本步骤907不做赘述。228.为了进一步说明上述步骤901-907所示的过程,以元数据操作为在目录3(也即是第二对象)下创建目录4(也即是第一对象)为例进行说明,参见图10所示的本技术实施例提供的一种目录创建方法的流程图,第一客户端为dpc1,第一应用程序向dpc1发送该元数据操作请求,此时该元数据操作请求包括目录3和4的对象标识以及创建操作标识;dpc1根据该元数据操作请求中目录3的对象标识,在本地状态表中查询目录3的状态信息,若在本地状态表中未查询到目录3的状态信息,则dpc1在全局状态表中查询目录3的状态信息,并通过查询到的目录3的状态信息,dpc1确定第三数据节点为创建目录3的数据节点,且目录3处于第二状态;dpc1等待目录3的状态刷新;当目录3的状态为第三状态后,为了保持目录4与第一数据节点之间的亲和性,则dpc1根据该元数据操作请求,在全局状态表中存储目录4的状态信息,并在本地存储用于记录创建目录4的事件的目标日志数据以及该目标日志数据的索引信息,当在本地存储完该目标日志数据以及该目标日志数据的索引信息后,dpc1向第一应用程序发送完成响应。229.908、该第一数据节点中的第一存储设备将该目标日志数据写入存储节点。230.本步骤908所示的过程与步骤407所示的过程同理,在此本技术实施例对本步骤908不做赘述。231.909、该存储节点根据写入的目标日志数据,对该第一对象进行元数据操作。232.本步骤909所示的过程与步骤408所示的过程同理,在此本技术实施例对本步骤909不做赘述。233.910、该存储节点向第一数据节点发送目标完成响应。234.本步骤910所示的过程与步骤409所示的过程同理,在此本技术实施例对本步骤910不做赘述。235.911、该第一数据节点接收该目标完成响应。236.本步骤911所示的过程与步骤410所示的过程同理,在此本技术实施例对本步骤911不做赘述。237.本技术实施例提供的方法,通过数据节点将用于记录进行元数据操作事件的日志数据存储至本地的存储设备,即可完成数据节点进行的元数据操作,后续以便由存储节点根据数据节点中存储的日志数据,对对象进行元数据操作,而无需数据节点直接在存储节点对对象进行元数据操作,从而减少了数据节点进行元数据操作的时间,提高了数据节点进行元数据操作的效率,从而减少了数据节点进行元数据操作的时间,提高了数据节点进行元数据操作的效率。并且,在对对象进行元数据操作的过程中,数据节点实时在本地状态表中记录或更新对象的状态,便于后续在本地查询本节点进行的元数据操作的对象的状态信息。并且,在对对象进行元数据操作的过程中,数据节点实时在全局状态表中记录或更新对象的状态,便于存储系统中的各个节点均能在全局状态表中查询各个对象的状态,避免各个节点进行的元数据操作的对象出现冲突。若请求对对象进行元数据操作的数据节点与对对象进行元数据操作的数据节点为同一个节点,从而能够保持对象与数据节点之间的亲和性,也即是数据节点在本地对对象进行元数据操作,从而能够便于数据节点在本地访问对象。238.为了进一步说明在对第一对象进行元数据操作的过程中,第一对象的状态变化情况,请参见图11所示的本技术实施例提供的一种对象状态变化的示意图。对于在数据节点本地对第一对象进行元数据操作的过程(例如图4),第一数据节点开始对第一对象进行元数据操作,第一对象处于第一状态,当第一数据节点将第一对象的目标日志数据刷盘至存储节点后,存储节点对第一对象进行元数据操作,元数据操作完成后,第一对象处于第三状态,后续某一数据节点对第一对象的子对象进行元数据操作(例如创建子对象),则第一对象处于第四状态,当对第一对象的子对象进行的元数据操作完成后,第一对象处于第五状态,当将第一对象中的子对象删除后,第一对象处于第三状态。若第一数据节点直接将第一对象的日志数据以及第二对象的日志数据同时写入存储节点,当存储节点对第一对象以及其子对象进行的元数据操作完成后,第一对象处于第五状态。远端对第一对象进行元数据操作(例如图7)时,第一数据节点开始对第一对象进行元数据操作,第一对象处于第二状态,当第一数据节点将第一对象的目标日志数据快速刷盘存储节点后,存储节点对第一对象进行元数据操作,元数据操作完成后,第一对象处于第三状态。239.图12是本技术实施例提供的一种元数据操作装置的结构示意图,所述装置1200包括存储设备1201,所述装置1200还包括:240.获取模块1202,用于获取元数据操作请求,所述元数据操作请求用于指示对第一对象进行元数据操作;241.存储模块1203,用于将目标日志数据存储至所述存储设备1201,所述目标日志数据用于记录对所述第一对象进行元数据操作的事件。242.在一种可能的实现方式中,所述装置1200为存储系统中的数据节点。243.在一种可能的实现方式中,所述存储模块1203还用于:244.将所述第一对象的状态信息记录到所述存储系统的全局状态表,所述全局状态表用于记录所述存储系统中多个对象的状态信息,所述全局状态表中的每个对象的状态信息用于指示所述对象的元数据操作状态以及对所述对象进行元数据操作的数据节点。245.在一种可能的实现方式中,所述存储模块1203还用于:246.将所述第一对象的状态信息记录到本地状态表,所述本地状态表用于记录所述第一数据节点进行元数据操作的对象的状态信息,所述装置进行元数据操作的对象的状态信息用于指示所述装置进行元数据操作的对象的元数据操作状态以及对所述装置。247.在一种可能的实现方式中,所述元数据操作状态包括第一状态、第二状态、第三状态、第四状态以及第五状态;248.所述第一状态,用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点是同一个节点;249.所述第二状态,用于指示所述对象的日志数据存储在数据节点,且存储所述日志数据的数据节点与请求对所述对象进行元数据操作的数据节点不是同一个节点;250.所述第三状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且所述对象不存在子对象;251.所述第四状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且正在对所述子对象进行元数据操作;252.所述第五状态,用于指示所述存储节点对所述对象所进行的元数据操作已经完成,且对所述子对象所进行的元数据操作已经完成。253.在一种可能的实现方式中,所述存储设备1201,用于若所述第一对象的元数据操作状态为所述第二状态,在目标时长之内将所述目标日志数据写入所述存储节点。254.在一种可能的实现方式中,所述存储模块1203还用于:255.存储所述目标日志数据的索引信息,所述索引信息用于指示所述目标日志数据在所述存储设备中的存储位置。256.在一种可能的实现方式中,所述获取模块1202,用于生成所述元数据操作请求。257.在一种可能的实现方式中,所述装置1200还包括:258.确定模块,用于确定所述第一数据节点为对第二对象进行元数据操作的数据节点,其中,所述第二对象为所述第一对象的父对象。259.在一种可能的实现方式中,所述确定模块,还用于确定所述存储节点中已经存储有所述第二对象。260.在一种可能的实现方式中,所述装置1200还包括:261.生成模块,用于生成完成响应,所述完成响应用于指示数据节点对所述第一对象进行的元数据操作已经完成。262.在一种可能的实现方式中,所述存储系统还包括第二数据节点,所述获取模块1202用于:263.从所述第二数据节点接收所述元数据操作请求。264.在一种可能的实现方式中,所述装置1200还包括:265.发送模块,用于向所述第二数据节点发送完成响应,所述完成响应用于指示数据节点对所述第一对象进行的元数据操作已经完成。266.图13是本技术实施例提供的一种元数据操作装置的结构示意图,该装置1300包括:267.操作模块1301,用于根据第一数据节点的存储设备中存储的目标日志数据,对第一对象进行元数据操作,所述目标日志数据用于记录对所述第一对象进行元数据操作的事件。268.在一种可能的实现方式中,所述装置1300为存储系统中的存储节点。269.在一种可能的实现方式中,所述操作模块1301包括:270.获取单元13011,用于获取所述存储设备写入的所述目标日志数据;271.操作单元13012,用于根据获取的所述目标日志数据,对所述第一对象进行元数据操作。272.上述所有可选技术方案,能够采用任意结合形成本公开的可选实施例,在此不再一一赘述。273.需要说明的是:上述实施例提供的元数据操作装置在进行元数据操作时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的存储系统中元数据操作方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。274.本技术实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中,数据节点或者存储节点的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该处理器执行上述存储系统中元数据操作方法。275.本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。276.以上所述仅为本技术的可选实施例,并不用以限制本技术,凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。当前第1页12
再多了解一些

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

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

相关文献