一种队列的数据处理方法和系统
技术领域
本发明涉及计算机技术领域,特别涉及一种队列的数据处理方法和系统。
背景技术
队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。一般讨论队列指的都是FIFO(first in first out)队列,FIFO队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾,每次离开的成员总是队列头上的,即“队头”数据最先被提取出来。
现有技术中,对队列的操作一般包括:存储、读取、删除。即:需要为数据建立一个索引ID;在将数据存储到队列中时,先将数据持久化到持久化存储装置中,并将该数据的索引ID按照入队列的顺序存储到缓存中。当读取队列中的数据时,从该缓存中获取队头的索引ID,然后根据该索引ID检索持久化存储装置获得对应的数据,然后读取该数据并将该数据从持久化存储装置中删除。
在实现本发明的过程中,发明人发现现有技术中至少存在以下问题:
现有技术中的队列存储、读取、删除操作时都需要对持久化存储装置进行操作,导致提取数据时的时延大,对系统效率造成影响。特别是读取操作时,从缓存获取索引ID后需要对持久化存储装置进行检索以获取相应的数据,并将该数据发送给应该用数据的程序,造成程序等待时间长。
发明内容
为了解决现有技术中对队列进行操作时操作时延大的问题,本发明实施例提出了一种队列的数据处理方法和系统。所述技术方案如下:
本发明实施例提出了一种队列的数据处理方法,包括:
设置用于存储队列的持久化存储装置,以及用于存储队列中预设数量队头数据的缓存;
读取所述缓存中数据的数量,当所述缓存中的数据数量低于预设数量时,则按所述队列中的顺序将所述持久化存储装置中的数据存储到缓存中;
当接收到对该队列进行存储的请求时,将所请求存储的数据存储到缓存和/或持久化存储装置中,并采用异步模式返回存储成功消息;
具体为:
当接收到请求存储队列中的数据时,先将该数据进行索引化,以生成该数据的索引ID;同时,采用异步模式直接返回存储成功消息;
读取所述缓存以判断若该队列全部位于缓存中时,是否缓存未满;如果是,则将该数据存储到所述缓存中;如果否,建立一持久化任务,并将所述持久化任务加入到持久化任务队列中,并触发并启动存储线程;
所述存储线程包括:
判断所述持久化任务队列中是否有任务,如果是,则读取所述持久化任务,并将所述持久化任务对应的数据存储到所述持久化存储装置中。
作为上述技术方案的优选,所述方法还包括:
当接收到读取所述队列中数据的请求时,读取所述队列中的第一个数据;
具体为:
当接收到读取所述队列中数据的请求时,读取所述缓存以确定所述缓存中是否有数据,如果有数据,则将缓冲中的数据按照队列的顺序,读取队列中的第一个数据;如果没有数据,则将所述持久化存储设备中的数据按照队列的顺序,读取队列中的第一个数据。
作为上述技术方案的优选,所述将所述持久化存储设备中的数据按照队列的顺序,读取队列中的第一个数据包括:
将所述持久化存储设备中的数据按照队列的顺序,读取队列中的第一个数据;并将队列中该第一个数据之后的预设数量的数据存储到所述缓存中。
作为上述技术方案的优选,所述方法还包括:
将所述第一个数据从缓存和/或持久化存储装置中删除。
本发明实施例还提出了一种队列的数据处理系统,包括:
数据库模块,所述数据库模块包括用于存储队列中数据的持久化存储装置,以及用于存储队列中预设数量队头数据的缓存;
控制模块,用于读取所述缓存中数据的数量,当所述缓存中的数据数量低于预设数量时,则按所述队列中的顺序将所述持久化存储装置中的数据存储到缓存中;
存储模块,用于当接收到对该队列进行存储的请求时,将所请求存储的数据存储到缓存和/或持久化存储装置中,并采用异步模式返回存储成功消息;
具体为:
索引单元,用于当接收到请求存储队列中的数据时,先将该数据进行索引化,以生成该数据的索引ID;同时,采用异步模式直接返回存储成功消息;
数据存储单元,用于读取所述缓存以判断若该队列全部位于缓存中时,是否缓存未满;如果是,则将该数据存储到所述缓存中;如果否,建立一持久化任务,并将所述持久化任务加入到持久化任务队列中,并触发并启动存储线程;
所述存储线程包括:
判断所述持久化任务队列中是否有任务,如果是,则读取所述持久化任务,并将所述持久化任务对应的数据存储到所述持久化存储装置中。
作为上述技术方案的优选,所述系统还包括:
读取模块,用于当接收到读取所述队列中数据的请求时,读取所述队列中的第一个数据;
所述读取模块包括:
判断单元,当接收到读取所述队列中数据的请求时,读取所述缓存以确定所述缓存中是否有数据;
缓存读取单元,用于当所述缓存中有数据时,将缓冲中的数据按照队列的顺序,读取队列中的第一个数据;
持久化存储设备读取单元,用于当所述缓存中没有数据时,将所述持久化存储设备中的数据按照队列的顺序,读取队列中的第一个数据。
作为上述技术方案的优选,所述持久化存储设备读取单元包括:
第一读取子单元,用于将所述持久化存储设备中的数据按照队列的顺序,读取队列中的第一个数据;
第二读取子单元,用于将队列中该第一个数据之后的预设数量的数据存储到所述缓存中。
作为上述技术方案的优选,所述系统还包括:
删除模块,用于将所述第一个数据从缓存和/或持久化存储装置中删除。
本发明实施例提供的技术方案的有益效果是:本发明实施例中,可以通过缓存来将队头的一个或多个数据进行缓存,这样可以预先从持久化存储装置中提取要出队列的数据,以提高数据读取时的效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中使用的附图作一简单地介绍,显而易见地,下面所列附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明第一实施例的流程图;
图2为本发明第二实施例的流程图;
图3为本发明第三实施例的结构示意图;
图4为本发明第四实施例的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例的设计思路是:通过缓存来预提取队列中队头的一个或多个数据,以提高数据读取的效率。进一步的,在数据存储、读取时都采用异步队列,即在存储、读取数据的同时就返回消息而无需进行等待。
实施例1
本发明第一实施例提出了一种队列的数据处理方法,其流程如图1所示,包括:
步骤101、设置用于存储队列的持久化存储装置,以及用于存储队列中预设数量队头数据的缓存;
步骤102、读取所述缓存中数据的数量,当所述缓存中的数据数量低于预设数量时,则按所述队列中的顺序将所述持久化存储装置中的数据存储到缓存中。
本发明实施例中,可以通过缓存来将队头的一个或多个数据进行缓存,这样可以预先从持久化存储装置中提取要出队列的数据,以提高数据读取时的效率。同时,这种方法相比较采用纯缓存来存储队列的方式可以降低成本,且还能相比现有技术中的采用持久化设备中的持久化存储装置存储的方式提高存取效率。其中,该持久化存储装置可以为设置在硬盘等存储介质中的数据库。
实施例2
本发明第二实施例是在前述的第一实施例的基础上改进而来,其流程如图2所示,包括:
步骤201、设置用于存储队列的持久化存储装置,以及用于存储队列中预设数量队头数据的缓存;
步骤202、读取所述缓存中数据的数量,当所述缓存中的数据数量低于预设数量时,则按所述队列中的顺序将所述持久化存储装置中的数据存储到缓存中。
在本发明实施例中,读取队列中的数据时,所述方法可以还包括:
步骤203、当接收到读取所述队列中数据的请求时,读取所述队列中的第一个数据。
由于不同的系统对于数据的读取频率不同,因此有可能出现还未来得及将数据补入缓存中,缓存中的数据就已经被全部被消费掉了。
因此在实现本发明实施例的时候,步骤203可以具体为:
步骤2031、当接收到读取所述队列中数据的请求时,读取所述缓存以确定所述缓存中是否有数据,当接收到读取所述队列中数据的请求时,读取所述缓存以确定所述缓存中是否有数据,如果有数据,则将缓冲中的数据按照队列的顺序,读取队列中的第一个数据;如果没有数据,则跳转到步骤2032;
步骤2032、将所述持久化存储设备中的数据按照队列的顺序,读取队列中的第一个数据。
当出现缓存中的所有数据都已经被消费掉的情况时,本发明实施例中可以采用异步抓取线程来将数据补入缓存中。即上述步骤2032中,当从所述持久化存储装置中读取该数据时,触发异步抓取线程从持久化存储装置中提取数据。即,步骤2032可以具体为:
步骤2032a、判断所述持久化存储装置中所述判断是否有在队列中但未存入缓存的数据,如果有则跳转到步骤2032b;如果否,则步骤结束;
步骤2032b、将所述持久化存储设备中的数据按照队列的顺序,读取队列中的第一个数据;并将队列中该第一个数据之后的预设数量的数据存储到所述缓存中。
这样可以在数据读取时将数据补入到缓存中,以提高数据读取效率。
进一步的,在数据被消费掉后,需要将该数据删除。即所述方法还包括:
步骤204、将所述数据从缓存和/或持久化存储装置中删除。
在具体实现本发明实施例的时候,步骤204可以具体为:
步骤2041、当接收到删除数据的请求时,将所述数据的索引ID删除,并根据该索引ID生成删除数据任务,将该删除数据任务加入到删除数据任务队列DelWroksQueue;
步骤2042、删除线程读取所述删除数据任务队列DelWroksQueue,并根据所述删除数据任务队列DelWroksQueue中的删除数据任务对缓存和/或持久化存储装置中的相应数据进行删除。
其中,删除线程包括:
步骤2042a、判断预设的计数器是否溢出,如果是则步骤结束;如果否则读取所述删除数据任务队列DelWroksQueue,以判断是否有删除数据任务;
步骤2042b、读取所述删除数据任务队列DelWroksQueue中的删除数据任务,并根据所述删除数据任务中的索引ID确定需要删除的数据;
步骤2042c、读取所述缓存和/或持久化存储装置,以将该数据从缓存和/或持久化存储装置中删除。
这是由于该数据可能存储在缓存中或是持久化存储装置中。同时,本发明实施例中并不排除为了提高数据的可靠性,将数据同时存储在缓存中和持久化存储装置中;即:既可以在当将数据从持久化存储装置读取到缓存中时就从持久化存储装置中删除该数据,这样在消费掉该数据后对该数据进行删除时,只需要删除缓存中的数据即可;也可以同时保留在持久化存储装置和缓存中,这样在删除时需要同时将缓存和持久化存储装置中的数据删除。
进一步的,还可以通过以下方法进一步提高数据存储到队列时的效率,即所述方法还包括:
步骤205、当接收到对该队列进行存储的请求时,将所请求存储的数据存储到缓存和/或持久化存储装置中,并采用异步模式返回存储成功消息。
这样在对数据进行存储的同时就返回存储成功消息,以加快存储时的进程。在具体实现本发明实施例的时候,步骤205可以具体为:
步骤2051、当接收到请求存储到队列中的数据时,先将该数据进行索引化,以生成该数据的索引ID;同时,采用异步模式直接返回存储成功消息;
步骤2052、读取所述缓存以判断该队列是否全部位于缓存中,且缓存未满;如果是,则将该数据存储到所述缓存中;如果否,则跳转到步骤2053;
步骤2053、建立一持久化任务,并将该持久化任务加入到持久化任务队列AddWorksQueue中,并触发并启动存储线程。
其中,步骤2053中所述的存储线程包括:
步骤2053a、判断持久化任务队列中是否有任务,如果是则跳转到步骤2053b,如果否则跳转到步骤2053c;
步骤2053b、读取所述持久化任务,并将所述持久化任务对应的数据存储到持久化存储装置中,返回步骤2053a;
步骤2053c、判断预设的定时器是否溢出,如果是则步骤结束,否则返回步骤2053a。
实施例3
本发明第一实施例提出了一种队列的数据处理方法,其结构如图3所示,包括:
数据库模块1,所述数据库模块1包括用于存储队列中数据的持久化存储装置11,以及用于存储队列中预设数量队头数据的缓存12;
控制模块2,用于读取所述缓存12中数据的数量,当所述缓存12中的数据数量低于预设数量时,则按所述队列中的顺序将所述持久化存储装置11中的数据存储到缓存12中。
本发明实施例中,可以通过缓存来将队头的一个或多个数据进行缓存,这样可以预先从持久化存储装置中提取要出队列的数据,以提高数据读取时的效率。同时,这种方法相比较采用纯缓存来存储队列的方式可以降低成本,且还能相比现有技术中的采用持久化设备中的持久化存储装置存储的方式提高存取效率。其中,该持久化存储装置可以为设置在硬盘等存储介质中的数据库。
实施例4
本发明第四实施例是在前述的第三实施例的基础上改进而来,其结构如图4所示,包括:
数据库模块1,所述数据库模块1包括用于存储队列中数据的持久化存储装置11,以及用于存储队列中预设数量队头数据的缓存12;
控制模块2,用于读取所述缓存12中数据的数量,当所述缓存12中的数据数量低于预设数量时,则按所述队列中的顺序将所述持久化存储装置11中的数据存储到缓存12中。
在本发明实施例中,读取队列中的数据时,所述系统还包括:
读取模块3,用于当接收到读取所述队列中数据的请求时,读取所述队列中的第一个数据。
由于不同的系统对于数据的读取频率不同,因此有可能出现还未来得及将数据补入缓存中,缓存中的数据就已经被全部被消费掉了。
因此在实现本发明实施例的时候,读取模块3可以具体为:
所述读取模块3包括:
判断单元31,当接收到读取所述队列中数据的请求时,读取所述缓存以确定所述缓存中是否有数据;
缓存读取单元32,用于当所述缓存中有数据时,将缓冲中的数据按照队列的顺序,读取队列中的第一个数据;
持久化存储设备读取单元33,用于当所述缓存中没有数据时,将所述持久化存储设备中的数据按照队列的顺序,读取队列中的第一个数据。
当出现缓存中的所有数据都已经被消费掉的情况时,本发明实施例中可以采用异步抓取线程来将数据补入缓存中。即持久化存储设备读取单元33中,当从所述持久化存储装置中读取该数据时,触发异步抓取线程从持久化存储装置中提取数据。即,持久化存储设备读取单元33的工作流程如下:
步骤301、判断所述持久化存储装置中所述判断是否有在队列中但未存入缓存的数据,如果有则跳转到步骤302;如果否,则步骤结束;
步骤302、将所述持久化存储设备中的数据按照队列的顺序,读取队列中的第一个数据;并将队列中该第一个数据之后的预设数量的数据存储到所述缓存中。
这样可以在数据读取时将数据补入到缓存中,以提高数据读取效率。
进一步的,在数据被消费掉后,需要将该数据删除。即所述系统还包括:
删除模块4,用于将所述第一个数据从缓存和/或持久化存储装置中删除。
在具体实现本发明实施例的时候,删除模块4可以具体为:
索引删除单元41、用于当接收到删除数据的请求时,将所述数据的索引ID删除,并根据该索引ID生成删除数据任务,将该删除数据任务加入到删除数据任务队列DelWroksQueue;
数据删除单元42,用于通过删除线程读取所述删除数据任务队列DelWroksQueue,并根据所述删除数据任务队列DelWroksQueue中的删除数据任务对缓存和/或持久化存储装置中的相应数据进行删除。
其中,删除线程的工作流程可以如下所述,包括:
步骤401、判断预设的计数器是否溢出,如果是则步骤结束;如果否则读取所述删除数据任务队列DelWroksQueue,以判断是否有删除数据任务;
步骤402、读取所述删除数据任务队列DelWroksQueue中的删除数据任务,并根据所述删除数据任务中的索引ID确定需要删除的数据;
步骤403、读取所述缓存和/或持久化存储装置,以将该数据
进一步的,还可以通过以下方法进一步提高数据存储到队列时的效率,即所述系统还包括:
存储模块5,用于当接收到对该队列进行存储的请求时,将所请求存储的数据存储到缓存和/或持久化存储装置中,并采用异步模式返回存储成功消息。
这样在对数据进行存储的同时就返回存储成功消息,以加快存储时的进程。在具体实现本发明实施例的时候,存储模块5可以包括:
索引单元51,用于当接收到请求存储到队列中的数据时,先将该数据进行索引化,以生成该数据的索引ID;同时,采用异步模式直接返回存储成功消息;
数据存储单元52,用于读取所述缓存以判断该队列是否全部位于缓存中,且缓存未满;如果是,则将该数据存储到所述缓存中;如果否,则直接将该数据存储到所述持久化存储装置中。
其中,数据存储单元在向所述持久化存储装置存储数据时,可以通过存储线程完成。其中,所述的存储线程包括:
步骤501、判断持久化任务队列中是否有任务,如果是则跳转到步骤502,如果否则跳转到步骤503;
步骤502、读取所述持久化任务,并将所述持久化任务对应的数据存储到持久化存储装置中,返回步骤501;
步骤503、判断预设的定时器是否溢出,如果是则步骤结束,否则返回步骤501。
在本发明上述实施例中,持久化存储装置可以为硬盘、磁带等非易失性存储介质。
本发明实施例第三和第四实施例的系统,与前述的第一和第二实施例的方法构思和原理相同,因此在第三和第四实施例中对与第一和第二实施例中相同的部分不再赘述。
本发明实施例所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,网站,或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。