一种并发数据的缓存方法及结构的制作方法

文档序号:10552842阅读:570来源:国知局
一种并发数据的缓存方法及结构的制作方法
【专利摘要】一种并发数据的缓存方法,A每组数据写入,A1监测是否有写锁定状态缓存分区:若有转入步骤A2?2;若无A2监测是否存在空闲状态缓存分区:A21若有A21?1选定一组空闲状态缓存分区置为写锁定状态;A21?2向缓存分区写入数据:A21?3判断数据是否写入成功:若成功,则该组数据写入完成;若失败,则将该缓存分区置为写满状态,转入步骤A1;A22若无空闲状态缓存分区,结束数据写入;步骤B数据读取,B1实时监测是否存在写满状态下缓存分区:若有B11选定该组缓存分区置为读锁定状态;B12读取该缓存分区内的缓存数据,当判断缓存分区读取完毕时,将其设为空闲状态,转入步骤B1;若没有,转入步骤B1,继续数据读取,其对缓存分区访问施加严格读写锁,可有效优化数据处理速率。
【专利说明】
一种并发数据的缓存方法及结构
技术领域
[0001]本发明涉及辐射检测领域的数据采集技术,具体涉及一种高速数据采集的缓存方法和设备。
【背景技术】
[0002]现有技术中的高速数据采集系统,其每个数据通道一般都对应设有一个独立的用于缓存通道数据的FIF0(First Input First Ouput,先入先出队列),然而在实际的数据采集中,经常遇到数据采集率高、速度快,而数据处理时间长,速度较慢的矛盾,当缓存容量大时,这种原始数据的速率较高,对网络接收和数据处理提出了较高的要求。
[0003]以全数字PET为例,图1为全数字PET设备中数据采集与处理流程示意图,探测器各通道对接收到信号进行采样和编码,以特定格式的数据包发送到网络。PET成像所需的有效事件分布于不同的探测器通道,两者之间的匹配关系可通过事件采样时间来标定。来自各探测器通道的有效事件以及噪声数据混合在一起,串行分布于网络传输链路中,当采集服务器接收到这些数据后,基于符合算法从中筛选出有效事件,并进行时间、能量校正,然后根据重建算法将筛选结果转换为PET图像。理想情况下数据采集应与符合处理并发执行,实时完成数据筛选、时间校正、能量校正,从而降低重建前数据存储所需的资源要求。但是由于通道数量多,且每个通道中数据量十分巨大,每秒需要同时处理1.5GB至3GB的数据,若无法及时进行处理,会导致有效事件的丢包,进而导致数据筛选、时间校正、能量校正的有效性降低,图像重建无法实现或者虽然能实现但是严重影响精准性。

【发明内容】

