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

技术编号:13084292 阅读:113 留言:0更新日期:2016-03-30 15:53
本发明专利技术公开了一种数据读写方法及装置,该方法包括:申请m个读数据线程和n个写数据线程;当m>n时,为m个读数据线程分别申请一个数据缓存队列,将m个队列按环形排列,从m个队列中选取n个不同的初始队列分别分配给每个写数据线程,利用读数据线程将读到的数据压入对应的队列中,利用写数据线程,从对应的初始队列开始,按环形排列依次从每个队列中取出数据;当m<n时,为n个写数据线程分别申请一个数据缓存队列,将n个队列按环形排列,从n个队列中选取m个不同的初始队列分别分配给每个读数据线程,利用读数据线程,从对应的初始队列开始,按环形排列依次将读到的数据压入对应队列中,利用写数据线程从对应队列中取出数据。

【技术实现步骤摘要】

本专利技术涉及计算机
,尤其涉及一种数据读写方法及装置
技术介绍
随着业务数据量的不断增加,业务上对数据采集性能的要求也在不断的提高,尤其在某些业务表数据量特别大情况下,会导致其他业务长时间等待。在现有硬件条件下,为了减少其他业务等待时间,提高数据采集效率,现有技术采用的技术手段是增加数据读写线程数,具体是利用多个读数据线程将各自读到的数据存放到一个数据缓存队列中,利用多个写数据线程分别从这个数据缓存队列中取数据以便将取出的数据写入目标数据源。与采用单个读数据线程和单个写数据线程相比,通过增加数据读写线程数,虽然可以使得数据处理性能有较大幅度的提高,但并不能达到理想的预期效果,比如线程数增加10倍,但性能(处理速度)仅提高5倍,且线程数越多,占用的系统资源越多,在一定程度上还会导致性能降低。
技术实现思路
有鉴于此,本专利技术实施例的主要目的在于提供一种数据读写方法及装置,以实现提高数据读写速度的目的。为实现上述目的,本专利技术实施例提供了一种数据读写方法,包括:申请m个读数据线程和n个写数据线程,其中,m和n是大于或等于1的整数;当m>n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓存队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分配给每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数据缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;当m<n时,为n个写数据线程分别申请一个数据缓存队列;将n个数据缓存队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分配给每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述环形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。可选的,所述从m个数据缓存队列中选取n个不同的初始队列分别分配给每个写数据线程,包括:从m个数据缓存队列中为每个写数据线程选取一个不同的初始队列,其中,基于所述环形排列:若m/n不能整除且m/n取整数后为b,则有一对相邻初始队列之间间隔的数据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列数为b-1;若m/n能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1;所述从n个数据缓存队列中选取m个不同的初始队列分别分配给每个读数据线程,包括:从n个数据缓存队列中为每个读数据线程选取一个不同的初始队列,其中,基于所述环形排列:若n/m不能整除且n/m取整数后为b,则有一对相邻初始队列之间间隔的数据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列数为b-1;若n/m能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1。可选的,所述利用所述写数据线程,从对应的初始队列开始,按所述环形排列依次从每个数据缓存队列中取出数据,包括:从所述写数据线程对应的初始队列开始,按所述环形排列依次遍历每个数据缓存队列;若所述写数据线程有错误,则使所述写数据线程结束;若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当前遍历的数据缓存队列不为空时,从当前遍历的数据缓存队列中取出数据;若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当前遍历的数据缓存队列为空时,遍历下一数据缓存队列;若所述写数据线程无错误且连续遍历到m个空的数据缓存队列,则判断m个读数据线程是否全部结束,若是,则使所述写数据线程结束,若否,则在等待第一设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每个数据缓存队列;所述利用所述读数据线程,从对应的初始队列开始,按所述环形排列依次将读到的数据压入对应的数据缓存队列中,包括:从所述读数据线程对应的初始队列开始,按所述环形排列依次遍历每个数据缓存队列;若所述读数据线程有错误,则使所述读数据线程结束;若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当前遍历的数据缓存队列不满时,将读到的数据压入当前遍历的数据缓存队列中;若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当前遍历的数据缓存队列满时,遍历下一数据缓存队列;若所述读数据线程无错误且连续遍历到m个满的数据缓存队列,则在等待第二设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每个数据缓存队列。可选的,每个数据缓存队列分别与一个索引号一一对应;所述按所述环形排列依次遍历每个数据缓存队列,包括:根据每个数据缓存队列对应的索引号,按所述环形排列依次遍历每个数据缓存队列。可选的,所述方法还包括:当m=n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓存队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分配给每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数据缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;或者,当m=n时,为n个写数据线程分别申请一个数据缓存队列;将n个数据缓存队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分配给每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述环形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源;或者,当m=n时,申请m个数据缓存队列;将m个数据缓存队列分别分配给每个读数据线程,并将m个数据缓存队列分别分配给每个写数据线程;利用所述读数据线程,将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。本专利技术实施例还提供了一种数据读写装置,包括:线程申请单元,用于申请m个读数据线程和n个写数据线程,其中,m和n是大于或等于1的整数;第一缓存申请单元,用于当m>n时,为所述线程申请单元申请的m个读数据线程分别申请一个数据缓存队列;第一环形排列单元,用于将所述第一缓存申请单元申请的m个数据缓存队列按环形排列;第一队列分配单元,用于从所述第一缓存申请单本文档来自技高网...

【技术保护点】
一种数据读写方法,其特征在于,包括:申请m个读数据线程和n个写数据线程,其中,m和n是大于或等于1的整数;当m>n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓存队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分配给每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数据缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;当m<n时,为n个写数据线程分别申请一个数据缓存队列;将n个数据缓存队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分配给每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述环形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。

