1.本发明涉及计算机技术领域,尤其涉及一种写入数据的方法、装置及系统。
背景技术: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.图1是根据本发明实施例的一种写入数据的方法的主要步骤的示意图;
41.图2是根据本发明实施例的另一种写入数据的方法的主要步骤的示意图;
42.图3是根据本发明实施例的又一种写入数据的方法的主要步骤的示意图;
43.图4是根据本发明实施例的一种写入数据的装置的主要模块的示意图;
44.图5是本发明实施例可以应用于其中的示例性系统架构图;
45.图6是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
46.以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
47.需要指出的是,在不冲突的情况下,本发明的实施例以及实施例中的技术特征可以相互结合。
48.图1是根据本发明实施例的一种写入数据的方法的主要步骤的示意图。
49.如图1所示,本发明实施例的一种写入数据的方法可以应用于分布式集群的任一节点,其主要包括以下步骤:
50.步骤s101:获取数据写入请求,所述数据写入请求指示了待写入的目标文件、待写入的目标位置和待写入的数据。
51.在需要进行数据更新或数据插入等操作时,用户可以向分布式集群中的主节点发起数据写入请求,该数据写入请求可以包括待写入的目标文件(file id)、以及待写入的目标位置(如文件中的写入范围size、偏移量offset等)。
52.步骤s102:根据所述数据写入请求的请求标识、所述目标文件的标识、所述目标位置和写入状态,生成所述数据写入请求对应的操作日志。
53.分布式集群中的主节点在接收到数据写入请求后,可以为该数据写入请求生成相应的请求标识(如序列号sequence id),该序列号sequence id是自增且唯一的编号,可以用于唯一标识数据写入请求。同时,主节点还可以将该数据写入请求发送给分布式集群中的一个或多个从节点,一般来说,为了保证数据的高可用性,主节点会将该数据写入请求发送给多个从节点,以便多个从节点均执行相应的数据写入操作。然后,从节点也可相应生成该数据写入请求的请求标识。可以理解的是,由于主节点和从节点的请求标识均是自增且唯一的,因此从节点和主节点为同一个数据写入请求生成的请求标识是相同的。另外,主节
点也可以在生成数据写入请求的请求标识后,将数据写入请求和请求标识一起发送给从节点。
54.然后,主节点和从节点均可以根据数据写入请求的请求标识(sequence id)、目标文件的标识(file id)、待写入的目标位置(包括目标文件中的写入范围size,即从目标文件中的一个位置写到另一位置、以及偏移量offset)和写入状态(例如,未开始写入数据时为start),生成数据写入请求对应的操作日志,该操作日志的内容可以为(sequence id,file id,size,offset,start)。
55.步骤s103:将所述待写入的数据写入所述目标文件中的所述目标位置,并更新所述操作日志中的写入状态。
56.在生成操作日志(sequence id,file id,size,offset,start)之后,主节点和从节点可以开始提交数据,以将数据真正写入到目标文件中的目标位置,在写入完成后,可以更新操作日志中的写入状态,以更新操作日志或生成新的操作日志。例如,在写入完成后,写入状态为finish,那么可以将原有的操作日志由(sequence id,file id,size,offset,start)更新为(sequenceid,fileid,size,offset,finish),或者也可以直接生成的新的操作日志为(sequenceid,fileid,size,offset,finish),其中写入状态finish即标识本次写入完成。
57.在本发明一个优选的实施例中,采用写入前后分别生成操作日志的方式记录日志,以保证日志完整性。也就是说,在数据写入前,根据待写入数据被写入之前的写入状态、请求标识、目标文件的标识和目标位置,生成第一操作日志(sequence id,file id,size,offset,start);在数据写入完成后,再根据更新后的写入状态(finish)、请求标识、目标文件的标识和目标位置,生成第二操作日志(sequenceid,fileid,size,offset,finish)。
58.另外,在本发明一个实施例中,为了保证主节点和从节点上的数据一致性,在完成数据写入操作并生成操作日志之后,各个从节点将自身生成的操作日志发送给主节点,该操作日志可以为第二操作日志、或者第一操作日志和第二操作日志的组合,也就是说,从节点可以仅将第二操作日志(sequenceid,fileid,size,offset,finish)发送给主节点,也可以将第一操作日志(sequenceid,fileid,size,offset,start)和第二操作日志(sequenceid,fileid,size,offset,finish)均发送给主节点。主节点在接收到一个或多个从节点发送的操作日志后,可以将接收到的一个或多个操作日志分别与自身存储的一个或多个操作日志进行比对,在比对结果不一致的情况下,根据不一致的目标操作日志,更新所述从节点上写入的数据。或者,主节点也可以通过主动读取从节点上的操作日志的方式,对主节点和从节点上的操作日志的异同进行比对。
59.例如,主节点上存储的操作日志是:[1000,filea,4096,0,start],[1000,filea,4096,0,finish],[1001,filea,4096,8192,start],[1001,filea,4096,8192,finish]。从节点a所发送的操作日志是:[1000,filea,4096,0,start]。通过对比操作日志就可以发现:从节点a缺少了2次写入,其数据与主节点不一致。并且,通过比对操作日志可以确定从节点a缺少的2次写入是请求标识sequenceid为1000和1001对应的2次写入。
[0060]
在发现操作日志不一致之后,可以根据不一致的目标操作日志,更新从节点上写入的数据。具体地,在本发明一个实施例中,根据目标操作日志包括的目标文件的标识和目标位置,读取主节点上的目标数据,通过所述主节点将所述目标数据发送给目标操作日志
对应的从节点,使得所述从节点根据所述目标数据对自身存储的所述目标文件中的数据进行更新。
[0061]
例如,在确定出操作日志不一致之后,从节点a可以向主节点发起读请求,以获取sequence id 1000和sequence id 1001的目标数据,然后从节点可以根据获取到的目标数据重新进行数据写入,由此保证其数据与主节点上的一致。
[0062]
值得一提的是,在任何时间点或者任何节点出现故障时,都可以通过比对操作日志来确定分布式集群中各个节点上的数据是否一致。例如,当某个从节点出现异常宕机重启时,由于该从节点可能在未完成数据写入即宕机,因此当该从节点重启后,主节点可以通过比对操作日志来检查该从节点进行数据写入的进度,并使得从节点根据宕机前的进度继续进行数据写入。再比如,在处理数据写入的过程中,主节点和从节点均宕机重启了,在此情况下会重新竞选主节点,在重新选出主节点后,主节点也可通过比对操作日志的方式来确定从节点的数据写入进度,并根据主节点自身已写入的数据使得各个从节点上的数据保持一致。也就是说,在所有节点宕机重启后,可根据重新竞选出的主节点上的操作日志,使得各个从节点上的数据保持一致。
[0063]
另外,在各个从节点完成数据写入并生成第二操作日志后,可向主节点发送数据写入请求的应答消息,主节点在确定出接收到的应答消息的数量不小于从节点数量的情况下,确定各个从节点完成了数据写入,此时才向用户发送写入应答消息,以通知用户本次数据写入完成,以保证在数据真正写入成功后再通知用户写入结果,避免在数据写入失败时就通知用户,从而提高用户体验。
[0064]
可以理解的是,从节点可将应答消息伴随第二操作日志一起发送给主节点;也可以将第二操作日志作为应答消息发送给主节点;或者仅发送应答消息给主节点,主节点在接收到应答消息后,可以根据应答消息确定相应从节点已完成数据写入,或者根据应答消息主动读取相应从节点的操作日志,若该从节点上的操作日志与主节点上的操作日志相同,则主节点再确定该从节点完成了数据写入。
[0065]
下面以分布式集群中的主节点和两个从节点(从节点a和从节点b)执行同一数据写入请求对应的数据写入操作为例,对本发明实施例提供的写入数据方法进行详细说明。如图2所示,本发明实施例提供的一种写入数据方法可以包括以下步骤:
[0066]
步骤s201:主节点接收用户发送的数据写入请求。
[0067]
步骤s202:主节点生成数据写入请求的请求标识,并将请求标识和数据写入请求分别发送给从节点a和从节点b。
[0068]
例如,该请求标识为n。
[0069]
步骤s203:主节点、从节点a和从节点b分别根据请求标识、待写入的目标文件的标识、待写入的目标位置和写入状态生成第一操作日志。
[0070]
其中,第一操作日志为数据真正写入前的操作日志,可以记录为start write n:(n,file id,size,offset,start)。
[0071]
步骤s204:主节点、从节点a和从节点b分别将待写入的数据写入目标文件中的目标位置,并生成第二操作日志。
[0072]
其中,第二操作日志可以记录为:finish write n:(n,file id,size,offset,finish)。
[0073]
步骤s205:从节点a和从节点b向主节点发送应答消息。
[0074]
在此实施例中,从节点在写入成功后才向主节点发送应答消息,若从节点在写入过程中由于故障宕机,也即未完成数据写入时即宕机,那么该从节点不会向主节点发送应答消息。
[0075]
步骤s206:主节点确定接收到的应答消息的数量不小于从节点数量,由此确定数据写入成功,向用户发送写入应答消息。
[0076]
在本发明另一个实施例中,主节点和/或从节点在写入数据的过程中可能宕机重启,即在未完成数据写入时即发生重启,此时可以通过主节点比对操作日志进行数据更新,从而保证主从节点的数据一致性。下面以从节点a未完成数据写入为例,对本发明实施例提供的数据写入方法进行进一步说明。如图3所示,本发明实施例提供的数据写入方法包括以下步骤:
[0077]
步骤s301:主节点接收用户发送的数据写入请求。
[0078]
步骤s302:主节点生成数据写入请求的请求标识,并将请求标识和数据写入请求分别发送给从节点a和从节点b。
[0079]
例如,该请求标识为n。
[0080]
步骤s303:主节点、从节点a和从节点b分别根据请求标识、待写入的目标文件的标识、待写入的目标位置和写入状态生成第一操作日志。
[0081]
其中,第一操作日志为数据真正写入前的操作日志,可以记录为start write n:(n,file id,size,offset,start)。
[0082]
步骤s304:主节点和从节点b分别将待写入的数据写入目标文件中的目标位置,并生成第二操作日志。
[0083]
其中,第二操作日志可以记录为:finish write n:(n,file id,size,offset,finish)。
[0084]
步骤s305:从节点b向主节点发送应答消息。
[0085]
在此例中,由于从节点a未完成数据写入,因此不能生成第二操作日志,也无法向主节点发送应答消息。
[0086]
步骤s306:主节点判断出接收到的应答消息的数量小于从节点数量。
[0087]
可以理解的是,主节点若在预设时长内未接收到所有从节点发送的应答消息,那么就可以进行操作日志的比对。
[0088]
步骤s307:主节点确定未发送应答消息的从节点a,并将自身的操作日志与从节点a的操作日志进行比对,根据比对结果确定不一致的目标操作日志。
[0089]
例如,主节点上存储的操作日志是:[1000,filea,4096,0,start],[1000,filea,4096,0,finish],[1001,filea,4096,8192,start],[1001,filea,4096,8192,finish]。从节点a上的操作日志是:[1000,filea,4096,0,start]。通过对比操作日志就可以发现:从节点a缺少了两次写入,其数据与主节点不一致。并且,通过比对操作日志可以确定从节点a缺少的两次写入是请求标识n为1000和1001对应的两次写入。
[0090]
步骤s308:根据目标操作日志中包括的目标文件的标识和目标位置,读取主节点上的目标数据。
[0091]
步骤s309:主节点将目标数据发送给从节点a,使得从节点a根据目标数据对目标
文件中的数据进行更新。
[0092]
例如,在确定出操作日志不一致之后,从节点a可以向主节点发起读请求,以获取n 1000和n 1001的目标数据,然后从节点可以根据获取到的目标数据重新进行数据写入,由此保证其数据与主节点上的一致。可以理解的是,在从节点a对目标文件中的数据进行更新后即完成了数据写入,此时从节点a可以再次向主节点发送应答消息,那么主节点可以在确定出接收到所有从节点的应答消息后,想用户发送写入应答消息。
[0093]
根据本发明实施例的一种写入数据的方法可以看出,在写入数据的过程中,根据请求标识、待写入的目标文件标识、待写入的目标位置和写入状态生成相应的操作日志,而不将待写入数据本身写进日志文件中。由此,待写入数据仅需一次写入操作即可写入到分布式集群的物理机中,从而避免数据的写入放大,提高磁盘带宽的利用率;并且,还可根据分布式集群中各个节点上的操作日志,保证各个节点上写入数据的一致性。
[0094]
图4是根据本发明实施例的一种写入数据的装置的主要模块的示意图。
[0095]
如图4所示,本发明实施例的一种写入数据的装置400包括:
[0096]
请求获取模块401,用于获取数据写入请求,所述数据写入请求指示了待写入的目标文件、待写入的目标位置和待写入的数据;
[0097]
日志生成模块402,用于根据所述数据写入请求的请求标识、所述目标文件的标识、所述目标位置和写入状态,生成所述数据写入请求对应的操作日志;
[0098]
数据写入模块403,用于将所述待写入的数据写入所述目标文件中的所述目标位置,并更新所述操作日志中的写入状态。
[0099]
在本发明一个实施例中,日志生成模块402,用于根据所述待写入数据被写入之前的写入状态、所述请求标识、所述目标文件的标识和所述目标位置,生成第一操作日志;根据更新后的所述写入状态、所述请求标识、所述目标文件的标识和所述目标位置,生成第二操作日志。
[0100]
根据本发明另一个实施例,还提供了一种写入数据的系统,包括主节点以及一个或多个从节点,主节点和从节点上设置有上述任一实施例提供的数据写入装置;其中,
[0101]
所述主节点,用于接收所述一个或多个从节点发送的操作日志;将接收到的一个或多个操作日志分别与自身存储的一个或多个操作日志进行比对;在比对结果不一致的情况下,根据不一致的目标操作日志,更新所述从节点上写入的数据。
[0102]
在本发明一个实施例中,通过所述分布式集群的主节点接收用户发送的数据写入请求,并将所述数据写入请求发送给所述分布式集群的一个或多个从节点。
[0103]
在本发明一个实施例中,根据所述目标操作日志包括的目标文件的标识和目标位置,读取所述主节点上的目标数据;通过所述主节点将所述目标数据发送给所述从节点,使得所述从节点根据所述目标数据对自身存储的所述目标文件中的数据进行更新。
[0104]
在本发明一个实施例中,在所述从节点生成所述第二操作日志之后,还通过所述从节点向主节点发送所述数据写入请求的应答消息;所述主节点在确定接收到的所述应答消息的数量不小于所述从节点数量的情况下,向用户发送写入应答消息。
[0105]
根据本发明实施例的一种写入数据的装置及系统可以看出,在写入数据的过程中,根据请求标识、待写入的目标文件标识、待写入的目标位置和写入状态生成相应的操作日志,而不将待写入数据本身写进日志文件中。由此,待写入数据仅需一次写入操作即可写
入到分布式集群的物理机中,从而避免数据的写入放大,提高磁盘带宽的利用率;并且,还可根据分布式集群中各个节点上的操作日志,保证各个节点上写入数据的一致性。
[0106]
图5示出了可以应用本发明实施例的一种写入数据的方法或写入数据的装置的示例性系统架构500。
[0107]
如图5所示,系统架构500可以包括终端设备501、502、503,网络504和服务器505。网络504用以在终端设备501、502、503和服务器505之间提供通信链路的介质。网络504可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
[0108]
用户可以使用终端设备501、502、503通过网络504与服务器505交互,以接收或发送消息等。终端设备501、502、503上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
[0109]
终端设备501、502、503可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
[0110]
服务器505可以是提供各种服务的服务器,例如对用户利用终端设备501、502、503所发送的请求提供数据支持的后台管理服务器。后台管理服务器可以对接收到的请求进行分析等处理,并将处理结果(例如数据写入结果)反馈给终端设备。
[0111]
需要说明的是,本发明实施例所提供的数据写入的方法一般由服务器505执行,相应地,数据写入的装置一般设置于服务器505中。
[0112]
应该理解,图5中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
[0113]
下面参考图6,其示出了适于用来实现本发明实施例的终端设备的计算机系统600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0114]
如图6所示,计算机系统600包括中央处理单元(cpu)601,其可以根据存储在只读存储器(rom)602中的程序或者从存储部分608加载到随机访问存储器(ram)603中的程序而执行各种适当的动作和处理。在ram 603中,还存储有系统600操作所需的各种程序和数据。cpu 601、rom 602以及ram 603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。
[0115]
以下部件连接至i/o接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至i/o接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
[0116]
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(cpu)601执行时,执行本发明的系统中限定的上述功能。
[0117]
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。
[0118]
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0119]
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括请求获取模块、日志生成模块和数据写入模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,数据写入模块还可以被描述为“将待写入的数据写入目标文件的模块”。
[0120]
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:获取数据写入请求,所述数据写入请求指示了待写入的目标文件、待写入的目标位置和待写入的数据;根据所述数据写入请求的请求标识、所述目标文件的标识、所述目标位置和写入状态,生成所述数据写入请求对应的操作日志;将所述待写入的数据写入所述目标文件中的所述目标位置,并更新所述操作日志中的写入状态。
[0121]
根据本发明实施例的技术方案,在写入数据的过程中,根据请求标识、待写入的目标文件标识、待写入的目标位置和写入状态生成相应的操作日志,而不将待写入数据本身写进日志文件中。由此,待写入数据仅需一次写入操作即可写入到分布式集群的物理机中,
从而避免数据的写入放大,提高磁盘带宽的利用率;并且,还可根据分布式集群中各个节点上的操作日志,保证各个节点上写入数据的一致性。
[0122]
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。