数据读取方法、装置和系统转让专利

申请号 : CN201010178170.0

文献号 : CN102253810B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张黎明

申请人 : 深圳市世纪光速信息技术有限公司

摘要 :

本发明公开了数据读取方法、装置和系统。其中的数据读取方法包括:接收数据读取请求;在确定缓冲区中没有存储所述数据读取请求所请求的数据的情况下,判断针对所述数据是否正在执行数据读取操作;如果判断出没有正在执行数据读取操作,则触发从磁盘中读取数据操作,否则,不再触发从磁盘中读取数据操作。上述技术方案可以减少从磁盘读取数据的次数,从而减轻了数据读取负担,提高了数据读取性能。

权利要求 :

1.一种数据读取方法,其特征在于,包括:

接收数据读取请求;

在确定缓冲区中没有存储所述数据读取请求所请求的数据的情况下,根据预先存储的信息判断针对所述数据是否正在执行数据读取操作;

如果判断出没有正在执行数据读取操作,则触发从磁盘中读取数据操作,否则,不再触发从磁盘中读取数据操作。

2.如权利要求1所述的方法,其特征在于,所述确定缓冲区中没有存储所述数据读取请求所请求的数据包括:从所述数据读取请求中获取预定表索引信息,并利用所述索引信息在预定表中查找;

如果查找到匹配表项且该表项中的数据标志不为读取请求完成,或者没有查找到匹配表项,则确定缓冲区中没有存储所述数据,否则,确定缓冲区中存储有所述数据。

3.如权利要求2所述的方法,其特征在于,如果没有查找到匹配表项,所述方法还包括:在所述预定表中为所述数据读取请求建立表项,将所述建立表项中的数据标志设置为非读取请求完成;所述建立表项中的请求队列为空,所述请求队列用于存储针对所述数据的历史数据读取请求。

4.如权利要求2所述的方法,其特征在于,所述判断针对所述数据是否正在执行数据读取操作包括:判断所述数据读取请求匹配表项中的请求队列是否为空,所述请求队列为空表示没有正在执行数据读取操作,否则,表示正在执行数据读取操作。

5.如权利要求2或3或4所述的方法,其特征在于,在判断针对所述数据是否正在执行数据读取操作之后,该方法还包括:将所述接收的数据读取请求添加在所述数据读取请求匹配表项的请求队列中。

6.一种数据读取装置,其特征在于,所述装置包括:

接收模块,用于接收数据读取请求;

控制模块,用于在确定缓冲区中没有存储所述数据读取请求所请求的数据的情况下,根据预先存储的信息判断针对所述数据是否正在执行数据读取操作;如果判断出没有正在执行数据读取操作,则触发读磁盘模块从磁盘中读取数据操作,否则,不触发读磁盘模块;

读磁盘模块,用于根据控制模块的触发执行从磁盘中读取数据的操作。

7.如权利要求6所述的装置,其特征在于,所述控制模块包括:存储子模块,用于存储预定表;

判断子模块,用于从所述数据读取请求中获取预定表索引信息,并利用所述索引信息在所述存储子模块存储的预定表中查找;如果查找到匹配表项且该表项中包含的数据标志不为读取请求完成,或者没有查找到匹配表项,则确定缓冲区中没有存储所述数据,否则,确定缓冲区中存储有所述数据;

控制子模块,用于在判断子模块判断出缓冲区中没有存储所述数据的情况下,判断针对所述数据是否正在执行数据读取操作;如果判断出没有正在执行数据读取操作,则触发读磁盘模块从磁盘中读取数据操作,否则,不触发读磁盘模块。

8.如权利要求7所述的装置,其特征在于,所述控制模块还包括:建立子模块,用于在所述判断子模块没有查找到匹配表项时,在所述存储子模块存储的预定表中为所述数据读取请求建立表项,将所述建立表项中的数据标志设置为非读取请求完成;所述建立表项中的请求队列为空。

9.如权利要求7或8所述的装置,其特征在于,所述控制模块还包括:队列子模块,用于在所述控制子模块判断针对所述数据是否正在执行数据读取操作后,将所述接收模块接收的数据读取请求添加在所述数据读取请求对应表项的请求队列中。

10.一种数据读取系统,其特征在于,包括:

数据读取装置,用于接收数据读取请求,在确定缓冲区中没有存储所述数据读取请求所请求的数据的情况下,根据预先存储的信息判断针对所述数据是否正在执行数据读取操作,如果判断出没有正在执行数据读取操作,则触发从磁盘中读取数据操作,否则,不再触发从磁盘中读取数据操作;

