一种元数据读写方法及装置的制造方法

文档序号:9597134阅读:392来源:国知局
一种元数据读写方法及装置的制造方法
【技术领域】
[0001]本申请涉及计算机存储技术领域,尤其涉及一种元数据读写方法及装置。
【背景技术】
[0002]在大型分布式存储系统中,元数据信息是整个存储系统的核心,为了保证系统的可用性,元数据通常需要做双备、甚至多备。另外,元数据多备份之间必须保持强一致性,避免系统在多备份间切换时,造成数据对象的状态不一致的情况。同时,由于大型分布式存储系统输入输出(10,Input Output)数据量较大且读写操作频繁,对元数据信息的读写速率要求也较高。
[0003]目前,现有的大型分布式存储系统中,可以借助HeartBeat等技术实现元数据服务的双备、或者多备,可以通过Double-Write技术达到多备份之间数据一致性。
[0004]但是,为了保持元数据的强一致性,当对数据对象的读操作频繁、尤其是读写操作并发量较大时,通常会同时引发日志的同步和归档操作,瞬时增加了服务负载,这种情况下,元数据服务性能存在明显的瓶颈。
[0005]现有技术不足在于:
[0006]当数据读写操作并发量较大时会同时引发日志的同步和归档操作,导致元数据服务性能下降。

【发明内容】

