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

文档序号:9687202阅读:312来源:国知局
一种数据读写方法及装置的制造方法
【技术领域】
[0001 ]本发明涉及计算机技术领域,尤其涉及一种数据读写方法及装置。
【背景技术】
[0002]随着业务数据量的不断增加,业务上对数据采集性能的要求也在不断的提高,尤其在某些业务表数据量特别大情况下,会导致其他业务长时间等待。
[0003]在现有硬件条件下,为了减少其他业务等待时间,提高数据采集效率,现有技术采用的技术手段是增加数据读写线程数,具体是利用多个读数据线程将各自读到的数据存放到一个数据缓存队列中,利用多个写数据线程分别从这个数据缓存队列中取数据以便将取出的数据写入目标数据源。
[0004]与采用单个读数据线程和单个写数据线程相比,通过增加数据读写线程数,虽然可以使得数据处理性能有较大幅度的提高,但并不能达到理想的预期效果,比如线程数增加10倍,但性能(处理速度)仅提高5倍,且线程数越多,占用的系统资源越多,在一定程度上还会导致性能降低。

【发明内容】

[0005]有鉴于此,本发明实施例的主要目的在于提供一种数据读写方法及装置,以实现提高数据读写速度的目的。
[0006]为实现上述目的,本发明实施例提供了一种数据读写方法,包括:
[0007]申请m个读数据线程和η个写数据线程,其中,m和η是大于或等于1的整数;
[0008]当m>n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓存队列按环形排列,从m个数据缓存队列中选取η个不同的初始队列分别分配给每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数据缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;
[0009]当m<n时,为η个写数据线程分别申请一个数据缓存队列;将η个数据缓存队列按环形排列,从η个数据缓存队列中选取m个不同的初始队列分别分配给每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述环形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
[0010]可选的,
[0011]所述从m个数据缓存队列中选取η个不同的初始队列分别分配给每个写数据线程,包括:
[0012]从m个数据缓存队列中为每个写数据线程选取一个不同的初始队列,其中,基于所述环形排列:
[0013]若m/n不能整除且m/n取整数后为b,则有一对相邻初始队列之间间隔的数据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列数为b-1;
[0014]若m/n能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1;
[0015]所述从η个数据缓存队列中选取m个不同的初始队列分别分配给每个读数据线程,包括:
[0016]从η个数据缓存队列中为每个读数据线程选取一个不同的初始队列,其中,基于所述环形排列:
[0017]若n/m不能整除且n/m取整数后为b,则有一对相邻初始队列之间间隔的数据缓存队列数为m-b-η+Ι,其它每相邻两个初始队列之间间隔的数据缓存队列数为b-Ι;
[0018]若n/m能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1。
[0019]可选的,所述利用所述写数据线程,从对应的初始队列开始,按所述环形排列依次从每个数据缓存队列中取出数据,包括:
[0020]从所述写数据线程对应的初始队列开始,按所述环形排列依次遍历每个数据缓存队列;
[0021 ]若所述写数据线程有错误,则使所述写数据线程结束;
[0022]若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当前遍历的数据缓存队列不为空时,从当前遍历的数据缓存队列中取出数据;
[0023]若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当前遍历的数据缓存队列为空时,遍历下一数据缓存队列;
[0024]若所述写数据线程无错误且连续遍历到m个空的数据缓存队列,则判断m个读数据线程是否全部结束,若是,则使所述写数据线程结束,若否,则在等待第一设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每个数据缓存队列;
[0025]所述利用所述读数据线程,从对应的初始队列开始,按所述环形排列依次将读到的数据压入对应的数据缓存队列中,包括:
[0026]从所述读数据线程对应的初始队列开始,按所述环形排列依次遍历每个数据缓存队列;
[0027]若所述读数据线程有错误,则使所述读数据线程结束;
[0028]若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当前遍历的数据缓存队列不满时,将读到的数据压入当前遍历的数据缓存队列中;
[0029]若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当前遍历的数据缓存队列满时,遍历下一数据缓存队列;
[0030]若所述读数据线程无错误且连续遍历到m个满的数据缓存队列,则在等待第二设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每个数据缓存队列。
[0031]可选的,每个数据缓存队列分别与一个索引号一一对应;所述按所述环形排列依次遍历每个数据缓存队列,包括:
[0032]根据每个数据缓存队列对应的索引号,按所述环形排列依次遍历每个数据缓存队列。
[0033]可选的,所述方法还包括:
[0034]当m= n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓存队列按环形排列,从m个数据缓存队列中选取η个不同的初始队列分别分配给每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数据缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;
[0035]或者,
[0036]当m= n时,为η个写数据线程分别申请一个数据缓存队列;将η个数据缓存队列按环形排列,从η个数据缓存队列中选取m个不同的初始队列分别分配给每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述环形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源;
[0037]或者,
[0038]当m= n时,申请m个数据缓存队列;将m个数据缓存队列分别分配给每个读数据线程,并将m个数据缓存队列分别分配给每个写数据线程;利用所述读数据线程,将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
[0039]本发明实施例还提供了一种数据读写装置,包括:
[0040]线程申请单元,用于申请m个读数据线程和η个写数据线程,其中,m和η是大于或等于1的整数;
[0041]第一缓存申请单元,用于当m>n时,为所述线程申请单元申请的m个读数据线程分别申请一个数据缓存队列;
[0042]第一环形排列单元,用于将所述第一缓存申请单元申请的m个数据缓存队列按环形排列;
[0043]第一队列分配单元,用于从所述第一缓存申请单元申请的m个数据缓存队列中选取η个不同的初始队列分别分配给每个写数据线程;
[0044]第一读数据单元,用于利用所述线程申请单元申请的读数据线程,将读到的数据依次压入所述第一缓存申请单元申请的与该读数据线程对应的数据缓存队列中;
[0045]第一写数据单元,用于利用所述线程申请单元申请的写数据线程,从所述第一队列分配单元分配的与该写数据线程对应的初始队列开始,按所述第一环形排列单元所做的环形排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;
[0046]第二缓存申请单元,用于当m<n时,为所述线程申请单元申请的η个写数据线程分别申请一个数据缓存队列;
[0047]第二环形排列单元,用于将所述第二缓存申请单元申请的η个数据缓存队列按环形排列;
[0048]第二队列分配单元,用于从所述第二缓存申请单元申请的η个数据缓存队列中选取m个不同的初始队列分别分配给每个读数据线程;
[0049]第二读数据单元,用于利用所述线程申请单元申请的读数据线程,从所述第二队列分配单元分配的与该读数据线程对应的初始队列开始,按所述第二环形排列单元所做的环形排列依次将读到的数据压入对应的数据缓存队列中;
[0050]第二写数据单元,用于利用所述线程申请单元申请的写数据线程,从所述第二缓存申请单元申请的与该写数据线程对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
[0051 ]可选的,
[0052]所述第一队列分配单元,具体用于从m个数据缓存队列中为每个写数据线程选取一个不同的初始队列,其中,基于所述环形排列:
[0053]若m/n不能整除且m/n取整数后为b,则有一对相邻初始队列之间间隔的数据缓存队列数为m-b-η+Ι,其它每相邻两个初始队列之间间隔的数据缓存队列数为b-Ι;若m/n能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-Ι;
[0054]所述第二队列分配单元,具体用于从η个数据缓存队列中为每个读数据线程选取一个不同的初始队列,其中,基于所述环形排列:
[0055]若n/m不能整除且n/m取整数后为b,则有一对相邻初始队列之间间隔的数据缓存队列数为m-b-η+Ι,其它每相邻两个初始队列之间间隔的数据缓存队列数为b-Ι;若n/m能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-Ι。
[0056]可选的,
[0057]所述第一写数据单元,包括:
[0058]第一遍历子单元,用于从所述写数据线程对应的初始队列开始,按所述环形排列依次遍历每个数据缓存队列;
[0059]写数据子单元,用于若所述写数据线程有错误,则使所述写数据线程结束;若所述写数据线程无错误且所述第一遍历子单元未连续遍历到m个空的数据缓存队列,则当当前遍历的数据缓存队列不为空时,从当前遍历的数据缓存队列中取出数据;若所述写数据线程无错误且所述第一遍历子单元未连续遍历到m个空的数据缓存队列,则当当前遍历的数据缓存队列为空时,使所述第一遍历子单元遍历下一数据缓存队列;若所述写数据线程无错误且所述第一遍历子单元连续遍历到m个空的数据缓存队列,则判断m个读数据线程是否全部结束,若是,则使所述写数据线程结束,若否,则在等待第一设定时间段后,从下一数据缓存队列开始,使所述第一遍历子单元按所述环形排列依次遍历每个数据缓存队列;
[0060]所述第二读数据单元,包括:
[0061]第二遍历子单元,用于从所述读数据线程对应的初始队列开始,按所述环形排列依次遍历每个数据缓存队列;
[0062]读数据子单元,用于若所述读数据线程有错误,则使所述读数据线程结束;若所述读数据线程无错误且所述第二遍历子单元未连续遍历到m个满的数据缓存队列,则当当前遍历的数据缓存队列不满时,将读到的数据压入当前遍历的数据缓存队列中;若所述读数据线程无错误且所述第二遍历子单元未连续遍历到m个满的数据缓存队列,则当当前遍历的数据缓存队列满时,使所述第二遍历子单元遍历下一数据缓存队列;若所述
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1