磁盘,用于存储数据,并根据所述数据读取装置的从磁盘中读取数据操作向数据读取装置返回对应的数据。

说明书 :

数据读取方法、装置和系统

技术领域

[0001] 本发明涉及网络通讯技术领域,具体涉及数据读取技术。

背景技术

[0002] 现有的数据读取方式从数据终端获取数据方式的角度来看可以分成两种,即同步读取方式和异步读取方式。
[0003] 同步读取方法具体包括:数据获取终端发送同步读磁盘请求,并等待读取缓冲区中的数据,数据读取子系统接收该同步读磁盘请求,并检查缓冲区中是否存储有该同步读磁盘请求对应的数据,如果缓冲区中存储有同步读磁盘请求对应的数据,则数据读取子系统向数据获取终端发出同步读数据完成通知,使数据获取终端读取缓冲区中的数据;如果缓冲区中没有存储同步读磁盘请求对应的数据,则数据读取子系统触发操作系统进行读磁盘操作,由操作系统从磁盘中读取对应数据,将读取的数据存储在缓冲区中,并向数据读取子系统发出读数据完成通知,数据读取子系统向数据获取终端发出同步读数据完成通知,使数据获取终端读取缓冲区中的数据。
[0004] 异步读取方法具体包括:数据获取终端发送异步读磁盘请求,并且不等待读取缓冲区中的数据,数据读取子系统接收该异步读磁盘请求,并检查缓冲区中是否存储有该异步读磁盘请求对应的数据,如果缓冲区中存储有异步读磁盘请求对应的数据,则数据读取子系统发出异步读数据完成通知,使数据获取终端再次发起异步读磁盘请求,以获取缓冲区中的数据;如果缓冲区中没有存储异步读磁盘请求对应的数据,则数据读取子系统触发操作系统进行读磁盘操作,由操作系统从磁盘中读取对应数据,将读取的数据存储在缓冲区中,并向数据读取子系统发出读数据完成通知,数据读取子系统向数据获取终端发出异步读数据完成通知,使数据获取终端再次发起异步读磁盘请求,以获取缓冲区中的数据。
[0005] 在实现本发明的过程中,发明人发现:无论是同步读取方法还是异步读取方法,从数据读取子系统接收到读磁盘请求(包括同步读磁盘请求或者异步读磁盘请求)到操作系统将从磁盘中读取的数据存入缓冲区需要一定的时间,如果在这段时间内数据读取子系统接收到针对相同数据的读磁盘请求(包括同步读磁盘请求或者异步读磁盘请求),则由于此时缓冲区中没有对应的数据,因此,数据读取子系统仍然会触发操作系统进行读磁盘操作。由此可知,现有的数据读取方法会造成操作系统针对同一数据进行了不必要的磁盘读取操作,最终导致操作系统负担重,数据读取效率低。

发明内容

[0006] 本发明实施方式提供的数据读取方法、装置和系统,可减少磁盘读取次数,缩短从磁盘中读取数据的时间,从而减轻了数据读取负担,提高了数据读取性能。
[0007] 本发明实施方式提供的数据读取方法,包括:
[0008] 接收数据读取请求;
[0009] 在确定缓冲区中没有存储所述数据读取请求所请求的数据的情况下,判断针对所述数据是否正在执行数据读取操作;
[0010] 如果判断出没有正在执行数据读取操作,则触发从磁盘中读取数据操作,否则,不再触发从磁盘中读取数据操作。
[0011] 本发明实施方式提供的数据读取装置,包括:
[0012] 接收模块,用于接收数据读取请求;
[0013] 控制模块,用于在确定缓冲区中没有存储所述数据读取请求所请求的数据的情况下,判断针对所述数据是否正在执行数据读取操作;如果判断出没有正在执行数据读取操作,则触发读磁盘模块从磁盘中读取数据操作,否则,不触发读磁盘模块;
[0014] 读磁盘模块,用于根据控制模块的触发执行从磁盘中读取数据的操作。
[0015] 本发明实施方式提供的数据读取系统,包括:
[0016] 数据读取装置,用于接收数据读取请求,在确定缓冲区中没有存储所述数据读取请求所请求的数据的情况下,判断针对所述数据是否正在执行数据读取操作,如果判断出没有正在执行数据读取操作,则触发从磁盘中读取数据操作,否则,不再触发从磁盘中读取数据操作;
[0017] 磁盘,用于存储数据,并根据所述数据读取装置的从磁盘中读取数据操作向数据读取装置返回对应的数据。
[0018] 通过上述技术方案的描述可知,通过在缓冲区中没有存储所述数据读取请求所请求的数据的情况下,判断针对该数据是否正在执行数据读取操作,在判断出正在执行数据读取操作,不再触发从磁盘中读取数据操作,从而减少了磁盘读取次数,缩短了从磁盘中读取数据的时间,最终减轻了数据读取负担,提高了数据读取性能。