[0004]本发明的目的在于提供一种并发数据的缓存方法及结构,能够有效解决数据采集率高、速度块,而数据处理时间长、速度慢的问题,尤其适用于全数字PET中的探测器数据采集。
[0005]为达到上述目的,本发明的解决方案是:
[0006]本发明公开一种并发数据的缓存方法,包括以下步骤:缓存分区的工作状态设置为空闲状态、写锁定状态、写满状态以及读锁定状态中的任意一种,
[0007](A)每组数据写入时,(Al)实时监测是否存在写锁定状态缓存分区:若有写锁定状态缓存分区直接转入步骤(A2-2)进行该组数据写入;若没有写锁定状态缓存分区,(A2)实时监测是否存在空闲状态的缓存分区:
[0008](A21)若有处于空闲状态的缓存分区,(A21-1)选定一组空闲状态的缓存分区置为写锁定状态;(A21-2)向所述写锁定状态的缓存分区写入该组数据:(A21-3)判断所述数据是否写入成功:若写入成功,则该组数据写入完成,结束本次数据写入;若写入失败,则将当前缓存分区置为写满状态,并转入步骤(Al)继续该组数据的写入;
[0009](A22)若没有处于空闲状态的缓存分区,则结束该组数据写入;
[0010]步骤(B)数据读取时,(BI)实时监测是否存在写满状态下的缓存分区:若有处于写满状态下的缓存分区,(Bll)选定该组写满状态的缓存分区置为读锁定状态;(B12)读取该读锁定状态缓存分区内的缓存数据,当判断所述读锁定状态缓存分区读取完毕时,将所述缓存设置为空闲状态,同时转入步骤(BI)继续下一组缓存分区的读取;若没有写满状态的缓存分区,转入步骤(BI),继续数据的读取。
[0011]所述缓存分区中,同时只存在一组写锁定状态缓存分区与一组读锁定状态缓存分区;
[0012]优选的,全部数据写入进程结束时,若存在一组未写满的缓存分区,则将该组缓存分区置为写满状态以进行数据的读取。
[0013]依次顺序访问各缓存分区以监测是否存在写锁定或空闲状态的缓存分区;
[0014]优选的,采取遍历、与数据写入访问相同的顺序、缓存分区写入完成主动上报中的任一方式实时监测是否存在写满状态的缓存分区;
[0015]所述缓存分区内部采用分级管理的方式进行数据写入操作,所述缓存分区中包括多个大小相同的缓存扇区,且所述缓存扇区一一编码,且包括多个大小相同的缓存页面,所述每组写入数据的大小与所述缓存页面大小相同设置,则所述步骤(A21-3)中,判断所述数据是否写入成功包括以下步骤:每组数据写入缓存分区的每一缓存扇区后,缓存扇区内部计数,确定当前缓存扇区编码,比较所述缓存扇区编码与所述缓存扇区的最大编码数大小:若该缓存扇区编码小于所述缓存分区的最大编码数,判断下一组数据能够在本缓存分区中写入成功,若缓存扇区编码等于所述缓存分区的最大编码数,则判断所述缓存分区已满,转入步骤(Al),将下一组数据写入下一个缓存分区中;
[0016]优选的,所述数据按照编码顺序写入至所述缓存扇区中,且所述缓存页面一一编码,所述数据写入至缓存扇区时,按照缓存页面的编码顺序依次写入。
[0017]所述步骤(A21-3)中,所述数据写入成功判断包括以下步骤:向所述写锁定状态的缓存分区写入外部发送的数据组:当判断所述写锁定状态缓存分区未写满时,写入成功,继续该组缓存分区的数据写入;当判断所述写锁定状态缓存分区写满或外部数据写完毕时,将该组缓存分区置为写满状态,并转入步骤(Al)继续下一组外部数据的写入;
[0018]进一步的,所述写锁定状态的缓存分区写满判断包括以下步骤:向所述写锁定状态的缓存分区写入外部发送的数据时,比较外部数据量与所述写锁定状态的缓存分区剩余空间大小,若外部数据的数量大于所述写锁定状态的缓存分区剩余空间,判断所述写锁定状态的缓存分区写满;或,向所述写锁定状态的缓存分区写入外部发送的数据时,系统报错,则判断所述写锁定状态的缓存分区写满。
[0019]所述步骤(BI)之前,还包括实时监测是否存在读锁定状态缓存分区的步骤,若有,直接转入步骤(B12)读取所述读锁定状态缓存分区内的缓存数据;若无,则转入步骤(BI);
[0020]优选的,所述数据读取速度大于数据写入速度;
[0021]优选的,其应有于生产者与消费者模型。
[0022]本发明公开了一种并发数据的缓存结构,其同时进行数据的写入与读取,包括一组数据写入线程、一组数据读取线程、一组数据缓存模块以及一分区控制模块;
[0023]所述数据缓存模块包括多组缓存分区;
[0024]所述分区控制模块与所述数据缓存模块通信连接以控制所述多个缓存分区的工作状态以及被访问顺序,所述分区控制模块用于将所述每个缓存分区的工作状态设置为空闲状态、写锁定状态、写满状态以及读锁定状态中的任意一种,仅当所述缓存分区为空闲状态时支持写锁定,且所述缓存分区处于写锁定状态时支持数据写入,仅当所述缓存分区为写满状态时支持读锁定,且所述缓存分区处于读锁定状态时支持数据读出;
[0025]所述数据写入线程与所述数据读取线程分别经由所述分区控制模块与各缓存分区通信连接,所述分区控制模块控制所述数据写入线程与所述数据读取线程访问缓存分区的顺序,以使得所述数据写入线程与所述数据读取线程根据所访问缓存分区的工作状态进行数据的写入与读取。
[0026]所述每组缓存分区包括一控制单元以及多组缓存扇区,所述缓存扇区一一编码设置,所述控制单元与所述每组缓存扇区通信连接,以控制每组缓存分区中,数据写入缓存扇区的顺序;
[0027]进一步优选的,所述每组缓存扇区包括一控制组件以及多个缓存页面,所述缓存页面一一编码且每组写入数据的大小与缓存页面相同设置,所述控制组件与所述缓存页面分别通向连接,以控制每组缓存扇区中,数据写入缓存页码的顺序。
[0028]所述分区控制模块包括一写锁定判断单元以及一读锁定判断单元;
[0029]所述写锁定判断单元与数据缓存模块通信连接,以控制数据缓存模块中缓存分区的访问顺序、写锁定与去写锁定,所述数据写入线程与所述写锁定判断单元通信连接以根据所述写锁定判断单元确定的访问顺序访问的缓存分区,并根据当前访问缓存分区的工作状态进行数据的写入操作;
[0030]所述读锁定判断单元与相应的数据缓存模块通信连接,以控制数据缓存模块中缓存分区的访问顺序、读锁定与去读锁定,所述数据读取线程与所述读锁定判断单元通信连接以根据所访问的缓存分区的当前状态判断是否读取缓存数据。
[0031]优选的,同时只存在一组写锁定状态缓存分区与一组读锁定状态缓存分区。
[0032]优选的,所述数据缓存模块为生产者与消费者模型。
[0033]此外,本发明还公开了一种并发数据的缓存模型,同时包括至少两组以上如权利要求8所述并发数据的缓存结构。
[0034]由于采用上述方案,本发明的有益效果是:本发明所示的简单的并发数据缓存方法及结构,通过为对缓存分区的访问施加严格的读写锁,可支持更高的网络数据速率,优化数据处理速度。
【附图说明】
[0035]图1为全数字PET的数据采集与处理流程示意图;
[0036]图2为本发明一实施例中并发数据缓存方法步骤示意图;
[0037]图3为图2所示实施例中并发数据缓存方法数据写入时的流程图;
[0038]图4为图2所示实施例中并发数据缓存方法数据读取时的流程图;
[0039]图5为本法一实施例中并发数据缓存结构示意图;
[0040]图6为图5所不实施例中缓存扇区的结构不意图。
【具体实施方式】
[0041 ]以下结合附图所示实施例对本发明作进一步的说明。
[0042]本发明提供了一种并发数据的缓存方法,包括以下步骤,缓存分区的工作状态设置为空闲状态、写锁定状态、写满状态以及读锁定状态中的任意一种,其中当某一缓存分区全部写满或某一时间段内外部数据写入完毕,没有新的数据写入时,该缓存分区被置为写满状态。
[0043]由于无法确定外部数据的发送时间以及数量的大小,为了确保每组外部发送的数据能够及时有效的写入至缓存中,尽量避免出现丢包的问题,如图3所示,每组数据写入过程如下,(A)—组数据写入:(Al)实时监测是否存在写锁定状态缓存分区:当确定存在写锁定状态缓存分区时,直接转入步骤(A2-2),将该组数据写入至写锁定状态缓存分区中。若当前缓存分区中没有处于写锁定的工作状态时,(A2)则实时监测是否存在空闲状态的缓存分区:(A21)若有处于空闲状态的缓存分区,(A21-1)选定一组空闲状态的缓存分区置为写锁定状态;(A21-2)向所述写锁定状态的缓存分区写入该组数据:(A21-3)判断所述数据是否写入成功:若数据写入成功,则该组数据写入完成,结束该组数据的写入,同时可转入步骤(A)中继续下一组数据的写入;若数据写入失败,则说明当前处于写锁定工作状态的缓存分区已经写满了,无法在进行新的数据写入,则将当前缓存分区的工作状态置为写满状态,同时转入步骤(Al)中,继续该组外部数据的写入,将该组外部数据写入至其他缓存分区中;
[0044]其中,上述步骤(A21-3)中,可通过判断选定的写锁定状态缓存分区是否写满的步骤来确定数据是否写入成功。在向写锁定状态的缓存分区写入外部发送的数据组时,若判断写锁定状态缓存分区还未写满时,则说明有足够的空间写入当前数据,则当该组数据写入时可判断其写入成功;当判断选定的写锁定状态缓存分区已写满时,没有足够的空间继续写入新的数据,则说明无法将该组数据写入至上述写锁定状态缓存分区,判断其写入失败,此时,需将该组缓存分区置为写满状态,并转入步骤(Al),以将本组数据写入至其他合适的缓存分区中。
[0045]上述写锁定状态的缓存分区写满判断具体又包括以下步骤:向写锁定状态的缓存分区写入外部发送的数据时,首先比较该组数据与写锁定状态的缓存分区剩余空间大小,若外部数据大于写锁定状态的缓存分区剩余空间,则判断写锁定状态的缓存分区写满;若外部数据不大于写锁定状态的缓存分区剩余空间,则判断写锁定状态的缓存分区未写满,本组数据可继续写入;也可采取主动上报的方式判断写锁定状态的缓存分区是否写满,即当向写锁定状态的缓存分区写入外部发送的数据时,若系统主动报错,则判断写锁定状态的缓存分区写满。
[0046](A22)若没有处于空闲状态的缓存分区,说明当前缓存已经全部写满,则结束该组数据的写入进程。
[0047]数据读取包括以下步骤,(B)数据读取时,以单个缓存分区为基础来进行的,(BI)实时监测是否存在写满状态下的缓存分区:若有处于写满状态下的缓存分区,(Bll)选定其中一组写满状态的缓存分区置为读锁定状态;(B12)读取该读锁定状态缓存分区内的缓存数据,当判断所述读锁定状态缓存分区读取完毕时,将所述缓存设置为空闲状态,同时转入步骤(BI)继续下一组缓存分区的读取;若没有写满状态的缓存分区,则转入步骤(BI)中,判断下一时刻是否存在写满状态缓存分区以继续进行数据的读取。
[0048]此外,全部数据写入进程结束时,若存在一组未写满的缓存分区,则将该组缓存分区置为写满状态以进行数据的读取。考虑到外部数据的大小无法确定,某一时间段内数据写入进程结束时,所接收的外部数据可能无法写满一组数据缓存,或者最后一段数据无法写满一组数据缓存,此时为了读取该部分数据,将写入该部分数据的缓存分区也置为写满状态。
[0049]所述步骤(BI)之前,还包括实时监测是否存在读锁定状态缓存分区的步骤,若有,直接转入步骤(B12)读取选定读锁定状态缓存分区内的缓存数据;若无,则转入步骤(BI),判断是否存在写满状态下的缓存分区以继续数据的读取。
[0050]为了便于数据写入与读取的管理,在所有的缓存分区中,同时只设置一组写锁定状态缓存分区与一组读锁定状态缓存分区,即缓存中同时只进行一组缓存分区的数据写入和/或一组缓存分区的数据读取,这样设置,一方面可使得数据的写入与读取更为有序,只有一组缓存分区写完或读完之后,才能对下一分区进行读写操作,另一方面,也可充分利用缓存分区的空间,保证每组缓存分区都得到有效利用,而不会出现多组缓存分区只有一部分空间被利用的情形。
[0051]在上述基础上,本发明所示的缓存方法对缓存分区的访问顺序进行设置,以更好的实现数据写入与读取的合理管理。
[0052]数据写入过程中,依次顺序访问各缓存分区以监测是否存在写锁定或空闲状态的缓存分区,即写入线程在寻找写锁定或空闲状态的缓存分区时,任意设置一缓存分区作为起点,然后按照顺序循环依次访问,具体而言,各缓存分区构建和初始化完成后一般即为空闲状态,由于同时只存在一组写锁定状态的缓存分区,在进行数据写入时,写入线程按照从起始点开始的顺序依次访问各缓存分区,首先起始点的空闲状态缓存分别被置为写锁定状态以进行数据写入,当起始点的缓存分区写满后,起始点的下一缓存分区被置为写锁定状态,写入线程直接转入下一缓存分区继续数据的写入,直至该缓存分区写满,依次循环实现数据的写入。
[0053]由于数据写入的时间以及写入量是人为无法控制的,为了更好的应对各种突发的数据写入情况,更进一步的,缓存分区中包括多个大小相同的缓存扇区,缓存扇区一一编码且包括多个大小相同的缓存页面,将每组写入数据的大小与缓存页面大小相同设置。当确定一组写锁定状态下的缓存分区进行数据写入时,将本组数据按照顺序写入各缓存扇区的缓存页面中,即首先本组数据写入第一组缓存扇区的第一个缓存页面中,下一组数据写入第一组缓存扇区的第二个缓存页面中,依次进行,直至该组缓存扇区写满,则缓存扇区内部自己计数,确定当前缓存扇区编码,并自动将未写完的数据或者下一组数据写入至第二组缓存分区(下一缓存扇区)的第一个缓存页面中,直至该缓存分区中所有的缓存页面均被写满。相应的数据写入时缓存分区写满判断的步骤如下:比较缓存扇区编码与缓存扇区的最大编码数大小:若该缓存扇区编码小于缓存分区的最大编码数,判断下一组数据能够在本缓存分区中写入成功,若缓存扇区编码等于缓存分区的最大编码数,则判断缓存分区已满,转入步骤(Al ),将下一组数据写入下一个缓存分区中。
[0054]在进行数据读取时,可采用与数据写入访问相同的顺序的进行数据的读出,从而当缓存分区写满并置为写满状态后,数据读取线程能在第一时间内访问该缓存分区,进而该缓存分区被置为读锁定状态并进行数据的读取,这样设置,可尽量节约时间,提高数据的读出效率。同时,也可采取遍历、缓存分区写满主动上报等方式实时监测是否存在写满状态的缓存分区,从进行数据的读出。
[0055]此外,考虑到若出现外部数据量较大,缓存空间存储能力有限的,可能导致数据丢失的情形,故本发明所示的缓存方法中,数据读取速度大于数据写入速度设置。
[0056]以下以本发明所示的缓存方法应用于基本缓存模型(即单个生产者和单个消费者的场景)对其工作过程进行进一步的说明。将整个缓存分为若干个缓存分区,通过简单的状态锁来实现生产者与消费者对缓存分区的访问保护。各缓存分区构建和初始化完成后即为空闲状态。在将数据写入缓存分区之前,首先实时判断是否存在空闲状态的缓存分区,如果存在则进行数据写入操作,将该缓存分区状态置为写锁定状态,仅当缓存分区为空闲状态时支持写锁定,并通过数据写入线程进行该组缓存分区的数据写入。当判断该缓存分区写满后,一方面将该缓存分区置为可读状态(即写满且未锁定状态),另一方面寻找缓存内其他的空闲分区,循环继续数据写入操作。在进行数据写入操作的同时,数据读取线程也在访问缓存分区进行数据读取操作,数据读取线程实时访问各缓存分区以判断是否存在可读状态缓存分区,当数据读取线程判断当前访问的缓存分区变为可读状态时,在数据读取线程从缓存分区读取数据之前,首先需要将该分区状态置为读锁定状态,仅当缓存分区为可读状态时支持读锁定。若试图对缓存分区添加读锁定或写锁定而操作失败,意味着网络接收线程和数据处理线程访问位置发生交汇,若为写锁定相关操作失败则表示缓存已满。
[0057]本发明所示的并发数据的缓存方法也可用于由多个基本缓存模型组成的缓存中,具体步骤如前所述,每基本缓存模型均采取并发数据的缓存方法进行数据的写入与读出,此处不再赘述。
[0058]当该方法应用于PET设备中的数据采集实现时,NETTY网络框架定义了独立的数据接收线程充当生产者。由定制的工作线程充当消费者,负责网络数据包解析、事件符合计算等处理。缓存分区的访问锁基于JAVA开发环境提供的CAS机制实现,其基本原理是将缓存分区的状态设定实现为原子性操作。具体来说,访问锁对象的访问是一个原子性操作。一个操作是原子的,则这个操作的更高层不能发现其内部实现与结构。原子操作可以是一个步骤,也可以是多个步骤,其顺序是不可以被打乱的,也不能被分割只执行部分。CAS是指CompareandSet,即检查对象的值,如果满足某种条件,则将此对象设置为新值。使用CAS机制可实现不使用线程锁的方式对对象的值进行访问和更新,性能优于使用互斥锁的方案。
[0059]单个缓存分区作为事件筛选样本的基本集合单元,其容量可灵活配置,以便于调整因数据分片而引起的符合事件丢失率。为优化数据处理速度,网络数据包解析和符合筛选环节均引入了 JAVA开发环境提供的Fork/Join并行计算模型。每个缓存分区的容量是相同,其容量大小可灵活配置。理论上缓存分区越大越好,这样可以保证数据丢失少,但缓存分区越大对物理内存的要求也就越高。故这个缓存分区容量大小值可根据物理内存的大小来确定。Fork/Join并行计算模型的原理是Map/Reduce模型,对一个复杂的任务进行分而治之,通过使用现在计算机多核多线程技术提高计算效率。例如计算N个数的和,将N个数分为M份,并使用M个线程同步执行计算的任务,再将M个结果合并成一个结果。
[0060]本发明还公开了一种并发数据的缓存结构,同时进行数据的写入与读取,包括一组数据写入线程100、一组数据读取线程200、一组数据缓存模块300以及一分区控制模块400。
[0061 ]数据缓存模块300包括多组缓存分区310,分区控制模块400与数据缓存模块300通信连接,用于控制数据缓存模块300中各个缓存分区310的工作状态,即分区控制模块400将每个缓存分区310的工作状态设置为空闲状态、写锁定状态、写满状态以及读锁定状态中的任意一种。仅当缓存分区310为空闲状态时支持写锁定,且当缓存分区310的工作状态为写锁定时支持数据写入线程100进行数据的写入;仅当缓存分区310为写满状态时支持读锁定,且当缓存分区310的工作状态为读锁定状态时支持数据读取线程200进行数据的读出,同时分区控制模块400还用于控制各个缓存分区310的被访问顺序,数据写入线程100与数据读取线程200分别经由分区控制模块400与各缓存分区310通信连接,数据写入线程100与数据读取线程200按照分区控制模块400确定的访问顺序分别访问数据缓存模块300中的多组缓存分区,然后根据其所访问缓存分区的状态来进行数据的写入或者读取操作。
[0062]为了便于数据的写入与读取,分区控制模块400将读写操作分开进行,其包括一写锁定判断单元410以及一读锁定判断单元420,且在所有的缓存分区中,同时只设置一组写锁定状态缓存分区与一组读锁定状态缓存分区。
[0063]写锁定判断单元410与数据缓存模块300通信连接,用于控制数据缓存模块300中缓存分区310的访问顺序、写锁定(将空闲状态的缓存分区置为写锁定状态)与去写锁定(将写满的写锁定状态缓存分区置为写满状态)。数据写入线程100与写锁定判断单元410通信连接,其根据写锁定判断单元410确定的访问顺序来访问各缓存分区310,并根据当前所访问缓存分区310的工作状态进行数据的写入操作。在其中一实施例中,为了使得各缓存分区的数据输入相对均衡,写锁定判断单元410采用定制遍历策略来调节数据在缓存模块中的分布,即顺序遍历,可任意选取其中一组缓存分区作为起始点并按照编码顺序对缓存分区进行控制。缓存构建完成后,一般情况下,各缓存分区均为空闲状态,写锁定判断单元410将处于起始点的空闲状态的缓存分区置为写锁定状态,数据写入线程100按照写锁定判断单元410确定的访问顺序访问起始点的缓存分区,由于其为写锁定状态,则可开始进行数据写入,待该缓存分区写满以后,写锁定判断单元410将起始点的缓存分区置为写满状态,并将起始点下一编码处的空闲状态缓存分区置为写锁定状态,数据写入线程100按照写锁定判断单元410确定的继续访问下一编码缓存分区,然后进行数据写入操作。
[0064]读锁定判断单元420与相应的数据缓存模块300也通信连接,用于控制数据缓存模块300中缓存分区的访问顺序、读锁定(将写满状态的缓存分区置为读锁定状态)与去读锁定(将读取完毕的缓存分区置为空闲状态),数据读取线程200与读锁定判断单元420通信连接以根据所访问的缓存分区的当前状态判断是否读取缓存数据。在数据写入的同时,数据读取线程200也在进行数据的读取操作,数据读取的访问顺序可采用与数据写入访问相同的顺序的进行数据的读出,即读锁定判断单元420控制数据读取线程200按照写锁定判断单元410所确定的访问顺序,来访问各缓存分区,这样设置,当缓存分区写满并置为写满状态后,数据读取线程200能在第一时间内访问该缓存分区,进而该缓存分区被置为读锁定状态并进行数据的读取,能够更进一步的提高数据的读出效率。此外,读锁定判断单元420也可采取遍历顺序,或者由各缓存分区写满主动上报,读锁定判断单元420以及缓存分区上报的顺序确定数据读取线程200的访问顺序。
[0065]由于数据写入的过程是人为无法控制的过程,可能出现在上述设置的基础上,为了有效的进行数据的写入管理,减少数据丢包事件的发生,同时提高缓存的利用率,每组缓存分区310分层级管理设置,其包括一控制单元311以及多组缓存扇区312,缓存扇区312—一编码设置,控制单元311与该组缓存分区310中的所有缓存扇区312通信连接,用于控制每组缓存分区中,外部数据写入缓存扇区312的顺序。进一步的,每组缓存扇区312包括一控制组件312-1以及多个缓存页面312-2,缓存页面312-2—一编码且每组写入数据的大小与缓存页面312-2相同设置,控制组件312-1与缓存页面312-2分别通向连接,以控制每组缓存扇区中,数据写入缓存页码的顺序。
[0066]当该组缓存分区设置为写锁定状态且与数据写入线程100通信成功进行数据写入操作时,缓存分区内部对数据写入的过程二次导向。在其中一实施例中,控制单元311控制缓存分区内部也采用顺序写入的方式进行,一组数据写入时,将本组数据按照顺序写入各缓存扇区的缓存页面312-2中,即首先将该组数据写入第一组缓存扇区的第一个缓存页面312-2中,下一组数据写入第一组缓存扇区的第二个缓存页面312-2中,依次进行,直至该组缓存扇区写满,则缓存扇区内部自己计数,确定当前缓存扇区编码,并自动将未写完的数据或者下一组数据写入至第二组缓存扇区(下一缓存扇区)的第一个缓存页面312-2中,直至该缓存分区中所有的缓存页面312-2均被写满。相应的数据写入时缓存分区写满判断的步骤如下:每组缓存分区中,控制单元311比较缓存扇区编码与缓存扇区的最大编码数大小:若该缓存扇区编码小于缓存分区的最大编码数,判断下一组数据能够在本缓存分区中写入成功,若缓存扇区编码等于缓存分区的最大编码数,则判断缓存分区已满,将下一组数据写入下一个缓存分区中。
[0067]作为一个优选方案,数据缓存模块300可为生产者与消费者模型。
[0068]理论上缓存分区越大越好,这样可以保证数据丢失少,但缓存分区越大对物理内存的要求也就越高。由于缓存容量有限,故本发明还提供了一种并发数据的缓存模型,其同时包括两组以上的上述并发数据的缓存结构。每个缓存结构的工作原理相同,此处不再赘述,上述并发数据的缓存模型中,同时经由多个数据写入线程100与外部数据源通信连接,进行数据的写入操作,同时经由多个数据读取线程200与外部处理设备通信连接,将各缓存内部的数据及时读出并发送至外部处理设备中进行下一步的数据处理,从而有效增强数据的缓存能力。
[0069]上述的对实施例的描述是为便于该技术领域的普通技术人员能理解和使用本发明。熟悉本领域技术的人员显然可以容易地对这些实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,不脱离本发明范畴所做出的改进和修改都应该在本发明的保护范围之内。
【主权项】
1.一种并发数据的缓存方法,其特征在于:包括以下步骤:缓存分区的工作状态设置为空闲状态、写锁定状态、写满状态以及读锁定状态中的任意一种, (A)每组数据写入时,(Al)实时监测是否存在写锁定状态缓存分区:若有写锁定状态缓存分区直接转入步骤(A2-2)进行该组数据写入;若没有写锁定状态缓存分区,(A2)实时监测是否存在空闲状态的缓存分区: (A21)若有处于空闲状态的缓存分区,(A21-1)选定一组空闲状态的缓存分区置为写锁定状态;(A21-2)向所述写锁定状态的缓存分区写入该组数据:(A21-3)判断所述数据是否写入成功:若写入成功,则该组数据写入完成,结束本次数据写入;若写入失败,则将当前缓存分区置为写满状态,并转入步骤(Al)继续该组数据的写入; (A22)若没有处于空闲状态的缓存分区,则结束该组数据写入; 步骤(B)数据读取时,(BI)实时监测是否存在写满状态下的缓存分区:若有处于写满状态下的缓存分区,(Bll)选定该组写满状态的缓存分区置为读锁定状态;(B12)读取该读锁定状态缓存分区内的缓存数据,当判断所述读锁定状态缓存分区读取完毕时,将所述缓存设置为空闲状态,同时转入步骤(BI)继续下一组缓存分区的读取;若没有写满状态的缓存分区,转入步骤(BI),继续数据的读取。2.根据权利要求1所述的并发数据的缓存方法,其特征在于:所述缓存分区中,同时只存在一组写锁定状态缓存分区与一组读锁定状态缓存分区; 优选的,全部数据写入进程结束时,若存在一组未写满的缓存分区,则将该组缓存分区置为写满状态以进行数据的读取。3.根据权利要求1或2所述的并发数据的缓存方法,其特征在于:依次顺序访问各缓存分区以监测是否存在写锁定或空闲状态的缓存分区; 优选的,采取遍历、与数据写入访问相同的顺序、缓存分区写入完成主动上报中的任一方式实时监测是否存在写满状态的缓存分区。4.根据权利要求1所述的并发数据的缓存方法,其特征在于:所述缓存分区内部采用分级管理的方式进行数据写入操作,所述缓存分区中包括多个大小相同的缓存扇区,且所述缓存扇区一一编码,且包括多个大小相同的缓存页面,所述每组写入数据的大小与所述缓存页面大小相同设置,则所述步骤(A21-3)中,判断所述数据是否写入成功包括以下步骤:每组数据写入缓存分区的每一缓存扇区后,缓存扇区内部计数,确定当前缓存扇区编码,比较所述缓存扇区编码与所述缓存扇区的最大编码数大小:若该缓存扇区编码小于所述缓存分区的最大编码数,判断下一组数据能够在本缓存分区中写入成功,若缓存扇区编码等于所述缓存分区的最大编码数,则判断所述缓存分区已满,转入步骤(Al),将下一组数据写入下一个缓存分区中; 优选的,所述数据按照编码顺序写入至所述缓存扇区中,且所述缓存页面一一编码,所述数据写入至缓存扇区时,按照缓存页面的编码顺序依次写入。5.根据权利要求1所述的并发数据的缓存方法,其特征在于:所述步骤(A21-3)中,所述数据写入成功判断包括以下步骤:向所述写锁定状态的缓存分区写入外部发送的数据组:当判断所述写锁定状态缓存分区未写满时,写入成功,继续该组缓存分区的数据写入;当判断所述写锁定状态缓存分区写满或外部数据写完毕时,将该组缓存分区置为写满状态,并转入步骤(Al)继续下一组外部数据的写入; 进一步的,所述写锁定状态的缓存分区写满判断包括以下步骤:向所述写锁定状态的缓存分区写入外部发送的数据时,比较外部数据量与所述写锁定状态的缓存分区剩余空间大小,若外部数据的数量大于所述写锁定状态的缓存分区剩余空间,判断所述写锁定状态的缓存分区写满;或,向所述写锁定状态的缓存分区写入外部发送的数据时,系统报错,则判断所述写锁定状态的缓存分区写满。6.根据权利要求1所述的并发数据的缓存方法,其特征在于:所述步骤(BI)之前,还包括实时监测是否存在读锁定状态缓存分区的步骤,若有,直接转入步骤(B12)读取所述读锁定状态缓存分区内的缓存数据;若无,则转入步骤(BI); 优选的,所述数据读取速度大于数据写入速度; 优选的,其应有于生产者与消费者模型。7.—种并发数据的缓存结构,其特征在于:其同时进行数据的写入与读取,包括一组数据写入线程、一组数据读取线程、一组数据缓存模块以及一分区控制模块; 所述数据缓存模块包括多组缓存分区; 所述分区控制模块与所述数据缓存模块通信连接以控制所述多个缓存分区的工作状态以及被访问顺序,所述分区控制模块用于将所述每个缓存分区的工作状态设置为空闲状态、写锁定状态、写满状态以及读锁定状态中的任意一种,仅当所述缓存分区为空闲状态时支持写锁定,且所述缓存分区处于写锁定状态时支持数据写入,仅当所述缓存分区为写满状态时支持读锁定,且所述缓存分区处于读锁定状态时支持数据读出; 所述数据写入线程与所述数据读取线程分别经由所述分区控制模块与各缓存分区通信连接,所述分区控制模块控制所述数据写入线程与所述数据读取线程访问缓存分区的顺序,以使得所述数据写入线程与所述数据读取线程根据所访问缓存分区的工作状态进行数据的写入与读取。8.根据权利要求7所述的缓存结构,其特征在于:所述每组缓存分区包括一控制单元以及多组缓存扇区,所述缓存扇区一一编码设置,所述控制单元与所述每组缓存扇区通信连接,以控制每组缓存分区中,数据写入缓存扇区的顺序; 进一步优选的,所述每组缓存扇区包括一控制组件以及多个缓存页面,所述缓存页面一一编码且每组写入数据的大小与缓存页面相同设置,所述控制组件与所述缓存页面分别通向连接,以控制每组缓存扇区中,数据写入缓存页码的顺序。9.根据权利要求7所述的缓存结构,其特征在于:所述分区控制模块包括一写锁定判断单元以及一读锁定判断单元; 所述写锁定判断单元与数据缓存模块通信连接,以控制数据缓存模块中缓存分区的访问顺序、写锁定与去写锁定,所述数据写入线程与所述写锁定判断单元通信连接以根据所述写锁定判断单元确定的访问顺序访问的缓存分区,并根据当前访问缓存分区的工作状态进行数据的写入操作; 所述读锁定判断单元与相应的数据缓存模块通信连接,以控制数据缓存模块中缓存分区的访问顺序、读锁定与去读锁定,所述数据读取线程与所述读锁定判断单元通信连接以根据所访问的缓存分区的当前状态判断是否读取缓存数据。10.根据权利要求7所述的缓存结构,其特征在于:同时只存在一组写锁定状态缓存分区与一组读锁定状态缓存分区。 优选的,所述数据缓存模块为生产者与消费者模型。11.一种并发数据的缓存模型,其特征在于:同时包括至少两组以上如权利要求7所述的并发数据的缓存结构。
【文档编号】G06F12/0884GK105912479SQ201610210432
【公开日】2016年8月31日
【申请日】2016年4月7日
【发明人】徐驰
【申请人】武汉数字派特科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1