本发明涉及分布式文件系统领域,特别涉及一种元数据的批量更新方法、系统、电子设备及可读存储介质。
背景技术:
1、数字化转型背景下,海量数据不断增长,分布式文件系统已经得到普遍应用,分布式文件系统通常包括主控服务器、存储服务器以及多个客户端,其本质是将大量的文件,均匀分布到多个存储服务器上,具有高扩展性、高可靠性的特点。
2、为了提高文件系统性能,对分布式文件系统的操作通常采用聚合追加写的方式,集群被分为缓存池和数据池,客户io(input/output,输入/输出)首先写入到三副本的缓存池,缓存池将写入的io数据缓存在主osd(object-based storage device,对象存储设备)的内存中,当前缓存的数据达到内部对象大小或者满条带时,申请一个数据池内部对象,将主osd缓存的数据写入到数据池,保证数据池的对象一直是追加写。
3、客户端写入时的对象称为业务对象,数据池中存储的聚合后的对象称为内部对象,客户端不感知内部对象,所以需要保存一份业务对象到内部对象的映射,这部分映射的数据存储在业务对象的元数据信息中,元数据的更新是在下刷内部对象成功后的回调函数中进行。
4、然而,一个内部对象可能对应着成百上千个业务对象,在当前的元数据更新的机制下,下刷数据完成触发回调进行元数据更新的时候,需要为每个业务对象构造一个事务进行元数据更新,这样不仅需要事务对应的大量的消息转发,而且每个对象元数据的更新在bluestore的rocksdb都需要同步提交而产生一次磁盘io,导致元数据更新效率低。
5、因此,如何提供一种解决上述技术问题的方案是目前本领域技术人员需要解决的问题。
技术实现思路
1、有鉴于此,本发明的目的在于提供一种具有较高更新效率的元数据的批量更新方法、系统、电子设备及可读存储介质。其具体方案如下:
2、一种元数据的批量更新方法,应用于分布式文件系统,包括:
3、响应于收到业务更新指令,触发所述业务更新指令对应的线程,对所述线程增加pg锁后执行所述线程对应的第一操作;
4、根据所述第一操作建立内部对象与业务对象的映射;
5、当收到元数据更新回调指令,触发回调线程,对所述回调线程增加pg锁后,遍历所述内部对象映射的所述业务对象以确定待更新元数据;
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、根据所有所述业务对象及其对应的所述待更新元数据,调用setattr接口构造一个事务。
31、可选的,所述业务更新指令包括:业务写指令,和/或业务读指令,和/或内部对象下刷触发指令。
32、可选的,所述业务写指令包括写入指令、和/或清零指令、和/或删除指令、和/或截留指令。
33、可选的,对所述线程增加pg锁后执行所述线程对应的第一操作之后,还包括:
34、当所述线程对应的第一操作完成,解除所述线程对应的pg锁;
35、相应的,将所述事务转发至所述待更新元数据对应的目标节点,以使所述目标节点根据所述事务对所述待更新元数据进行下盘操作之后,还包括:
36、当完成所述事务的转发,解除所述回调线程对应的pg锁。
37、可选的,将所述事务转发至所述待更新元数据对应的目标节点的过程,包括:
38、将所述事务提交到rocksdb,以使所述事务被转发至所述待更新元数据对应的目标节点。
39、可选的,对所述线程增加pg锁后执行所述线程对应的第一操作之后,还包括:
40、获取所述第一操作对应的第一正向关系;
41、获取目标节点当前对应的第二正向关系;
42、对所述第一正向关系和所述第二正向关系进行正向合并,以确定所述业务对象的待更新元数据。
43、可选的,所述获取目标节点当前对应的第二正向关系的过程,包括:
44、通过store层获取目标节点当前对应的第二正向关系。
45、可选的,对所述第一正向关系和所述第二正向关系进行正向合并,以确定所述业务对象的待更新元数据之后,还包括:
46、更新相应的所述内部对象的摘要信息。
47、相应的,本技术还公开了一种元数据的批量更新系统,应用于分布式文件系统,包括:
48、线程模块,用于响应于收到业务更新指令,触发所述业务更新指令对应的线程,对所述线程增加pg锁后执行所述线程对应的第一操作;
49、映射模块,用于根据所述第一操作建立内部对象与业务对象的映射;
50、确定模块,用于当收到元数据更新回调指令,触发回调线程,对所述回调线程增加pg锁后,遍历所述内部对象映射的所述业务对象以确定待更新元数据;
51、构造模块,用于根据所有所述业务对象及其对应的所述待更新元数据,构造一个事务;
52、转发模块,用于将所述事务转发至所述待更新元数据对应的目标节点,以使所述目标节点根据所述事务对所述待更新元数据进行下盘操作。
53、相应的,本技术还公开了一种电子设备,包括:
54、存储器,用于存储计算机程序;
55、处理器,用于执行所述计算机程序时实现如上文任一项所述元数据的批量更新方法的步骤。
56、相应的,本技术还公开了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上文任一项所述元数据的批量更新方法的步骤。
57、本技术所公开的批量更新方法,对线程增加pg锁,取消了对象锁,处理效率提升,然后在遍历所有业务对象后确定可批量更新的待更新元数据,并生成一个事务用于转发和下盘,由于事务数量相对于现有技术明显降低,因此降低了批量更新过程中消息转发的耗时和磁盘io的数量,从而具有更高效的元数据批量更新效果。