[0007]本申请实施例提出了一种元数据读写方法及装置,以解决现有技术中当数据读写操作并发量较大时会同时引发日志的同步和归档操作,导致元数据服务性能下降的技术问题。
[0008]本申请实施例提供了一种元数据读写方法,包括如下步骤:
[0009]将元数据分成多个元数据块,所述元数据块携带有最近更新的时间戳;
[0010]元数据服务在读取预先存储在内存中的元数据副本时,根据缓冲区中元数据块的时间戳与消息队列中的时间戳,确定元数据块的读取方式。
[0011]本申请实施例提供了一种元数据读写装置,包括:
[0012]分块模块,用于将元数据分成多个元数据块,所述元数据块携带有最近更新的时间戳;
[0013]读操作模块,用于元数据服务在读取预先存储在内存中的元数据副本时,根据缓冲区中元数据块的时间戳与消息队列中的时间戳,确定元数据块的读取方式。
[0014]有益效果如下:
[0015]本申请实施例所提供的元数据读写方法及装置,将元数据分成多个元数据块,所述元数据块携带有最近更新的时间戳;元数据服务在读取预先存储在内存中的元数据副本时,根据缓冲区中元数据块的时间戳与消息队列中的时间戳,确定元数据块的读取方式。由于本申请实施例中将元数据按逻辑分块,并且对于元数据服务,均在其内存中预先存储了元数据副本,所述元数据块携带有最近更新的时间戳,根据缓冲区中时间戳与消息队列中时间戳对比来确定元数据块的读取方式,从而在一定程度上提高了元数据的读写效率,当数据读写操作并发量较大时,也能确保元数据服务的性能。
【附图说明】
[0016]下面将参照附图描述本申请的具体实施例,其中:
[0017]图1示出了本申请实施例中元数据读写方法实施的流程示意图;
[0018]图2示出了本申请实施例中元数据服务及其元数据副本的数据流向示意图;
[0019]图3示出了本申请实施例中元数据刷新流程示意图;
[0020]图4示出了本申请实施例中元数据读写装置的结构示意图。
【具体实施方式】
[0021]为了使本申请的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。并且在不冲突的情况下,本说明中的实施例及实施例中的特征可以互相结合。
[0022]针对现有技术的不足,本申请实施例提出了一种元数据读写方法及装置,下面进行说明。
[0023]图1示出了本申请实施例中元数据读写方法实施的流程示意图,如图所示,所述元数据读写方法可以包括如下步骤:
[0024]步骤101、将元数据分成多个元数据块,所述元数据块携带有最近更新的时间戳;
[0025]步骤102、元数据服务在读取预先存储在内存中的元数据副本时,根据缓冲区中元数据块的时间戳与消息队列中的时间戳,确定元数据块的读取方式。
[0026]发明人在发明过程中注意到:
[0027]当前,关系型数据库技术已然成熟,且数据库服务稳定,redo, undo等数据库内技术保证了数据完整。通过标准的SQL语句进行数据的读写,免去了开发存储引擎的工作。
[0028]因此,本申请实施例中的元数据服务可以建立在关系型数据库的基础上。
[0029]其次,在分布式存储系统中,为了提高元数据读写效率,本申请实施例可以将元数据按逻辑分块,元数据块均可以带有最近更新的时间戳信息;而对于多个元数据服务,例如查询(query)服务、更新(update)服务、块(chunk)服务,则可以均设置自己的内存元数据副本。
[0030]各服务在读取各自内存元数据副本时,对比缓冲区中数据块的时间戳与消息队列中的时间戳,判定是否为最新(对比时间戳),进而确定元数据块的读取方式。
[0031]图2示出了本申请实施例中元数据服务及其元数据副本的数据流向示意图,如图所示,
[0032]查询服务为查询服务器Query Server向元数据服务器Meta Server获取元数据Meta Data并存至查询服务器Query Server的元数据缓冲区Meta Data Cache ;
[0033]更新服务为更新服务器Update Server将所述更新服务器Update Server的元数据缓冲区Meta Data Cache中的元数据Meta Data写入所述元数据服务器Meta Server ;
[0034]块服务为块服务器Chunk Server向元数据服务器Meta Server获取元数据MetaData并存至块服务器Chunk Server的元数据缓冲区Meta Data Cache。
[0035]还可以有其他元数据服务,在此不再一一举例。
[0036]其中,消息队列Message中可以包括编码Code以及时间戳Timstamp。
[0037]由于本申请实施例中将元数据按逻辑分块,并且对于元数据服务,均在其内存中预先存储了元数据副本,所述元数据块携带有最近更新的时间戳,根据缓冲区中时间戳与消息队列中时间戳对比来确定元数据块的读取方式,从而在一定程度上提高了元数据的读写效率,当数据读写操作并发量较大时,也能确保元数据服务的性能。
[0038]实施中,在所述将元数据分成多个元数据块之后,所述方法可以进一步包括:
[0039]对所述元数据块进行编码,所述元数据块的编码为与所述元数据块相关的数据表编码的“或”操作结果。
[0040]本申请实施例中,可以将元数据按逻辑分块后进行编码(BitSet),具体实施中,元数据分块编码策略可以如下:
[0041]元数据服务中,数据对象信息可以存储于表结构中,本申请实施例可以将所有元数据库表进行128bit 二进制编码,规则可以为:从低位到高位,一张表占用一个bit。例如:0X00000001,0X00000002,...0X0000F000,...0
[0042]元数据逻辑分块可以为单表或者多表联合查询所得结果,因此,逻辑块编码规则可以为:所涉及表编码的“或”操作结果。例如:元数据块A是由0X00000002和0X000(F000连接(join)操作所得,于是,元数据块A的编码可以为0X0000F002。
[0043]实施中,在所述对所述元数据块进行编码之后,所述方法可以进一步包括:
[0044]将所述元数据块的编码与消息编码进行“与”操作,当所述“与”操作结果不为零时,更新所述元数据块并记录时间戳。
[0045]继续以上述举例为例进行说明如下:
[0046]当某服务写操作元数据块A相关表0X0000F000时,消息队列中会存在形如:0X0000F000-201509264516消息,get操作时,逻辑块(元数据块)编码和消息编码进行“与”操作,0X0000F002&0X0000F000 = 0X0000F000,结果不为零,于是可以判定该逻辑分块A需要刷新,从而更新所述元数据块A。
[0047]进一步地,为了保证元数据的强一致性,本申请实施例还可以按以下方式实施。
[0048]实施中,所述方法可以进一步包括:
[0049]当元数据服务发生写操作时,通过远程过程调用(RPC,Remote Procedure CallProtocol)修改所述元数据服务中所述元数据块及其时间戳,通过消息系统将所述元数据块的编码及其时间戳推送到元数据服务的缓冲区。
[0050]本申请实施例中,为了保证元数据的强一致性,当某服务发生写操作时,首先,可以通过一个远程过程调用RPC修改元数据服务中相应元数据块信息及时间戳,然后,元数据服务系统通过
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1