附图说明

[0019] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020] 图1是本发明实施例一的数据读取方法流程图;
[0021] 图2A是本发明实施例二的快表结构示意图;
[0022] 图2B是本发明实施例二的数据读取方法流程图;
[0023] 图2C是本发明实施例二的快表维护方法流程图;
[0024] 图3是本发明实施例三的数据读取装置示意图;
[0025] 图4是本发明实施例四的基于快表的异步数据读取装置示意图;
[0026] 图5是本发明实施例五的数据读取系统示意图。

具体实施方式

[0027] 下面通过实施例对本发明的具体实现过程进行例举说明。显然,下面所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0028] 实施例一、数据读取方法。该方法的流程如附图1所示。
[0029] 在图1中,S100、接收数据读取请求。该数据读取请求用于数据获取终端请求获取磁盘中存储的对应数据。数据获取终端可以为计算机、或者移动终端等现有的多种形式,数据读取请求可以采用现有的多种协议,本实施例不限制为数据获取终端的具体表现形式、数据读取请求采用的协议以及具体包括的内容等。另外,上述数据获取终端可以是采用同步读取方式的数据获取终端,也可以是采用异步读取方式的数据获取终端。
[0030] S110、在确定缓冲区中没有存储该数据读取请求所请求的数据的情况下,判断针对该数据是否正在执行数据读取操作,如果判断出没有正在执行数据读取操作,则到S111,否则,到S112。上述数据读取请求所请求的数据即数据读取请求对应的数据。上述缓冲区中没有存储该数据读取请求所请求的数据可以包括两种情况:数据读取请求所请求的数据正在被填充到缓冲区中、以及数据读取请求所请求的数据中的任何内容均没有被填充到缓冲区中。也就是说,缓冲区中存储有该数据读取请求所请求的数据可以为:数据读取请求所请求的数据已经全部存储在缓冲区中。
[0031] 在S110中,可以根据现有的方法来判断缓冲区中是否存储有该数据读取请求对应的数据,也可以根据本实施例预先设置的预定表中包含的信息来判断缓冲区中是否存储有该数据读取请求对应的数据。
[0032] 根据现有的方法来判断缓冲区中是否存储有该数据读取请求对应的数据的具体实现过程在此不进行详细说明。
[0033] 根据预定表中包含的信息来判断缓冲区中是否存储有该数据读取请求对应的数据的一个具体例子为:预定表中包含有数据标志字段,数据标志字段可以包括两种取值,一种取值表示读取请求完成,即针对数据读取请求对应的数据已经从磁盘中读取并存储在缓冲区中;另一种取值表示非读取请求完成,即针对数据读取请求对应的数据并没有存储在缓冲区中。从数据读取请求中获取预定表索引信息,利用该索引信息在预定表中查找,如果在预定表中查找到匹配表项,而且该查找到的匹配表项中的数据标志为读取请求完成,则判断出缓冲区中存储有该数据读取请求对应的数据;如果在预定表中查找到匹配表项,而且该查找到的表现中的数据标志为非读取请求完成,或者没有在预定表中查找到匹配表项,则判断出缓冲区中没有存储该数据读取请求对应的数据。
[0034] 在上述具体例子中,索引信息的一个具体例子,索引信息包括:文件指针、文件偏移量和数据长度等。索引信息也可以根据实际需要设置为其它形式,本实施例中不限制索引信息具体包括的内容。另外,在预定表中没有查找到索引信息匹配表项时,本实施例可以在预定表中为S100中接收到的数据读取请求建立表项,并将建立表项中的数据标志设置为非读取请求完成。
[0035] 在S110中,在判断针对该数据读取请求对应的数据是否正在执行数据读取操作时,需要根据预先存储的信息来判断,该预先存储的信息包括:根据历史数据读取请求而存储的信息,例如,预先存储的信息为历史数据读取请求。该预先存储的信息可以称为正在执行数据读取操作的信息,该预先存储的信息可以存储在预定表中,一个具体的例子:预定表中包括请求队列,该请求队列用于存储历史数据读取请求,请求队列为空时,表示针对S100接收到的数据读取请求对应的数据没有正在执行磁盘数据读取操作,即在处理S 100接收到的数据读取请求时,并不存在针对该数据读取请求对应的数据的其它数据读取请求,而且,也没有正在从磁盘中读取针对该数据读取请求对应的数据;请求队列不为空时,表示针对S100接收到的数据读取请求对应的数据正在执行磁盘数据读取操作,即在处理S100接收到的数据读取请求时,已经存在针对该数据读取请求对应的数据的其它数据读取请求,而且,正在从磁盘中读取该数据读取请求对应的数据。
[0036] 在该预先存储的信息存储在预定表中的情况下,在利用索引信息在预定表中查找时,如果没有查找到匹配表项,则在上述建立表项时,还需要将建立表项中的请求队列设置为空。
[0037] 在该预先存储的信息存储在预定表中的情况下,判断针对该数据读取请求对应的数据是否正在执行数据读取操作的一个具体例子:在上述利用索引信息在预定表中查找到匹配表项中的请求队列为空时,则判断出针对该数据读取请求对应的数据没有正在执行数据读取操作,如果查找到的匹配表项中的请求队列不为空,则判断出针对该数据读取请求对应的数据正在执行数据读取操作。如果没有查找到匹配表项,则可以直接判断出针对该数据读取请求对应的数据没有正在执行数据读取操作,也可以对新建表项的请求队列是否为空进行判断,以确定针对该数据读取请求对应的数据是否正在执行数据读取操作。
[0038] 在判断针对数据读取请求对应的数据是否正在执行数据读取操作之后,还可以将S100中接收到的数据读取请求作为历史数据读取请求添加在该数据读取请求对应表项的请求队列中。这里的数据读取请求对应表项可以为上述利用索引查找到的匹配表项,也可以为针对该数据读取请求新建的表项。
[0039] 需要特别说明的是,上述预先存储的信息也可以以其它方式存储,本实施例不限制预先存储的信息的具体存储方式。另外,上述预定表中还可以包括缓冲区地址字段,该缓冲区地址字段可以表示出数据读取请求对应的数据在缓冲区中的存储位置。缓冲区地址字段中可以存储缓冲区的指针等。
[0040] S111、触发从磁盘中读取数据操作。本实施例可以采用现有的方式来实现触发从磁盘中读取数据操作。一个具体的例子:在S100、S110和S111由数据读取子系统来执行时,数据读取子系统通知操作系统(或称内核或称磁盘子系统等)进行读磁盘操作。另一个具体的例子:在S100、S110和S111由操作系统来执行时,操作系统确定执行从磁盘中读取数据的命令。本发明实施例不限制触发从磁盘中读取数据操作的具体实现方式。
[0041] S112、不再触发从磁盘中读取数据操作。一个具体的例子:在S100、S110和S112由数据读取子系统来执行时,数据读取子系统不再通知操作系统进行读磁盘操作。另一个具体的例子:在S100、S110和S112由操作系统来执行时,操作系统确定不执行从磁盘中读取数据的命令。本实施例不限制不再触发从磁盘中读取数据操作的具体实现方式。
[0042] 不论是执行了触发从磁盘中读取数据操作还是不再触发从磁盘中读取数据操作,在将从磁盘中读取的数据存储在缓冲区中时,应将数据读取请求对应表项中的数据标志设置为读取请求完成,向数据读取请求对应表项包含的请求队列中请求的发送方发出读通知(即根据数据读取请求对应表项包含的请求队列和缓冲区地址发出读通知),使请求队列中各数据读取请求的发送方(即数据获取终端)根据缓冲区地址从缓冲区中获取数据,并将数据读取请求对应表项包含的请求队列清空。
[0043] 从磁盘中读取的数据可以为索引数据、倒排数据、或者摘要数据等等。本实施例不限制从磁盘中读取的数据的具体表现形式。数据读取请求对应的表项可以为上述利用索引查找到的匹配表项,也可以为针对数据读取请求新建立的表项。在发送读通知后应清空数据读取请求对应的表项中的请求队列。
[0044] 另外,如果在预定时间间隔内没有从磁盘中成功读取出数据,则可以根据数据读取请求对应表项包含的请求队列发出超时通知,并将数据读取请求对应表项包含的请求队列清空。接收到超时通知的数据获取终端根据该超时通知可以获知本次磁盘数据读取失败。
[0045] 从上述实施例一的描述可以看出,本实施例通过在缓冲区中没有存储接收到的数据读取请求所请求的数据的情况下,判断针对所请求的数据是否正在执行数据读取操作,在判断出正在执行数据读取操作时,不再触发从磁盘中读取数据操作,从而减少了磁盘读取次数,缩短了从磁盘中读取数据的时间,最终减轻了数据读取负担,提高了数据读取性能。
[0046] 实施例二、数据读取方法。下面结合附图2A、2B和2C、以采用包含请求队列、数据标志和缓冲区指针的预定表(在下述实施例二中称为快表)来实现数据读取为例对本实施例的方法进行说明。
[0047] 本实施例中的快表结构如附图2A所示。图2A中的快表包括:请求队列、数据标志和缓冲区指针。请求队列用于存储历史数据读取请求;数据标志用于表示历史数据读取请求对应的数据处于存储在缓冲区的状态,还是处于未存储在缓冲区的状态,例如数据标志有两种取值,一种取值表示读取请求完成(即历史数据读取请求对应的数据处于存储在缓冲区的状态),另一种取值表示提交读取请求(即历史数据读取请求对应的数据处于未存储在缓冲区的状态);缓冲区指针用于指示请求队列中存储的历史数据读取请求对应的数据在缓冲区中的起始位置。
[0048] 附图2B示出了数据读取方法流程图。
[0049] 图2B中,S200、开始本实施例的数据读取方法。
[0050] S210、接收数据读取请求。
[0051] S220、从数据读取请求中获取快表索引信息,并利用该快表索引信息在快表中查找匹配的表项,即查找是否存在与本次请求的数据相同的历史数据读取请求。如果查找到匹配的表项,到S230,否则,到S221。
[0052] S230、检查数据标志,即判断匹配表项中的数据标志,如果数据标志为读取请求完成,则到S240,否则,到S222。
[0053] S240、根据匹配表项中的缓冲区指针从缓冲中读取数据,到S250。
[0054] S250、本次数据读取过程结束。
[0055] S221、针对接收到的数据读取请求在快表中新建表项,将该新建表项中的数据标志设置为提交读取请求,到S222。新建表项中的请求队列应该为空。
[0056] S222、判断接收到的数据读取请求匹配表项中的请求队列是否为空,如果为空,则到S223,如果不为空,则到S224。S222中的数据读取请求匹配表项可以是根据索引信息查找到的匹配表项,也可以是上述新建表项。
[0057] S223、发起读磁盘请求,如发起异步读磁盘请求。到S224。
[0058] S224、将接收到的数据读取请求添加到匹配表项的请求队列中。到S250。
[0059] 附图2C示出了数据读取子系统进行快表维护的方法流程图。
[0060] 图2C中,S200、开始本实施例的快表维护方法。
[0061] S210、数据读取子系统接收来自操作系统的通知。
[0062] S220、数据读取子系统判断该通知的类型,如果该通知为读磁盘完成通知,则到S240,如果该通知为超时通知,则到S230。
[0063] S230、根据快表中该超时通知的匹配表项的请求队列中存储的数据读取请求向各数据读取请求的发送方(即数据获取终端)发送读取失败信息,并清空请求队列中的数据读取请求。到S250。上述超时通知的匹配表项即超时通知对应的数据读取请求的匹配表项。
[0064] S240、根据快表中该读磁盘完成通知的匹配表项的请求队列中存储的数据读取请求向各数据读取请求的发送方(即数据获取终端)发送读数据完成通知(即上述实施例一中的读通知),如异步读数据完成通知,并清空请求队列中的数据读取请求。到S250。上述读磁盘完成通知的匹配表项即读磁盘完成通知对应的数据读取请求的匹配表项。
[0065] S250、本次快表维护操作结束。
[0066] 从上述实施例二的描述可以看出,本实施例中的数据读取子系统通过在缓冲区中没有存储接收到的数据读取请求所请求的数据的情况下,判断针对所请求的数据是否正在执行数据读取操作,在判断出正在执行数据读取操作时,不再触发从磁盘中读取数据操作,从而减少了操作系统进行的磁盘读取次数,缩短了从磁盘中读取数据的时间,最终减轻了操作系统数据读取负担,提高了操作系统的数据读取性能。
[0067] 实施例三、数据读取装置。该装置如附图3所示。
[0068] 图3中的装置包括:接收模块300、控制模块310和读磁盘模块320。可选的,该装置还可以包括:通知接收模块330和超时检查模块340中的任一个或两个。
[0069] 接收模块300,用于接收数据读取请求。该数据读取请求用于数据获取终端请求获取磁盘中存储的对应数据。数据获取终端可以为计算机、或者移动终端等现有的多种形式,数据读取请求可以采用现有的多种协议,本实施例不限制为接收模块300接收到的数据读取请求采用的协议以及具体包括的内容等。另外,上述数据获取终端可以是采用同步读取方式的数据获取终端,也可以是采用异步读取方式的数据获取终端。
[0070] 控制模块310,用于在确定缓冲区中没有存储接收模块300接收的数据读取请求所请求的数据的情况下,判断针对该数据是否正在执行数据读取操作;如果判断出没有正在执行数据读取操作,则触发读磁盘模块从磁盘中读取数据操作,否则,不触发读磁盘模块。这里的数据读取请求所请求的数据即数据读取请求对应的数据。
[0071] 控制模块310可以根据现有的方法来判断缓冲区中是否存储有该数据读取请求对应的数据,也可以根据预先设置的预定表中包含的信息来判断缓冲区中是否存储有该数据读取请求对应的数据。
[0072] 控制模块310根据现有的方法来判断缓冲区中是否存储有该数据读取请求对应的数据的具体实现过程在此不进行详细说明。
[0073] 控制模块310根据预定表中包含的信息来判断缓冲区中是否存储有该数据读取请求对应的数据的一个具体例子为:控制模块310包括:存储子模块311、判断子模块312和控制子模块313。可选的,控制模块310还包括:建立子模块314和队列子模块315中的任一个或多个。
[0074] 存储子模块311,用于存储预定表。预定表中包含有数据标志字段,数据标志字段可以包括两种取值,一种取值表示读取请求完成,即针对数据读取请求对应的数据已经从磁盘中读取并存储在缓冲区中;另一种取值表示非读取请求完成,即针对数据读取请求对应的数据并没有存储在缓冲区中。
[0075] 判断子模块312,用于从数据读取请求中获取预定表索引信息,利用该索引信息在存储子模块311存储的预定表中查找;如果查找到匹配表项且该表项中包含的数据标志不为读取请求完成,或者没有查找到匹配表项,则确定缓冲区中没有存储上述请求的数据,否则,确定缓冲区中存储有上述请求的数据。
[0076] 判断子模块312获取的索引信息的一个具体例子:索引信息包括:文件指针、文件偏移量和数据长度等。索引信息也可以根据实际需要设置为其它形式。
[0077] 控制子模块313,用于在判断子模块312判断出缓冲区中没有存储上述所请求的数据的情况下,判断针对该数据是否正在执行数据读取操作;如果判断出没有正在执行数据读取操作,则触发读磁盘模块从磁盘中读取数据操作,否则,不触发读磁盘模块。
[0078] 控制子模块313在判断针对数据读取请求对应的数据是否正在执行数据读取操作时,需要根据预先存储的信息来判断,该预先存储的信息包括:根据历史数据读取请求而存储的信息,例如,预先存储的信息为历史数据读取请求。该预先存储的信息可以称为正在执行数据读取操作的信息,该预先存储的信息可以存储在存储子模块311的预定表中,一个具体的例子:存储子模块311中的预定表包括请求队列,该请求队列用于存储历史数据读取请求,请求队列为空时,表示针对接收模块300接收到的数据读取请求对应的数据没有正在执行磁盘数据读取操作;请求队列不为空时,表示针对接收模块300接收到的数据读取请求对应的数据正在执行磁盘数据读取操作。
[0079] 在该预先存储的信息存储在存储子模块311中的预定表中的情况下,控制子模块313判断针对该数据读取请求对应的数据是否正在执行数据读取操作的一个具体例子:控制子模块313在上述利用索引信息在预定表中查找到匹配表项中的请求队列为空时,则判断出针对该数据读取请求对应的数据没有正在执行数据读取操作,如果控制子模块313查找到的匹配表项中的请求队列不为空,则判断出针对该数据读取请求对应的数据正在执行数据读取操作。如果控制子模块313没有查找到匹配表项,则可以直接判断出针对该数据读取请求对应的数据没有正在执行数据读取操作,控制子模块313也可以对建立子模块
314新建表项的请求队列是否为空进行判断,以确定针对该数据读取请求对应的数据是否正在执行数据读取操作。
[0080] 建立子模块314,用于在判断子模块312没有查找到匹配表项时,在存储子模块311存储的预定表中为接收模块300接收的数据读取请求建立表项,将建立表项中的数据标志设置为非读取请求完成,而且,建立表项中的请求队列为空。
[0081] 队列子模块315,用于在控制子模块313判断针对上述所请求的数据是否正在执行数据读取操作后,将接收模块300接收的数据读取请求添加在存储子模块311中的数据读取请求匹配表项的请求队列中;即队列子模块315将接收模块300接收到的数据读取请求作为历史数据读取请求添加在该数据读取请求对应表项的请求队列中。
[0082] 需要特别说明的是,上述预先存储的信息也可以以其它方式存储,本实施例不限制预先存储的信息的具体存储方式。另外,上述存储子模块311中的预定表中还可以包括缓冲区地址字段,该缓冲区地址字段可以表示出数据读取请求对应的数据在缓冲区中的存储位置。缓冲区地址字段中可以存储缓冲区的指针等。还有,上述控制子模块313或者控制模块310可以采用现有的方式来实现触发或者不触发从磁盘中读取数据操作。一个具体的例子:在接收模块300和控制模块310位于数据读取子系统、且读磁盘模块320位于操作系统时,可以实现数据读取子系统通知操作系统进行读磁盘操作或者数据读取子系统不通知操作系统进行读磁盘操作。另一个具体的例子:在控制模块310和读磁盘模块320均位于操作系统时,可以实现操作系统对自身是否执行从磁盘中读取数据的命令的控制。
[0083] 读磁盘模块320,用于根据控制模块310的触发执行从磁盘中读取数据的操作。读磁盘模块320从磁盘中读取的数据可以为索引数据、倒排数据、或者摘要数据等等。本实施例不限制读磁盘模块320从磁盘中读取的数据的具体表现形式。
[0084] 通知接收模块330,用于在将从磁盘中读取的数据存储在缓冲区中时,将数据读取请求对应表项包含的数据标志设置为读取请求完成,向数据读取请求对应表项包含的请求队列中请求的发送方发出读通知(即根据数据读取请求对应表项包含的请求队列和缓冲区地址发出读通知),并将数据读取请求对应表项包含的请求队列清空。这里的读通知用于使请求队列中各数据读取请求的发送方根据缓冲区地址从缓冲区中获取数据。
[0085] 超时检查模块340,用于在检查出在预定时间间隔内读磁盘模块320没有从磁盘中成功读取出数据时,根据数据读取请求对应表项中的请求队列发出超时通知,并将数据读取请求对应表项包含的请求队列清空。接收到超时通知的数据获取终端根据该超时通知可以获知本次磁盘数据读取失败。
[0086] 从上述实施例三的描述可以看出,本实施例通过在判断模块310判断出缓冲区中没有存储接收模块300接收到的数据读取请求所请求的数据时,控制模块320判断针对所请求的数据是否正在执行数据读取操作,在判断出正在执行数据读取操作时,控制模块320不再触发从磁盘中读取数据操作,从而减少了读磁盘模块320的磁盘读取次数,缩短了读磁盘模块320从磁盘中读取数据的时间,最终减轻了读磁盘模块320的数据读取负担,提高了数据读取性能。
[0087] 实施例四、数据读取装置。下面结合附图4、以采用包含请求队列、数据标志和缓冲区指针的预定表(在下述实施例四中称为快表)来实现数据读取为例对本实施例的装置进行说明。
[0088] 本实施例中的快表结构如附图2A所示。在实施例四中不再对图2A中的快表结构进行说明。图4中的数据读取装置包括:读请求接收单元400(相当于实施例三中的接收模块300)、快查表控制单元410(相当于实施例三中的判断模块310和控制模块320)、超时检测单元420(相当于实施例三中的超时检查模块340)、通知接收单元430(相当于实施例三中的通知接收模块330)和异步读磁盘单元440(相当于实施例三中的读磁盘模块320)。
[0089] 读请求接收单元400接收数据读取请求。
[0090] 快查表控制单元410从数据读取请求中获取快表索引信息,并利用该快表索引信息在快表中查找匹配的表项,即查找是否存在与本次请求的数据相同的历史数据读取请求。
[0091] 如果快查表控制单元410查找到匹配的表项,则快查表控制单元410检查数据标志,即判断匹配表项中的数据标志,如果数据标志为读取请求完成,则快查表控制单元410将读请求接收单元400接收到的数据读取请求添加到匹配表项的请求队列中,并触发通知接收单元430,由通知接收单元430通知匹配表项的请求队列中的各请求对应的数据获取终端,使数据获取终端根据查找到的匹配表项中的缓冲区指针从缓冲中读取数据。如果快查表控制单元410确定出数据标志为非读取请求完成,则快查表控制单元410判断查找到的匹配表项中的请求队列是否为空,如果为空,则快查表控制单元410触发异步读磁盘单元440进行读磁盘操作(如快查表控制单元410向异步读磁盘单元440发送异步读磁盘请求),并将读请求接收单元400接收到的数据读取请求添加到匹配表项的请求队列中;如果不为空,则快查表控制单元410将读请求接收单元400接收到的数据读取请求添加到匹配表项的请求队列中,并且快查表控制单元410不再触发异步读磁盘单元440进行读磁盘操作。
[0092] 如果快查表控制单元410利用索引信息没有查找到匹配的表项,则快查表控制单元410针对接收到的数据读取请求在快表中新建表项,将该新建表项中的数据标志设置为提交读取请求。新建表项中的请求队列应该为空。之后,快查表控制单元410判断该表项中的请求队列是否为空,如果为空,则快查表控制单元410触发异步读磁盘单元440进行读磁盘操作(如快查表控制单元410向异步读磁盘单元440发送异步读磁盘请求),并将读请求接收单元400接收到的数据读取请求添加到匹配表项的请求队列中;如果不为空,则快查表控制单元410将读请求接收单元400接收到的数据读取请求添加到匹配表项的请求队列中,并且快查表控制单元410不再触发异步读磁盘单元440进行读磁盘操作。
[0093] 在异步读磁盘单元440将读取的数据存储在缓冲区中之后,异步读磁盘单元440向快查表控制单元410发送通知。
[0094] 在超时检测单元420检查出在预定时间间隔内异步读磁盘单元440没有从磁盘中成功读取出数据时,超时检测单元420向快查表控制单元410发送通知。
[0095] 快查表控制单元410判断该通知的类型,如果该通知为读磁盘完成通知,则快查表控制单元410将该读磁盘完成通知的匹配表项的数据标志设置为读取请求完成,并向通知接收单元430提供该读磁盘完成通知的匹配表项中的缓冲区地址和请求队列中的数据读取请求,由通知接收单元430向各数据读取请求的发送方(即数据获取终端)发送读数据完成通知,如异步读数据完成通知,通知接收单元430可以在接收到快查表控制单元410传输来的信息后,通知快查表控制单元410清空该请求队列中的数据读取请求。
[0096] 如果快查表控制单元410判断出该通知为超时通知,则快查表控制单元410向超时检测单元420提供该超时通知的匹配表项的请求队列中的数据读取请求,由超时检测单元420向各数据读取请求的发送方(即数据获取终端)发送读取失败信息,超时检测单元420可以在接收到快查表控制单元410传输来的信息后,通知快查表控制单元410清空该请求队列中的数据读取请求。
[0097] 从上述实施例四的描述可以看出,本实施例中的快查表控制单元410通过在缓冲区中没有存储接收到的数据读取请求所请求的数据的情况下,判断针对所请求的数据异步读磁盘单元440是否正在执行数据读取操作,在判断出异步读磁盘单元440正在执行数据读取操作时,不再触发异步读磁盘单元440从磁盘中读取数据操作,从而减少了异步读磁盘单元440进行的磁盘读取次数,缩短了异步读磁盘单元440从磁盘中读取数据的时间,最终减轻了异步读磁盘单元440的数据读取负担,提高了异步读磁盘单元440的数据读取性能。
[0098] 实施例五、数据读取系统。该系统如附图5所示。
[0099] 图5中的系统包括:数据读取装置500和磁盘510。虽然图5中只示出了一个数据读取装置500和一个磁盘510,但是在实际应用中,该系统可以包括多个数据读取装置500和/或多个磁盘510。
[0100] 数据读取装置500,用于接收数据读取请求,在确定缓冲区中没有存储该数据读取请求所请求的数据的情况下,判断针对该数据是否正在执行数据读取操作,如果判断出没有正在执行数据读取操作,则触发从磁盘510中读取数据操作,否则,不再触发从磁盘510中读取数据操作。数据读取装置500执行的操作、以及结构等如上述实施例一至四中的描述,在此不再重复说明。
[0101] 磁盘510,用于存储数据,并根据数据读取装置500的从磁盘中读取数据操作向数据读取装置500返回对应的数据。磁盘510中存储的数据可以包括索引数据、倒排数据和摘要数据等等。
[0102] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,所述的软件产品在可以用于执行上述的方法流程。该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
[0103] 虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,本发明的申请文件的权利要求包括这些变形和变化。