【具体实施方式】
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明一实施例提供的数据存储方法的流程示意图。如图1所示,该方法包括:
101、客户端获取数据记录,该数据记录包括关键字(key)、时间戳和数值(value)。
数据记录是指对应于数据源中一组完整的相关信息,在本实施例中,数据记录至少包括关键字、时间戳和数值。关键字也可以理解为可以代表该数据记录的数据标识。例如,以表1所示高速公路收费站对车辆通过情况的记录信息为例,其中一行信息就是一条数据记录。以表1中第一条数据记录为例,其表示在2013-11-11的00:00这一分钟,有999辆小型车在杭州通过转塘收费站进入了G50高速。其中,2013-11-11的00:00为时间戳,关键字是[小型车.杭州.G50.转塘],数值为999。
表1
通常,当有新的数据记录产生时,客户端就会获取该数据记录。数据记录可以由客户端自身产生,也可以由其它设备产生并提供给客户端。其它设备向客户端提供数据记录的方式可以有多种,例如可以是其它设备直接传输给客户端,也可以是客户端登录其它设备去获取,还可以是其它设备将数据记录存储到中间设备并由客户端从中间设备获取,等等。
102、客户端确定上述关键字对应的元数据,该元数据包括存储服务器的标识和存储标识。
客户端在获取数据记录之后,首先确定数据记录中关键字对应的元数据。该元数据至少包括:存储服务器的标识和存储标识。这里存储服务器的标识用于指示数据记录中的数值所属的存储服务器。举例说明,存储服务器的标识可以是存储服务器的网际协议(InternetProtocol,IP)地址、介质访问控制(MediaAccessControl,MAC)地址、名称等。本实施例中的存储服务器是真正的存储机器,存储服务器至少包括一个文件,每个文件可以包括一个或多个存储页。在本实施例中,用存储标识和时间戳共同指示数据记录中的数值在存储服务器上的存储位置。
在一可选实施方式中,客户端确定数据记录中关键字对应的元数据的方式可以包括:客户端可以根据该关键字在本地查询,以判断该元数据是否存在本地;当元数据存在客户端本地时,客户端从本地获取该元数据;当元数据不存在客户端本地时,客户端向元数据服务器发送获取请求,然后接收元数据服务器根据该获取请求返回的元数据,该获取请求包括上述关键字。优选的,客户端本地主要是指本地缓存。对于元数据服务器来说,接收客户端发送的获取请求,根据该获取请求,确定关键字对应的元数据并返回给客户端。
客户端首先在本地查找元数据,当元数据存在本地时,直接从本地获取元数据,有利于提高获取元数据的效率,进而提高存储效率;当元数据不存在本地时,再通过元数据服务器获取元数据,又可以保证成功获取元数据。
对元数据服务器来说,可以根据关键字在本地查询,以判断关键字对应的元数据是否存在本地;当元数据存在本地时,元数据服务器从本地获取元数据;当元数据不存在本地时,元数据服务器按照预设的分配规则为该关键字分配元数据。
这里的本地主要包括本地缓存空间和持久性存储空间。元数据服务器可以优先根据关键字在本地缓存中查找,如果在本地缓存中查找到该关键字对应的元数据,则直接从本地缓存中获取该元数据;如果未在本地缓存中查找到该关键字对应的元数据,则再根据关键字在持久性存储空间中查找;如果在持久性存储空间中查找到该关键字对应的元数据,则直接从持久性存储空间中获取该元数据,如果未在持久性存储空间中查找到元数据,则再按照预设的分配规则为该关键字分配元数据。可选的,预设的分配方案可以是单调递增分配方案。其中,单调递增分配方案中的单调递增其实可以简称为“递增”或“自增”,主要是针对元数据中的存储标识来说的。具体的,假设当前已分配的元数据中存储标识的最大值是M,那新分配的存储标识必须是M+1,与此同时更新M=M+1,以此类推。这样就能保证不断递增的分配新的不重复、具备唯一性的存储标识给每条数据记录,而且存储标识之间也是连续的,不会出现空缺浪费。
元数据服务器先在本地缓存中查找元数据,同样有利于提高获取元数据的效率,进而提高存储效率;当元数据不存在本地缓存中时,再去持久性存储空间查找或者为关键字分配元数据,可以保证成功获取关键字对应的元数据,为成功存储数值提供保障。
进一步,如果元数据服务器从持久性存储空间获取元数据之后,可以将元数据存储到本地缓存中;如果元数据服务器为关键字分配元数据之后,还可以将元数据存储到持久性存储空间和本地缓存中,这样可以提高后续获取元数据的效率。
在一可选实施方式中,元数据服务器为关键字分配元数据之后,可以将该关键字和元数据对应存储在本地,优选存储到持久性存储空间中。这就为客户端查询数值打下了基础。
进一步,当关键字被删除时,元数据服务器可以回收关键字对应的元数据。由于元数据中的存储标识被赋予了指示数值在存储服务器上的存储位置的职责,所以仅仅在每个存储服务器下保证唯一性是不够的,例如在单调递增的方案中,有可能老的存储标识已经作废了(由于对应的关键字被删除),而新分配的存储标识依然在不断递增,这会导致作废的关键字在每个文件中继续占据存储空间,导致极大浪费。本实施例中的元数据服务器通过回收被删除关键字对应的元数据在保证存储标识唯一性的同时还可以避免空间浪费。
103、客户端根据存储服务器的标识,向存储服务器发送写入请求,该写入请求包括上述存储标识、上述时间戳和上述数值。
在确定关键字对应的元数据之后,客户端将数据记录中的关键字替换为存储标识,并根据存储服务器的标识,向对应的存储服务器发送写入请求,以使存储服务器将数据记录中的数值写入存储标识和时间戳所指示的存储位置。
104、存储服务器将上述数值存储到存储标识和时间戳指示的存储位置。
存储服务器接收到客户端发送的写入请求后,从写入请求中获取存储标识、时间戳和数值,之后根据存储标识和时间戳确定数值的存储位置,将数值写入所确定的存储位置。
本发明的数据记录在时间上可以具有周期性。例如以表1中第一条数据记录为例,如果以分钟来记录数值,则对于[小型车.杭州.G50.转塘]这个关键字而言,一天有且仅有1440条数据记录;如果以秒来记录数据,则对于[小型车.杭州.G50.转塘]这个关键字而言,一天有且仅有86400条数据记录。除此之外,本实施例的数值占用的字节数是可以预知的,一般占用一个双精度浮点(double)类型的字节数。
基于上述特点,在一可选实施方式中,存储服务器可以按照预设的时间粒度进行数值存储,将每个时间粒度内的数值存储为一个文件;在一个文件中,不同关键值对应的数值用一个存储页进行存储。基于此,用时间戳和存储标识指示数值在存储服务器上的存储位置的方式为:时间戳可用来指示存储服务器上用于存储数据记录中数值的存储文件以及该数值在该存储文件中用于存储该数值的存储页内的位置,而存储标识具体可用于指示上述存储文件中用于存储该数值的存储页。
基于上述,步骤104的一种可选实施方式包括:
存储服务器用上述时间戳对预设的时间粒度取模,获取整数部分和余数部分,根据整数部分确定存储服务器上用于存储上述数值的存储文件,根据存储标识确定存储文件中用于存储上述数值的存储页,并根据余数部分确定上述数值在存储页内的起始位置。
举例说明,时间粒度可以为“一天”、“一星期”、“一月”、“一年”等。相应的,一天、一星期、一月或一年内的数值用一个文件存储,也就是说存储服务器上的文件以时间粒度为单位进行存储。
以时间粒度为“一天”为例,则上述存储文件以“一天”为单位来存储数值。则步骤104的具体实施方式包括:
存储服务器用时间戳对该时间粒度取模,获取整数部分作为时间戳中的日期,根据余数部分确定时间戳中偏离该日期的分钟数;
存储服务器确定以该日期命名的文件作为存储数据记录中数值的存储文件,将存储标识与单个存储页占用的字节数相乘的结果作为用于存储上述数值的存储页在存储文件中的起始位置,将上述分钟数与每分钟内数值占用的字节数相乘的结果作为上述数值在上述存储页内的起始位置。
例如,如果文件存储的是2013-11-11的数值,则可以用2013-11-11来命名;如果文件存储的是2013-12-11的数值,则可以用2013-12-11来命名等。这样,存储服务器可以将上述确定的时间戳中的日期与各文件的名称相比较,将匹配中的文件作为用于存储上述数值的存储文件。
在确定存储文件的基础上,假设每分钟内的数值占用8个字节(byte),1440个数值占用N=1440*8字节,此时的存储标识为M,则用于存储数据记录中数值的存储页在存储文件中的起始位置为存储空间的第M*N个字节,如果时间戳是2013-11-1101:01分,因为01:01分是这一天的第61个分钟,则上述数值在存储页内占用空间的起始位置是61*8,则上述数值在2013-11-11这个存储文件内的存储位置是M*N+61*8。
在本实施例中,客户端确定关键字对应的元数据,元数据中存储服务器的标识指示数值所在的存储服务器,元数据中的存储标识和数据记录中的时间戳共同指示数值在存储服务器上的存储位置,将时间戳与数值的存储位置相关联,这样既可以确定数值的存储位置又可以不用存储时间戳,也就避免了为时间戳建立次级索引影响存储系统性能的问题,有利于提高存储速度。
另外,周期型数据的存储都遵循价值递减原则,即数值的价值随着时间的流逝而递减,越实时的数值价值越高。基于此,近期的数值一般存储在高端机器和磁盘上,而年代久远的数值往往会被迁移到廉价的存储设备上。而本实施例将文件按数值产生的日期来命名能够便于这种迁移操作,迁移操作都是迁移某个日期之前的数值,而通过文件的名称可以非常方便的定位待迁移的数值。因此本实施例还历史久远的数值迁移(例如从线上机器迁移到廉价存储设备上等)提供了便利。
进一步,基于本实施例提供的数据存储方法,在进行数据检索时可以不再基于时间戳的次级索引,避免了通过次级索引检索数值时带来的I/O开销,有利于提高查询速度。
图2为本发明一实施例提供的数据查询方法的流程图。如图2所示,该方法包括:
201、客户端获取待查询数值对应的关键字和时间戳。
202、客户端确定上述关键字对应的元数据,该元数据包括存储服务器的标识和存储标识。
在需要查询数值时,客户端首先要获取待查询数值对应的关键字和时间戳。可选的,待查询数值对应的关键字和时间戳可以是客户端自身产生;或者也可以是其它设备产生后提供给客户端。其它设备向客户端提供待查询数值对应的关键字和时间戳的方式可以有多种,例如可以是其它设备直接传输给客户端,也可以是客户端登录其它设备去获取,还可以是其它设备将数据记录存储到中间设备并由客户端从中间设备获取,等等。
之后,客户端确定关键字对应的元数据。该元数据至少包括:存储服务器的标识和存储标识。其中,存储服务器的标识用于指示待查询数值所属的存储服务器。举例说明,存储服务器的标识可以是存储服务器的IP地址、MAC地址、名称等。本实施例中的存储服务器是真正的存储机器,存储服务器包括至少一个文件,每个文件可以包括一个或多个存储页。这里的存储标识和时间戳共同指示待查询数值在存储服务器上的存储位置。
在一可选实施方式中,客户端确定关键字对应的元数据的方式可以包括:客户端可以根据该关键字在客户端本地查询,以判断该元数据是否存在本地;当元数据存在客户端本地时,客户端从本地获取该元数据;当元数据不存在客户端本地时,客户端向元数据服务器发送获取请求,然后接收元数据服务器根据该获取请求返回的元数据,该获取请求包括关键字。优选的,客户端本地主要是指本地缓存。对于元数据服务器来说,接收客户端发送的获取请求,根据该获取请求,确定关键字对应的元数据并返回给客户端。
客户端首先在本地查找元数据,当元数据存在本地时,直接从本地获取元数据,有利于提高获取元数据的效率,进而提高查询效率;当元数据不存在本地时,再通过元数据服务器获取元数据,又可以保证成功获取元数据。
对元数据服务器来说,可以根据关键字在本地查询,以判断该关键字对应的元数据是否存在本地;当元数据存在本地时,元数据服务器从本地获取元数据;当元数据不存在本地时,元数据服务器向客户端返回异常信息,由客户端进行异常处理。
这里的本地包括本地缓存空间和持久性存储空间。元数据服务器可以优先根据关键字在本地缓存中查找,如果在本地缓存中查找到该关键字对应的元数据,则直接从本地缓存中获取该元数据;如果未在本地缓存中查找到该关键字对应的元数据,则再根据关键字在持久性存储空间中查找;如果在持久性存储空间中查找到该关键字对应的元数据,则直接从持久性存储空间中获取该元数据,如果未在持久性存储空间中查找到元数据,向客户端返回异常信息。
元数据服务器先在本地缓存中查找元数据,同样有利于提高获取元数据的效率,进而提高查询效率;当元数据不存在本地缓存中时,再去持久性存储空间查找或者为关键字分配元数据,可以保证成功获取元数据,为成功查询数值提供保障。
进一步,如果元数据服务器从持久性存储空间获取元数据之后,可以将元数据存储到本地缓存中,这样可以提高后续获取元数据的效率。
进一步,当关键字被删除时,元数据服务器回收该元数据。由于元数据中的存储标识被赋予了指示数值在存储服务器上的存储位置的职责,所以仅仅在每个存储服务器下保证唯一性是不够的,例如在单调递增的方案中,有可能老的存储标识已经作废了(由于对应的关键字被删除),而新分配的存储标识依然在不断递增,这就会导致作废的关键字在每个存储文件中都继续占据存储空间,导致极大浪费。本实施例中的元数据服务器通过回收被删除关键字对应的元数据在保证存储标识唯一性的同时还可以避免空间浪费。
203、客户端根据上述存储服务器的标识,向存储服务器发送读请求,该读请求包括上述时间戳和上述存储标识。
在确定关键字对应的元数据之后,客户端将关键字替换为存储标识,并根据存储服务器的标识,向对应的存储服务器发送读请求,以使存储服务器从时间戳和存储标识指示的存储位置读取数值。
204、存储服务器从上述存储标识和上述时间戳指示的存储位置读取数值,并将该数值发送给客户端。
存储服务器接收到客户端发送的读请求后,从读请求中获取时间戳和存储标识,根据时间戳和存储标识确定存储位置,从所确定的存储位置读取数值,将所读取的数值发送给客户端。
在本发明中,存储服务器上存储的数值具有周期性,数值的存储与其所对应的时间戳相关联。在一可选实施方式中,存储服务器可以按照预设的时间粒度进行数值存储,将每个时间粒度内的数值存储为一个文件;在一个文件中,不同关键值对应的数值用一个存储页进行存储。基于此,用时间戳和存储标识指示数值在存储服务器上的存储位置的方式为:时间戳可用来指示存储服务器上用于存储数值的存储文件以及该数值在该存储文件中用于存储该数值的存储页内的位置,而存储标识具体可用于指示上述存储文件中用于存储该数值的存储页。
基于上述,存储服务器从上述存储标识和上述时间戳指示的存储位置读取数值的一种可选实施方式包括:
存储服务器用上述时间戳对预设的时间粒度取模,获取整数部分和余数部分,根据整数部分确定存储服务器上用于存储待查询数值的存储文件,根据存储标识确定该存储文件中用于存储待查询数值的存储页,并根据余数部分确定该数值在存储页内的起始位置,然后自该起始位置开始从所确定的存储页内读取上述数值。
举例说明,时间粒度可以为“一天”、“一星期”、“一月”、“一年”等。相应的,一天、一星期、一月或一年内的数值用一个文件存储,也就是说存储服务器上的文件以时间粒度为单位进行存储。
以时间粒度为“一天”为例,则存储文件以“一天”为单位来存储数值。则存储服务器从上述存储标识和上述时间戳指示的存储位置读取数值的具体实施方式包括:
存储服务器用读请求携带的时间戳对该时间粒度取模,获取整数部分作为时间戳中的日期,根据余数部分确定时间戳中偏离所确定的日期的分钟数;
存储服务器确定以该日期命名的文件作为存储服务器上存储有待查询数值的存储文件,将存储标识与单个存储页占用的字节数相乘的结果作为存储有上述待查询数值的存储页在上述储文件中的起始位置,将上述分钟数与每分钟内数值占用的字节数相乘的结果作为待查询数值在上述存储页内的起始位置。
例如,如果文件存储的是2013-11-11的数值,则可以用2013-11-11来命名;如果文件存储的是2013-12-11的数值,则可以用2013-12-11来命名等。这样,存储服务器可以将上述确定的时间戳中的日期与各文件的名称相比较,将匹配中的文件作为存储有待查询数值的存储文件。
在确定存储文件的基础上,假设每分钟内的数值占用8个字节(byte),1440个数值占用N=1440*8字节,此时的存储标识为M,则存储有待查询数值的存储页在存储文件中的起始位置为存储空间的第M*N个字节,如果时间戳是2013-11-1101:01分,因为01:01分是这一天的第61个分钟,则待查询数值在存储页内占用空间的起始位置是61*8,则待查询数值在2013-11-11这个存储文件内的位置是M*N+61*8。
在本实施例中,客户端获取待存储数值对应的关键字和时间戳,之后确定关键字对应的元数据,元数据中存储服务器的标识指示待查询数值所在的存储服务器,时间戳和元数据中的存储标识共同指示待查询数值在存储服务器上的存储位置,将时间戳与待查询数值的存储位置相关联,这样可以直接利用时间戳和存储标识进行数值查询,使得数值查询不再基于时间戳的次级索引,避免了通过次级索引检索数值时带来的I/O开销,提高了查询速度。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
图3为本发明一实施例提供的客户端的结构示意图。如图3所示,该客户端包括:获取模块31、确定模块32和发送模块33。
获取模块31,用于获取数据记录,所述数据记录包括关键字、时间戳和数值。
确定模块32,与获取模块31连接,用于确定获取模块31获取的数据记录中关键字对应的元数据,所述元数据包括存储服务器的标识和存储标识。
发送模块33,与确定模块32连接,用于根据确定模块32确定的存储服务器的标识,向存储服务器发送写入请求,以使存储服务器将上述数值存储到上述存储标识和上述时间戳指示的存储位置;所述写入请求包括上述存储标识、上述时间戳和上述数值。
在一可选实施方式中,确定模块32具体用于在所述元数据不存在所述客户端本地时,向元数据服务器发送获取请求,接收所述元数据服务器根据所述获取请求确定并返回的所述元数据;所述获取请求包括所述关键字。
本实施例提供的客户端的各功能模块可用于执行图1所示数据存储方法,其工作原理不在赘述,详见方法实施例的描述。
本实施例提供的客户端,确定关键字对应的元数据,元数据中存储服务器的标识指示数值所在的存储服务器,元数据中的存储标识和数据记录中的时间戳共同指示数值在存储服务器上的存储位置,将时间戳与数值的存储位置相关联,这样既可以确定数值的存储位置又可以不用存储时间戳,也就避免了存储服务器为时间戳建立次级索引影响存储系统性能的问题,有利于提高存储速度。
图4为本发明一实施例提供的存储服务器的结构示意图。如图4所示,该存储服务器包括:接收模块41和写入模块43。
接收模块41,用于接收客户端根据存储服务器的标识发送的写入请求;所述写入请求包括存储标识、数据记录中的时间戳以及数据记录中的数值,所述存储标识是客户端根据数据记录中的关键字确定的。其中,客户端在获取数据记录后,确定数据记录中关键字对应的元数据,之后根据元数据中存储服务器的标识向存储服务器发送写入请求。数据记录包括时间戳、关键字和数值。元数据除了包括存储服务器的标识之外,还包括存储标识。
写入模块43,与接收模块41连接,用于将接收模块41接收的数值写入由存储标识和时间戳指示的存储位置。
在一可选实施方式中,写入模块43具体用于用时间戳对预设的时间粒度取模,获取整数部分和余数部分,根据所述整数部分确定所述存储服务器上用于存储所述数值的存储文件,根据所述存储标识确定所述存储文件中用于存储所述数值的存储页,并根据所述余数部分确定所述数值在所述存储页内的起始位置,自所述起始位置开始将所述数值写入所述存储页。
进一步,上述时间粒度可以是“一天”,则上述存储文件以“一天”为单位来存储数值。基于此,写入模块43具体可用于用所述时间戳对所述时间粒度取模,获取所述整数部分作为所述时间戳中的日期,根据所述余数部分确定所述时间戳中偏离所述日期的分钟数,确定以所述日期命名的文件作为所述存储文件,将所述存储标识与单个存储页占用的字节数相乘的结果作为所述存储页在所述存储文件中的起始位置,将所述分钟数与每分钟内数值占用的字节数相乘的结果作为所述数值在所述存储页内的起始位置,自所述起始位置开始将所述数值写入所述存储页。
进一步,如图5所示,该存储服务器还包括:元数据获取模块44,用于根据所述关键字在本地查询,以判断所述元数据是否存在本地,并在所述元数据存在本地时,从本地获取所述元数据,或者,在所述元数据不存在本地时,按照预设的分配规则为所述关键字分配所述元数据。元数据获取模块44与客户端连接(图5中未示出),用于向客户端提供关键字对应的元数据。
进一步,如图5所示,该存储服务器还包括:存储模块45,与元数据获取模块44连接,用于在元数据获取模块44为所述关键字分配所述元数据之后,将所述关键字和所述元数据对应存储在本地。
进一步,如图5所示,该存储服务器还包括:回收模块46,与存储模块45连接,用于在所述关键字被删除时,回收存储模块45所存储的元数据。
本实施例提供的存储服务器的各功能模块可用于执行图1所示数据存储方法的流程,其具体工作原理不在赘述,详见方法实施例的描述。
本实施例提供的存储服务器,利用存储标识和数据记录中的时间戳共同指示数值在存储服务器上的存储位置,将时间戳与数值的存储位置相关联,这样既可以确定数值的存储位置又可以不用存储时间戳,也就避免了为时间戳建立次级索引影响存储系统性能的问题,有利于提高存储速度。
图6为本发明另一实施例提供的客户端的结构示意图。如图6所示,该客户端包括:获取模块61、确定模块62、发送模块63和接收模块64。
获取模块61,用于获取待查询数值对应的关键字和时间戳。
确定模块62,与获取模块61连接,用于确定获取模块61获取的关键字对应的元数据,所述元数据包括存储服务器的标识和存储标识。
发送模块63,与存储服务器和确定模块62连接,用于根据确定模块62确定的存储服务器的标识,向所述存储服务器发送读请求,以使所述存储服务器从所述存储标识和所述时间戳指示的存储位置读取所述数值,所述读请求包括所述时间戳和所述存储标识。
接收模块64,与存储服务器连接,用于接收所述存储服务器发送的所述数值。
本实施提供的客户端的各功能模块可用于执行图2所示数据查询方法的流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的客户端,在获取元数据之后,向存储服务器发送读请求,在读请求中携带时间戳和存储标识,利用时间戳和存储标识共同指示待查询数值在存储服务器上的存储位置,这样客户端进行数值查询不再基于时间戳的次级索引,避免了通过次级索引检索数值时带来的I/O开销,提高了查询速度。
图7为本发明又一实施例提供的存储服务器的结构示意图。如图7所示,该存储服务器包括:接收模块71、读取模块73和发送模块74。
接收模块71,用于接收客户端根据存储服务器的标识发送的读请求,所述读请求包括待查询数值对应的时间戳和存储标识,所述存储标识是客户端根据待查询数值对应的关键字确定的。其中,客户端在获取待查询数值对应的关键字和时间戳后,确定关键字对应的元数据,根据元数据中存储服务器的标识,向存储服务器发送读请求。元数据除了包括存储服务器的标识之外,还包括存储标识。
读取模块73,与接收模块71连接,用于从接收模块71接收的存储标识和时间戳指示的存储位置读取数值。
发送模块74,与读取模块73连接,用于将读取模块73读取的数值发送给所述客户端。
在一可选实施方式中,读取模块73具体可用于用所述时间戳对预设的时间粒度取模,获取整数部分和余数部分,根据所述整数部分确定所述存储服务器上用于存储所述数值的存储文件,根据所述存储标识确定所述存储文件中用于存储所述数值的存储页,并根据所述余数部分确定所述数值在所述存储页内的起始位置,自所述起始位置开始从所述存储页中读取所述数值。
在一可选实施方式中,上述时间粒度为“一天”,则存储文件以“一天”为单位进行存储,基于此,读取模块具体用于用所述时间戳对所述时间粒度取模,获取所述整数部分作为所述时间戳中的日期,根据所述余数部分确定所述时间戳中偏离所述日期的分钟数,确定以所述日期命名的文件作为所述存储文件,将所述存储标识与单个存储页占用的字节数相乘的结果作为所述存储页在所述存储文件中的起始位置,将所述分钟数与每分钟内数值占用的字节数相乘的结果作为所述数值在所述存储页内的起始位置,自所述起始位置开始从所述存储页中读取所述数值。
本实施提供的存储服务器的各功能模块可用于执行图2所示数据查询方法的流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的存储服务器,接收到客户端发送的读请求之后,利用读请求中的时间戳和存储标识确定数值所在的存储位置,之后读取数值并返回给客户端,使得数值的查询不再基于时间戳的次级索引,避免了通过次级索引检索数值时带来的I/O开销,提高查询速度。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。