【技术特征摘要】
1.一种数据读写方法,其特征在于,包括:
申请m个读数据线程和n个写数据线程,其中,m和n是大于或等于1的整数;
当m>n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓
存队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分配
给每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数
据缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形
排列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;
当m<n时,为n个写数据线程分别申请一个数据缓存队列;将n个数据缓
存队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分配
给每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述
环形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线
程,从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
2.根据权利要求1所述的方法,其特征在于,
所述从m个数据缓存队列中选取n个不同的初始队列分别分配给每个写数
据线程,包括:
从m个数据缓存队列中为每个写数据线程选取一个不同的初始队列,其
中,基于所述环形排列:
若m/n不能整除且m/n取整数后为b,则有一对相邻初始队列之间间隔的数
据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列
数为b-1;
若m/n能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1;
所述从n个数据缓存队列中选取m个不同的初始队列分别分配给每个读数
据线程,包括:
从n个数据缓存队列中为每个读数据线程选取一个不同的初始队列,其
中,基于所述环形排列:
若n/m不能整除且n/m取整数后为b,则有一对相邻初始队列之间间隔的数
据缓存队列数为m-b-n+1,其它每相邻两个初始队列之间间隔的数据缓存队列
数为b-1;
若n/m能整除,则每相邻两个初始队列之间间隔的数据缓存队列数为b-1。
3.根据权利要求1所述的方法,其特征在于,
所述利用所述写数据线程,从对应的初始队列开始,按所述环形排列依
次从每个数据缓存队列中取出数据,包括:
从所述写数据线程对应的初始队列开始,按所述环形排列依次遍历每个
数据缓存队列;
若所述写数据线程有错误,则使所述写数据线程结束;
若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当
前遍历的数据缓存队列不为空时,从当前遍历的数据缓存队列中取出数据;
若所述写数据线程无错误且未连续遍历到m个空的数据缓存队列,则当当
前遍历的数据缓存队列为空时,遍历下一数据缓存队列;
若所述写数据线程无错误且连续遍历到m个空的数据缓存队列,则判断m
个读数据线程是否全部结束,若是,则使所述写数据线程结束,若否,则在
等待第一设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍
历每个数据缓存队列;
所述利用所述读数据线程,从对应的初始队列开始,按所述环形排列依
次将读到的数据压入对应的数据缓存队列中,包括:
从所述读数据线程对应的初始队列开始,按所述环形排列依次遍历每个
数据缓存队列;
若所述读数据线程有错误,则使所述读数据线程结束;
若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当
前遍历的数据缓存队列不满时,将读到的数据压入当前遍历的数据缓存队列
中;
若所述读数据线程无错误且未连续遍历到m个满的数据缓存队列,则当当
前遍历的数据缓存队列满时,遍历下一数据缓存队列;
若所述读数据线程无错误且连续遍历到m个满的数据缓存队列,则在等待
第二设定时间段后,从下一数据缓存队列开始,按所述环形排列依次遍历每
个数据缓存队列。
4.根据权利要求3所述的方法,其特征在于,每个数据缓存队列分别与
一个索引号一一对应;所述按所述环形排列依次遍历每个数据缓存队列,包

\t括:
根据每个数据缓存队列对应的索引号,按所述环形排列依次遍历每个数
据缓存队列。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述方法还包括:
当m=n时,为m个读数据线程分别申请一个数据缓存队列;将m个数据缓存
队列按环形排列,从m个数据缓存队列中选取n个不同的初始队列分别分配给
每个写数据线程;利用所述读数据线程,将读到的数据依次压入对应的数据
缓存队列中;利用所述写数据线程,从对应的初始队列开始,按所述环形排
列依次从每个数据缓存队列中取出数据,并将取出的数据写入目标数据源;
或者,
当m=n时,为n个写数据线程分别申请一个数据缓存队列;将n个数据缓存
队列按环形排列,从n个数据缓存队列中选取m个不同的初始队列分别分配给
每个读数据线程;利用所述读数据线程,从对应的初始队列开始,按所述环
形排列依次将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,
从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源;
或者,
当m=n时,申请m个数据缓存队列;将m个数据缓存队列分别分配给每个读
数据线程,并将m个数据缓存队列分别分配给每个写数据线程;利用所述读数
据线程,将读到的数据压入对应的数据缓存队列中;利用所述写数据线程,
从对应的数据缓存队列中取出数据,并将取出的数据写入目标数据源。
6.一种数据读写装置,其特征在于,包括:
线程申请单元,用于申请m个读数据线程和n个写数据线程,其中,m和n
是大于或等于1的整数;
第一缓存申请单元,用于当m>n时,为所述线程申请单元申请的m个读数
据线程分别申请一个数据缓存队列;
第一环形排列单元,用于将所述第一缓存申请单元申请的m个数据缓存队
列按环形排列;
第一队列分配单元,用于从所述第一缓存申请单元申请的m个数据缓存队

\t列中选取n个不同的初始队列分别分配给每个写数据线程;
第一读数据单元,用于利用所述线程申请单元申请的读数据线程,将读
到的数据依次压入所述第一缓存申请单元申请的与该读数据线程对应的数据
缓存队列中;
第一写数据单元,用于利用所述线程申请单元申...

【专利技术属性】
技术研发人员:李东鸽牟晓光
申请(专利权)人:东软集团股份有限公司
类型:发明
国别省市:辽宁;21

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1