发明内容
本发明实施例提供一种元数据的修改方法和元数据服务器,以提高修改元数据的效率。
根据本发明的一方面,提供一种元数据的修改方法,包括:
将多个客户端发送的修改同一元数据的写锁申请缓冲至循环申请队列;
将所述多个客户端发送的修改同一元数据的修改数据缓冲至循环操作队列;
从所述循环操作队列中获取与所述循环申请队列中的最后申请的写锁申请对应的修改数据;
根据所述修改数据对所述元数据进行修改。
根据本发明的另一方面,还提供一种元数据服务器,包括:
元数据模块,用于提供元数据;
锁管理模块,用于将多个客户端发送的修改同一元数据的写锁申请和所述写锁申请对应的修改数据分别缓冲至循环申请队列和循环操作队列,并从所述循环操作队列中获取与所述循环申请队列中的最后申请的写锁申请对应的修改数据,根据所述修改数据对所述元数据进行修改。
采用上述提供的元数据的修改方法和元数据服务器,通过将修改同一元数据的多个写锁申请缓冲至循环申请队列,并将该多个写锁申请的修改数据缓冲至循环操作队列,并采用在循环申请队列中最后申请的客户端发送的修改数据对元数据修改,从而提高修改元数据的效率。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例的写锁申请的元数据服务器的结构示意图。
在本实施例中,客户端组10与元数据服务器20通信连接,客户端组10用于当需要修改元数据服务器20中的元数据时,发送写锁申请至元数据服务器20。在本实施例中,客户端组10包括第一客户端组101、第二客户端组102、...、第n客户端组10n。
在本实施例中,当第一客户端组101、第二客户端组102、...、第n客户端组10n需修改同一元数据时,第一客户端组101、第二客户端组102、...、第n客户端组10n分别发送写锁申请至元数据服务器20。在图1中所示,第一客户端组101发送写锁申请1至元数据服务器20,第二客户端组102发送写锁申请2至元数据服务器20,第n客户端组10n发送写锁申请n至元数据服务器20。
在本实施例是,元数据服务器20包括锁管理模块200及元数据模块210。元数据模块210用于提供元数据。锁管理模块200用于将多个客户端发送的修改同一元数据的写锁申请和所述写锁申请对应的修改数据分别缓冲至循环申请队列和循环操作队列,并从所述循环操作队列中获取与所述循环申请队列中的最后申请的写锁申请对应的修改数据,根据所述修改数据对所述元数据进行修改。在本实施例中,锁管理模块200包括循环申请子模块2000,循环申请子模块2000用于接收客户端发送的多个写锁申请,并将该多个写锁申请缓冲至长度为L的循环申请队列。在本实施例中,循环申请子模块2000还用于将在预定时间内接收的多个写锁申请缓冲至长度为L的循环申请队列。在本实施例中,若该多个写锁申请的数量K超过L时,循环申请子模块2000将L个写锁申请缓冲至循环申请队列,并将剩余的写锁申请缓冲至等待队列;若该多个写锁申请的数量K没有超过L时,循环申请子模块2000将K个写锁申请缓冲于循环申请队列。
在本实施例中,为充分理解本发明,假设客户端包括6个客户端,即n取6,当然,n也可以取大于6或小于6的值。假设同一元数据的写锁申请的顺序为第二客户端、第一客户端、第三客户端、第六客户端、第五客户端、第四客户端,即第二客户端为最先申请,第四客户端为最后申请。
循环申请子模块2000还用于当将多个写锁申请缓冲至循环申请队列后,返回该多个写锁申请的授权锁至相对应的客户端。如图1所示,返回写锁申请1的授权锁1至第一客户端组101,返回写锁申请1的授权锁2至第二客户端组102,返回写锁申请n的授权锁n至第n客户端组10n。在本实施例中,循环申请子模块2000还用于配置每个授权锁一个时间值,即每个授权锁对应一个时间值,可以理解为接收每个写锁申请时,有一个接收的时间,以表示写锁申请的先后顺序,当返回授权锁时,这个时间值表示该写锁申请处于循环申请队列的顺序。
图2为本发明实施例的修改元数据的元数据服务器的结构示意图。
在本实施例中,当客户端组10接收至元数据服务器20返回的授权锁后,发送同一元数据的修改数据至元数据服务器20。如图2所示,第一客户端组101发送修改数据的修改操作1至元数据服务器20,第二客户端组102发送修改数据的修改操作1至元数据服务器20,第n客户端组10n发送修改数据的修改操作n至元数据服务器20。
在本实施例中,锁管理模块200还包括循环操作子模块2002,循环操作子模块2002用于接收客户端组10发送的修改同一元数据的多个修改数据。在本实施例中,循环操作子模块2002还用于将该多个修改数据缓冲至循环操作队列。在本实施例中,循环操作子模块2002根据接收的顺序将该多个修改数据缓冲至循环操作队列,并返回修改操作成功的消息至客户端组10。如图2所示,返回修改操作1的成功1至第一客户端组101,返回修改操作2的成功2至第二客户端组102,返回修改操作n的成功n至第n客户端组10n。
在本实施例中,假设接收的顺序为第六客户端、第四客户端、第一客户端、第三客户端、第二客户端、第五客户端。当然,也可以进行其它排列。
在本实施例中,循环操作子模块2002还用于根据循环操作队列和循环申请队列对元数据进行修改操作。在本实施例中,循环操作子模块2002先获取循环申请队列中的写锁申请的先后顺序,并获取最后申请的写锁申请,再从循环操作队列中获取与该最后申请的写锁申请对应的修改数据,最后根据该修改数据对元数据模块210中的该元数据进行修改操作。循环操作子模块2002还用于当完成修改操作后,清空循环操作队列和循环申请队列。
可以理解为:最先申请的写锁申请的修改数据的操作是最先进行的,之后按申请顺序进行操作,即第二客户端需最先进行修改操作,其次为第一客户端、第三客户端、第六客户端、第五客户端、第四客户端,当6个客户端都修改完元数据后,即第四客户端修改完元数据后,元数据模块210中储存的元数据为第四客户端修改完的元数据,而第一客户端、第三客户端、第六客户端、第五客户端修改后的数据都被第四客户端修改后的元数据覆盖,可以理解为最后申请的第四客户端修改完的元数据为有效的元数据,因此,为避免不断的修改元数据模块210中的同一元数据,采用在循环申请队列中最后申请的客户端发送的修改数据。
在本实施例中,当元数据服务器20空闲时,若此时循环操作子模块2002接收到非最后申请的客户端发送的修改数据,可进行修改操作,但当接收到最后申请的客户端发送的修改数据后,并进行修改操作,之后接收的非最后申请的客户端发送的修改数据不被采用。当元数据服务器20不空闲,循环操作子模块2002将所接收的客户端组10发送的修改数据缓冲至循环操作队列。
在本实施例中,所述锁管理模块200还包括恢复子模块2004,用于当所述元数据服务器20死机后,接收所述客户端组10发送的修改同一元数据的锁信息,所述锁信息为所述授权锁的时间值,根据所述锁信息恢复所述循环申请子模块2000中所述同一元数据的循环申请队列和所述循环操作子模块2002中的循环操作队列
本发明实施例提供的元数据服务器,通过在锁管理模块中设置循环申请队列和循环操作队列,采用在循环申请队列中最后申请的客户端发送的修改数据,即筛选出多个元数据修改操作请求的写锁申请中有效的写锁申请,并根据筛选出的写锁申请的修改数据对元数据进行修改,从而可以减少磁盘的操作次数,以提高修改元数据的效率,并不需要使客户端都处于等待状态,最终提高了访问数据的效率。
图3为本发明实施例的元数据的修改方法的流程图。
在本实施例中,步骤S300,接收多个客户端发送的修改同一元数据的写锁申请。在本实施例中,当多个客户端需修改同一元数据时,每个客户端需发送修改该元数据的写锁申请。
步骤S302,将该写锁申请缓冲至循环申请队列,并返回授权锁的消息至客户端。在本实施列中,对每个写锁申请,返回与该写锁申请相对应的授权锁的消息至客户端。在本实施例中,根据接收的顺序将该多个写锁申请缓冲至循环申请队列,其中,每个授权锁对应一个时间值,可以理解为接收每个写锁申请时,有一个接收的时间,以表示写锁申请的先后顺序,当返回授权锁时,这个时间值表示该写锁申请处于循环申请队列的顺序。
步骤S304,接收客户端发送的修改同一元数据的多个修改数据,并根据接收的顺序将多个修改数据缓冲至循环操作队列,及返回修改操作成功的消息至客户端。
步骤S306,从所述循环操作队列中获取与所述循环申请队列中的最后申请的写锁申请对应的修改数据,根据所述修改数据对所述元数据进行修改。在本实施例中,先获取循环申请队列中的写锁申请的先后顺序,并获取最后申请的写锁申请,再从循环操作队列中获取与该最后申请的写锁申请对应的修改数据,最后根据该修改数据对该元数据进行修改操作。
步骤S308,当完成修改操作后,清空循环操作队列和循环申请队列。
本发明实施例提供的元数据的修改方法,通过将修改同一元数据的多个写锁申请缓冲至循环申请队列,并将该多个写锁申请的修改数据缓冲至循环操作队列,采用在循环申请队列中最后申请的客户端发送的修改数据,即筛选出多个元数据修改操作请求的写锁申请中有效的写锁申请,并根据筛选出的写锁申请的修改数据对元数据进行修改,从而可以减少磁盘的操作次数,以提高修改元数据的效率,并不需要使客户端都处于等待状态,最终提高了访问数据的效率。
在本实施例中,当处理修改元数据的操作的过程中,服务器突然死机,此时,服务器过行重新启动以恢复之前的处理操作,可以按以下流程操作:
A:接收多个客户端发送的修改同一元数据的锁信息,锁信息为授权锁的时间值;
B:根据锁信息恢复同一元数据的循环申请队列和循环操作队列,并进行相应的修改处理操作。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。