数据加载的方法、装置及系统的制作方法_2

文档序号:8472988阅读:来源:国知局
个线程并行向各组的每个加载机串行发送。
[0060]这种将数据分片以多个线程并行发送的方式相比于单个线程串行发送的方式而言,在不考虑创建和维护数据推送线程开销资源的情况下,能够极大的缩短将数据发送给加载机的时间。
[0061]此外,当主机房接收到的是中转设备发送的数据分片时,其向加载机发送数据分片的方式可以为单个线程串行发送或者多个线程并行发送,实际应用中与上述c)或d)的实现方式类似,此处不再赘述。
[0062]这里需要说明的是,在将数据块切片得到数据分片后,将数据分片发送给加载机的方式实际上已经能够缩短发送数据的时间,在实际应用中确定是以单个线程串行发送还是以多个线程并行发送时,主要看主机房、加载机等处理资源的开销情况,当处理资源能够满足多线程发送数据时,以多线程并行发送数据的方式能够实现数据较快的推送。
[0063]103、加载机将数据块写入到从机房中与加载机对应的二级服务器中。
[0064]通过上述步骤,主机房将接收到的数据(数据块/数据分片)发送到加载机中后,可以向从机房推送数据了。由于从机房的个数与主机房中加载机的组数相同,从机房中二级服务器的个数与每组加载机的个数相同且一一对应,因此,各组的每个加载机可以将数据块推送给对应的二级服务器中,实现数据在各个机房中的分布。
[0065]以一个加载机为例,该加载机可以将整个数据块发送给对应的二级服务器。当然,也可以把数据块切片后将数据分片以单个进程串行发送给对应的二级服务器,或者把数据块切片后将数据分片以多个进程并行发送给对应的二级服务器。
[0066]本发明实施例提供的数据加载的方法,能够将中转设备中的数据块发送至主机房中,通过主机房将数据块分别写入到主机房内的各组加载机中,再由各组加载机将数据块写入到从机房中与加载机对应的二级服务器。与现有技术中由中转设备顺序推送数据到不同机房的方式相比,本发明由主机房负责数据的加载,通过主机房内的多组加载机并行向多个从机房中的二级服务器推送数据,中转设备只需将数据发送至主机房即可,由于中转设备只涉及一次数据加载过程,因此可以大大节省I/o的资源占用,从而能够提高跨机房环境下的数据加载效率。
[0067]为了更好的对图1所示的方法进行理解,作为对上述实施方式的细化和扩展,本发明实施例将针对图1中的步骤进行详细说明。
[0068]由于中转设备可以将系统内大量数据进行磁盘化以便数据的推送,所以在中转设备将磁盘化后的数据块发送给主机房时,即在执行上述步骤101时,不仅可以将整个数据块发送给主机房,还可以先将数据块进行切片得到数据分片,然后将数据分片发送给主机房。在实际将数据块切片的过程中,不仅要考虑数据分片的数量,而且要考虑切片的规则,即按照何种方式进行切片。
[0069]虽然当数据块的数据量较大时,可以将数据块切片得到大量数据分片,但并不是数据分片的数量越多,每个数据分片的数据量越小,其发送给主机房的时间就会缩短。每个数据分片的发送都要占用一个进程,当大量数据分片并行发送时,需要占用主机房大量的进程,而创建和维护这些进程需要开销主机房的处理资源,所以在将数据块切片时,一定要考虑主机房当前的进程数量,不能随意进行切片。例如,可以由网管人员根据主机房的运行情况设定进程的数量,在将数据块切片时可以参考当前的进程数量将数据块切为相应数量的数据分片。
[0070]当确定了数据分片的数量后,就需要对数据块进行切片。在切片的过程中,可以依照不同的规则进行切片,其实现方式可以包括:
[0071]I)根据每条数据的标识或者编号按照轮询机制划分为不同的数据分片;
[0072]2)按照每条数据的编号顺序划分为不同的数据分片,其中,每个数据分片中包含的数据条数可以相同,也可以不同。
[0073]例如,当根据主机房当前的进程数确定数据分片的数量可以划分为四个时,根据轮询机制可以将数据块划分为如图5所示的四个数据分片;而根据每条数据的编号顺序划分时可以将数据块划分为如图6所示的四个数据分片,其中每个数据分片含有的数据条数相同;也可以数据块划分为如图7所示的四个数据分片,其中每个数据分片含有的数据条数不同。
[0074]这里需要说明的是,主机房和中转设备都可以按照上述规则将数据块进行切片,其中,按照每条数据的编号进行切片的方式要么需要计算数据的条数,从而能够均衡的将数据块切分为数据量相当的数据分片,要么随机对数据块进行切片,这样得到的数据分片大小不一,若数据分片的数据量过大,则不利于数据的推送。而按照轮询机制划分数据分片则不需要计算数据的条数,其操作简洁,即把每一条数据依次分配给与进程对应的每个数据分片,直至每条数据被分配完毕,这样能够最大程度的保证每个数据分片对应进程的负载相对均衡。
[0075]当数据块被切分为数据分片后,可以按照如图4所示的方式将多个数据分片以多个进程并行发送给主机房。
[0076]在步骤102主机房将接收到的数据(数据块/数据分片)分别写入到各组的每个加载机中的实际执行过程中,可以在主机房中建立与数据分片数量相等的多个进程,其中每个进程负责一个数据分片的写入操作,通过各个进程将对应的数据分片分别写入到各组的每个加载机中。由于每个进程在写入数据分片时是独立的,因此主机房不必控制每个进程所写入数据分片的加载机是否相同,只需要维护好每个进程的正常运行即可。
[0077]当然,为了保证将数据分片写入加载机时能够稳定且快速,因此可以将不同的进程分配给不同组的加载机进行写入操作。若进程数量大于加载机的组数,需要多个进程同时向一组加载机写入数据分片时,可以参照每组中各个加载机的编号为多个进程分别分配一个起始加载机,然后开始顺序向后续的加载机写入数据分片。无论是将不同的进程分配给不同组的加载机进行写入操作还是多个进程同时向一组加载机写入数据分片时为多个进程分别分配一个起始加载机,然后开始顺序向后续的加载机写入数据分片,这两种实现方式都能避免过多的进程同时向同一个加载机写入大量数据,以此提高向加载机中写入数据的稳定性和快捷性。
[0078]为了保证每个进程都能将全部数据分片写入到每个加载机中,这种为不同进程分配不同起始加载机的方式还需要一种检测机制,用来检测哪些加载机已经写入了数据分片,哪些加载机还没有写入数据分片。为了实现检测机制,保证每个进程能将起始加载机之前的加载机写入数据分片,作为一种可选的实施方式,可以在主机房中创建一个加载机标识表,该加载机标识表记录有加载机的组数以及每组加载机的编号信息,各个进程在写入数据分片时可以调取该加载机标识表,每当在一个加载机中写入数据分片后就在加载机标识表中对对应的加载机进行标记,当对最后一个加载机写入结束后,开始遍历加载机标识表,确定加载机是否全部进行了标记,若没有,则按照加载机标识表中的编号顺序对没有进行标记的加载机进行写入操作,直至加载机标识表中的每个加载机编号都被标记,从而完成每个进程向对应加载机的写入操作。
[0079]进一步的,在主机房中建立多个进程之前,除了要考虑主机房的处理资源外,还要考虑加载机的负载能力,因此可以根据加载机的性能预先设定加载机所能承受的最大进程数量,主机房建立的进程数量不能大于预设的进程数量,以此来控制每个加载机的负载压力,避免加载机负载过大导致数据写入失败以及对加载机的损害。
[0080]在主机房建立了一定数量的进程用于将对应的数据分片分别写入到各组的每个加载机中时,进一步的可以在每个进程下分别建立多条线程,用于加快写入数据分片的速度,其中一条线程负责至少一个加载机的写入操作。在实际通过线程写入数据分片的过程中,以一个进程为例,可以有多种实施方式,包括:
[0081]I) 一个加载机对应一条线程,即一个进程根据其负责的加载机的个数建立与加载机个数相同的多条线程,通过多条线程并行向各个加载机写入数据分片,以此提高进程速度。例如,进程A负责加载机组1、加载机组2及加载机组3,加载机组1、加载机组2及加载机组3各自具有三个加载机,则进程A可以建立九条线程并行向各组的每个加载机写入数据分片,如图8所示。
[0082]2) 一组加载机对应一条线程,即一个进程根据其负责的加载机的组数建立与加载机组数相同的多条线程,通过多条线程并行向各组加载机写入数据分片,其中,一条线程针对其负责的一组加载机在进行写入操作时,可以串行向该组加载机顺序写入数据分片,由此可以减少线程的数量,降低建立和维护线程对资源的占用。例如,进程A负责加载机组1、加载机组2及加载机组3,因此进程A可以建立三条线程a1、a2、a3,线程负责加载机组1,线程a2负责加载机组2,线程a 3负责加载机组3,三条线程a 1、a2、&3并行向加载机组1、加载机组2及加载机组3写入数据分片,如图9所示。
[0083]3)多组加载机对应一条线程,即一个进程建立的线程数量小于该进程负责的加载机的组数。例如,进程A负责加载机组1、加载机组2及加载机组3,但是为了降低建立和维护多条线程对资源的过度占用,进程A可以建立一条线程a,通过线程a串行对加载机组1、加载机组2及加载机组3依次写入数据分片,如图10所示。
[0084]在主机房将数据块或数据分片写入加载机的过程中,由于写入数据的环境复杂,如多条进程及多条线程并行推送数据,同时数据在推送过程中也可能出现损坏,因此需要检测数据是否成功写入到加载机中。检测可以由主机房在向加载机写入数据的过程中记录每条数据的写入状态,在写入操作结束后调取数据的写入状态记录表,若存在数据写入失败,则主机房重新向加载机写入数据块或数据分片,或者根据记录表中写入失败的数据(单位为条)的标识或编号重新推送该条数据。
[0085]当然,检测也可以由加载机在主机房执行写入操作的过程中记录每条数据的写入状态,在写入操作结束后调取数据的写入状态记录表,若存在数据写入失败,则加载机向主机房请求重新执行写入操作,或者根据记录表中写入失败的数据(单位为条)的标识或编号向主机房重新请求推送该条数据。
[0086]数据的写入失败可以有多种原因,若是因为加载机或主机房负载压力过大导致的写入失败,那么后续是可以再次成功写入该数据的;若是数据在推送过程中发生了不可逆转的损坏时,不管后续再推送多少次,该数据还是无法成功写入。因此,主机房在执行重新写入操作时,需要进行有限次的重写操作,避免在数据出现不可逆转的损坏的情况下,持续推送该数据导致对主机房处理资源的占用以及对加载机写入接口的持续占用,使其他进程无法写入其他数据。主机房重写操作的执行次数可以人为设定,也可以由主机房根据当前的处理资源的占用情况进行调整,总体原则是处理资源充足的情况下,设定较少的重写次数;处理资源占用严重的情况下,设定较多的重写次数。例如,若处理资源充足,则可以设定一次或两次重写上限,若处理资源占用严重,则可以设定五次或六次重写上限,具体的重写次数本实施例不作限制。
[0087]由于这些海量数据需要部署在大量机房中以满足不同用户的查询需求,因此当主机房中的加载
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1