具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先对本发明实施例实现一种CACHE处理数据的方法进行说明,包括:按照数据表中数据的存储顺序访问数据,其中,所述数据表中数据的存储顺序为所述数据在磁盘中的地址顺序;当数据表中的数据为等待从磁盘读入的数据,且等待时间超过第一时间阀值时,立即从磁盘中读取对应的数据到所述等待从磁盘读入的数据的位置。
下面结合附图,对本发明的实施例进行详细描述。
方法实施例:
参见图1,该图为基于本发明方法实施例流程图。
本实施例提供的CACHE处理数据的方法,包括以下步骤:
S101:按照数据表中数据的存储顺序访问数据,其中,所述数据表中数据的存储顺序为所述数据在磁盘中的地址顺序。
S102:当数据表中的数据为等待从磁盘读入的数据,且等待时间超过第一时间阀值时,立即从磁盘中读取对应的数据到所述等待从磁盘读入的数据的位置。
需要说明的是,所述数据表是以数据的地址为索引的有序的表,其中存储数据,可以按照数据的地址递增的顺序来存储所有数据,也可以按照数据的地址递减的顺序来存储所有数据。任何以地址为索引的数据表均可以作为数据表。例如将所有的数据以单链表的形式串联起来就可以构成数据表。
本实施例提供的CACHE处理数据的方法,通过在CACHE中设置数据表,数据表按照各个数据的地址顺序来存储所有数据;即该数据表以数据的地址为索引,CACHE按照数据的存储顺序逐个访问每个数据,这样使杂乱无章的数据有序地排列起来,被有序地访问。当接收到主机发送的数据读或写请求时,CACHE可以根据所述请求中携带的数据起始地址和数据长度计算对应的地址,由所述地址从所述数据表中找到数据的位置,对所述数据中的数据进行所述读或写操作。当主机的读请求被挂的时间超过第一时间阀值时,CACHE立即从磁盘读取数据来响应主机的读请求。不论主机的请求为读请求还是写请求,CACHE均可以以地址为索引,从而迅速找到对应的数据的位置,进行相应的数据操作。本发明实施例提供的技术方案综合考虑了读写操作,对于读写操作均可以提升磁盘的吞吐量。
方法另一实施例:
该实施例对CACHE响应主机的读写请求进行详细说明。
参见图2,该图为基于本发明方法另一实施例流程图。
S201:判断主机发送的数据操作请求的类型,当数据操作请求为数据读操作时,执行S202;当数据操作请求为数据写操作时,执行S203。
数据读操作时,主机向CACHE发送读请求,数据写操作时,主机向CACHE发送写请求。
S202:判断数据读操作命中时,执行S202a;判断数据读操作未命中时,执行S202b。
S202a:根据所述请求中携带的数据起始地址和数据长度计算对应的地址,由所述地址从所述数据表中找到数据的位置,将该数据中的数据返回主机。
S202b:根据所述请求中携带的数据起始地址和数据长度计算对应的地址,由所述地址在所述数据表中构造等待从磁盘读入的数据,在第一阀值时间内执行从磁盘读数据到所述等待从磁盘读入的数据中,将游标指向所述等待从磁盘读入的数据的位置。
由于主机的读请求需要读的数据CACHE中可能有,也可能没有。如果CACHE中有,则CACHE可以立即响应主机的读请求,从数据表中找到对应的数据,从数据中读出数据,发送至主机。
但是,对于CACHE中没有的数据,CACHE不能立即响应主机的读请求,因为这部分数据CACHE需要从磁盘中来读取。CACHE首先在数据表中查找主机要读的数据的对应的数据的位置,但是这个数据可能是空的,也可能是这个数据根本不存在,CACHE将该数据的位置先占住,称这样的数据为等待从磁盘读入的数据,从磁盘读取的数据再放入该等待从磁盘读入的数据中。
由于CACHE一方面一直在逐个访问每个数据,当需要去磁盘取数据时,要中断当前访问数据的动作。但是由于磁盘的数据不会立即读取过来,因此,CACHE将主机的读请求挂在等待从磁盘读入的数据上,在预定时间内将从磁盘读取的数据发送至主机。为了保证主机的读请求不会长时间挂住,不被响应,对该读请求设置了定时器,在定时器设定的预定时间内CACHE必须响应主机的读请求。
S203:根据所述写请求中携带的数据起始地址和数据长度计算对应的地址;由所述地址从所述数据表中找到数据的位置,将需要写入的数据写入该数据中。
由于主机的写请求不影响CACHE对数据表的访问,因此,对于主机的写请求,CACHE可以立即响应,将主机发送过来的数据写入数据表相应的数据中。
对于主机的写请求可以采用回写机制,先将主机写请求中的数据内容写入CACHE中的数据表中,然后向主机返回执行成功。稍后某个适当的时候,再将数据真正写入磁盘。通过这种方式,可以极大地提高存储设备的响应速度,降低主机等待时间。
方法又一实施例:
该实施例对CACHE对数据表数据的访问进行详细说明。
参见图3,该图为基于本发明方法又一实施例流程图。
S301:按照数据表中的数据的存储顺序,逐个访问每个数据,将游标指向正在被访问的数据;判断当前访问的数据中的数据类型,如果是写入的数据,则执行S302;如果是读出的数据,则执行S303;如果是空数据,则执行S304。
S302:判断该数据没被访问的时间超过第二时间阀值,和/或没有被访问的频率超过第一频率阀值;如果是,则将该写入的数据写入磁盘,同时将所述游标指向所述数据表中的下一个数据;如果否,则跳过该数据,同时将所述游标指向所述数据表中的下一个数据。
S303:判断该数据距上次被访问的时间间隔是否超过第三时间阀值,和/或没有被访问的频率超过第二频率阀值;如果是,则将该读出的数据淘汰掉(直接删除),同时将所述游标指向所述数据表中的下一个数据;如果否,则跳过该数据,同时将所述游标指向所述数据表中的下一个数据。
S304:如果CACHE正在访问的数据为空数据,说明该数据正在等待真正的数据被读入,此时就执行读磁盘请求,将数据从磁盘中读入到该数据中。此读磁盘操作是一个异步过程,当数据被读入后,会调用之前保存的回调函数来对主机读请求进行响应,将从磁盘读来的数据返回给主机。
以上判断该数据没被访问的时间是否超过第二时间阀值或第三时间阀值,具体为:
判断该数据的时间戳与当前时间的差值是否大于预定时间长度,所述时间戳记录该数据最近被访问的时间。设置时间戳主要是将长时间没有被访问的数据淘汰掉,整合CACHE中的数据。
每个数据均设置一个时间戳,该时间戳记录该数据被最近访问的时间。数据被访问一次,该数据的时间戳更新一次。
需要说明的是,本实施例提供的数据表优选哈希HASH表。
HASH表的形成具体为:
按照每个数据的地址由HASH函数计算每个数据对应的HASH值,每个HASH值对应一个HASH表项,每个HASH表项对应一个冲突链;每个所述冲突链按照地址顺序排列;将HASH值相同的数据放入同一个所述冲突链中,形成数据表。
下面结合附图介绍本实施例采用的HASH表。
参见图4,该图为本发明实施例采用的HASH表结构图。
例如数据的地址用自然数表示:1、2、3、4、5、6等。
由数据的地址利用HASH函数计算出对应的HASH值,例如可以用X1、X2、X3、X4、X5....Xn表示。每个HASH值对应一个HASH表项,如图中的每一横行。每个HASH表项对应一个冲突链,例如第一个HASH表项为X1,对应的冲突链为1、4和6。该冲突链包括地址为1、4和6的三个数据。冲突链中的数据按照数据的地址递增或递减有序排列。
例如第三个HASH表项为X3,对应的冲突链为2和5。该冲突链包括地址为2和5的两个数据。
HASH表通过HASH算法,可以将所有的数据划分到不同的冲突链上。由于可能存在不同的数据拥有相同HASH值的情况,所以通过冲突链组织这些具有相同HASH值的不同数据。
给定一块数据,通过对该块数据的地址计算该块数据的HASH值(散列值),就可以直接找到该块数据位于HASH表中的哪个冲突链上,然后再在该冲突链上逐个遍历,就可以快速地定位该块数据被保存在什么地方。即,通过数据的地址找到数据对应的数据。CACHE一方面在按照顺序访问每个数据,对数据中的数据进行调整,另一方面还要响应主机的读写请求。因此,HASH表是动态的,HASH表中存储的数据不断在变化。
下面利用循环扫描调度算法(CSCAN,Cyclic Scan)通常称为循环电梯调度算法做类比,形象介绍本发明实施例的有益效果。
参见图5,该图为现有技术中CSCAN的示意图。
实线箭头1指向前一个被访问的数据。
实线箭头2指向后一个被访问的数据。
虚线箭头表示正常情况下,游标的移动方向。
现有技术中的CSCAN算法就是游标按照虚线箭头的方向一格一格地向前移动,访问每个数据。
参见图6,该图为本发明CSCAN的示意图。
实线箭头1指向前一个被访问的数据。
虚线箭头2,表示正常情况下,在访问完前一个数据之后,应该访问这一个数据。
实线箭头2,表示所指向的数据在此时已经接近超时,必须立即被处理。因此这个数据才是真正第2个被访问的数据。
当主机的读请求未命中时,CACHE需要从磁盘读数据到实线箭头2的位置。但是首先CACHE会将主机的读请求挂在实线箭头2的位置,继续顺序访问数据。当该读请求被挂的时间等于预定时间长度时,CACHE立即停止顺序访问数据的任务,跳到当前数据执行读请求的响应。这样避免主机的读请求被长时间挂着,不被响应,使主机长时间等待。
本发明实施例提供的方法将主机的读写请求统一考虑,不论主机的发送的请求是读请求,还是写请求,均可以按照顺序进行读写操作。从而避免在大量顺序操作中插入少量随机操作所导致的磁盘性能降低,由于采用的定时器,因此也避免了大量顺序操作导致对引入的个别读请求超时的问题。
本发明实施例提供的方法充分利用了磁盘的顺序操作性能远大于随机操作性能的特点,将离散操作与顺序操作统一组织起来,避免了离散操作对顺序操作的影响,减小了读写请求的平均时延,增加了整个磁盘阵列的吞吐量。
本发明实施例还提供一种CACHE。
设备实施例:
参见图7,该图为本发明CACHE实施例结构图。
本实施例提供的CACHE包括:
第一访问模块701,用于按照数据表702中数据的存储顺序访问数据,其中,所述数据表702中数据的存储顺序为所述数据在磁盘中的地址顺序;
第一读取模块703,当数据表702中的数据为等待从磁盘读入的数据,且等待时间超过第一时间阀值时,用于立即从磁盘中读取对应的数据到所述等待从磁盘读入的数据的位置。
本实施例提供的CACHE,通过在CACHE中设置数据表,数据表按照各个数据的地址顺序来存储所有数据;即该数据表以数据的地址为索引,CACHE按照数据的存储顺序逐个访问每个数据,这样使杂乱无章的数据有序地排列起来,被有序地访问。当接收到主机发送的数据操作请求时,CACHE可以根据所述请求中携带的数据起始地址和数据长度计算对应的地址,由所述地址从所述数据表中找到数据的位置,对所述数据中的数据进行所述数据操作。不论主机的请求为读请求还是写请求,CACHE均可以以地址为索引,从而迅速找到对应的数据的位置,进行相应的数据操作。本发明提供的技术方案综合考虑了读写操作,对于读写操作均可以提升磁盘的吞吐量。
设备另一实施例:
参见图8,该图为本发明CACHE另一实施例结构图。
本实施例对第一访问模块进行详细介绍。
本实施例提供的第一访问模块包括:写入数据访问单元801、读取数据访问单元802和删除单元803。
写入数据访问单元801,若当前访问的数据为等待向磁盘写入的数据,且距上次被访问的时间间隔超过第二时间阀值,和/或没有被访问的频率超过第一频率阀值,用于将所述数据写入磁盘。
读取数据访问单元802,若当前访问的数据为所述等待从磁盘读入的数据,用于从磁盘中读取对应的数据至所述等待从磁盘读入的数据的位置。
删除单元803,若当前访问的数据为已经从磁盘读入的数据,且距上次被访问的时间间隔超过第三时间阀值,和/或没有被访问的频率超过第二频率阀值,用于在数据表中删除所述数据。
如果CACHE正在访问的数据为空数据,说明该数据正在等待真正的数据被读入,此时就执行读磁盘请求,将数据从磁盘中读入到该数据中。此读磁盘操作是一个异步过程,当数据被读入后,会调用之前保存的回调函数来对主机读请求进行响应,将从磁盘读来的数据返回给主机。
设备又一实施例:
参见图9,该图为本发明CACHE又一实施例结构图。
本实施例提供的CACHE还包括:
第一构造模块901,当接收到主机的数据读操作请求时,用于根据所述数据读操作请求中携带的数据起始地址和数据长度计算数据地址,在所述数据表中查找所述数据地址对应的数据,如果未找到,按照所述数据地址在所述数据表中构造所述等待从磁盘读入的数据。
第二读取模块902,当接收到主机的数据读操作请求时,用于根据所述数据读操作请求中携带的数据起始地址和数据长度计算数据地址,在所述数据表中查找所述数据地址对应的数据,如果找到,对所述数据执行数据读操作。
第一写入模块903,当接收到数据写操作请求时,用于根据所述数据写操作请求中携带的数据起始地址和数据长度计算数据地址,将主机发送的数据按照所述数据地址写入所述数据表中。
需要说明的是,本实施例提供的CACHE中的数据表优选HASH表。HASH表的形成在方法实施例中做了详细介绍,在此不再赘述。
本发明实施例提供的CACHE既解决了对主机的数据操作请求时延太长的问题,又解决了对磁盘访问不友好的方式。
本发明还提供一种CACHE处理数据的系统。
系统实施例:
参见图10,该图为本发明系统实施例结构图。
本实施例提供的CACHE处理数据的系统包括主机1001、CACHE1002和磁盘1003。
所述主机1001,用于向所述CACHE发送数据读请求或数据写请求。
所述磁盘1003,用于存储数据。
需要说明的是,CACHE1002是上述设备实施例中进行了详细介绍,在此不再赘述。
本实施例提供的CACHE处理数据的系统,通过在CACHE中设置数据表,数据表按照各个数据的地址顺序来存储所有数据;即该数据表以数据的地址为索引,CACHE按照数据的存储顺序逐个访问每个数据,这样使杂乱无章的数据有序地排列起来,被有序地访问。当接收到主机发送的数据操作请求时,CACHE可以根据所述请求中携带的数据起始地址和数据长度计算对应的地址,由所述地址从所述数据表中找到数据的位置,对所述数据中的数据进行所述数据操作。不论主机的请求为读请求还是写请求,CACHE均可以以地址为索引,从而迅速找到对应的数据的位置,进行相应的数据操作。本发明提供的技术方案综合考虑了读写操作,对于读写操作均可以提升磁盘的吞吐量。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,该程序在执行时,可以包括前述的通信方法各个实施方式的内容。这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
综上所述,本发明实施例所提供的一种CACHE处理数据的方法,通过在CACHE中设置数据表,数据表按照各个数据的地址顺序来存储所有数据;即该数据表以数据的地址为索引,CACHE按照数据的存储顺序逐个访问每个数据,这样使杂乱无章的数据有序地排列起来,被有序地访问。当接收到主机发送的数据读或写请求时,CACHE可以根据所述请求中携带的数据起始地址和数据长度计算对应的地址,由所述地址从所述数据表中找到数据的位置,对所述数据中的数据进行所述读或写操作。不论主机的请求为读请求还是写请求,CACHE均可以以地址为索引迅速找到对应的数据的位置,进行相应的数据操作。当主机的读请求被挂的时间超过第一时间阀值时,CACHE立即从磁盘读取数据来响应主机的读请求。本发明提供的技术方案综合考虑了读写操作,对于读写操作均可以提升磁盘的吞吐量。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括如下步骤:按照数据表中数据的存储顺序访问数据,其中,所述数据表中数据的存储顺序为所述数据在磁盘中的地址顺序;当数据表中的数据为等待从磁盘读入的数据,且等待时间超过第一时间阀值时,立即从磁盘中读取对应的数据到所述等待从磁盘读入的数据的位置。