一种数据存储方法、数据查询方法、相关装置和***
技术领域
本发明涉及通信技术领域,尤其涉及一种数据存储方法和数据查询方法、一种查询服务器、一种查询客户端以及一种数据存储和查询的***。
背景技术
在当前的网络设备中,统一资源定位符(Uniform Resource Locator,简称URL)过滤、网络协议(Internet Protocol,简称IP)信誉等功能越来越普及,这些功能需要在海量数据中实现实时快速的查询处理,例如查询URL对应的类别信息(例如人文类、论坛类、军事类等等),或者查询IP地址对应的信誉等级评分等。
现有技术中,网络设备的本地缓存中上保存较少部分的热点数据,全部的数据保存在远程查询服务器中,所以网络设备在获取到数据信息后,先在网络设备的本地缓存中进行数据查询,如果找到就直接返回结果;如果没找到,就向远程的查询服务器进行数据查询。
对于向远程的查询服务器进行数据查询的方法,现有技术采用分布式网络进行数据查询,分布式网络包括:多台查询服务器、分发服务器、以及多台网络设备(也可称为查询客户端)。其中,每台查询服务器只存储部分数据,所有的查询服务器存储的数据合集为全部数据;分发服务器记录了哪台查询服务器存储了哪些数据,是所有查询客户端发送查询请求的总入口。查询客户端进行数据查询的过程为:查询客户端发送查询请求到分发服务器,分发服务器查看查询请求,计算所要查询的数据存储在哪台查询服务器,然后将查询请求转发到对应的查询服务器,以在所对应的查询服务器中进行数据查询。
在现有技术中,查询客户端必须首先将查询请求发送给分发服务器,但是当分发服务器失效时,所有的查询客户端将无法进行远程查询,单点故障的风险较大,较容易出现性能瓶颈的问题。
发明内容
本发明的实施例提供了一种数据存储方法、数据查询方法、相关装置和***,以减少单点故障和性能瓶颈问题。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明提供了一种数据存储方法,包括:
查询服务器读取数据;
所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识;
所述查询服务器根据数据块存储分配策略,确定所述数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系;
若所述查询服务器标识集合中包括所述查询服务器的标识,则所述查询服务器存储所述数据;否则所述查询服务器不存储所述数据。
在第一方面的第一种可能的实现方式中,所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识包括:
所述查询服务器从所述数据中提取部分数据作为所述数据的键;
所述查询服务器获取所述键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述数据所属数据块的标识;或者,获取所述键的散列值,根据所述散列值确定所述数据所属数据块的标识。
在第一方面的第一种可能的实现方式中,还提供了第一方面的第二种可能的实现方式,所述根据所述散列值确定所述数据所属数据块的标识包括:
所述散列值除以分块数据块的总个数得到余数;
将所述余数确定为所述数据所属数据块的标识。
在第一方面或第一方面的前两种任一可能的实现方式中,还提供了第一方面的第三种可能的实现方式,所述查询服务器读取数据之前,所述方法还包括:接收管理中心服务器发送的数据分块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策略。
在第一方面或第一方面的前三种任一可能的实现方式中,还提供了第一方面的第四种可能的实现方式,所述查询服务器存储所述数据之后,所述方法还包括:接收查询客户端发送的查询请求;所述查询请求携带待查询数据的键;在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的键对应的数据。
在第一方面的第四种可能的实现方式中,还提供了第一方面的第五种可能的实现方式,所述接收查询客户端发送的查询请求之前,所述方法还包括:
接收所述查询客户端发送的数据分块策略的版本信息和数据块存储分配策略的版本信息;
通过比较所述查询客户端发送的数据分块策略的版本信息与所述查询服务器中的数据分块策略的版本信息,以及所述查询客户端发送的数据块存储分配策略的版本信息与所述查询服务器中的数据块存储分配策略的版本信息是否一致,确定所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本是否相同、或所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本是否相同;
若所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本不同,则所述查询服务器将其保存的数据分块策略发送给所述查询客户端;
若所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本不同,则所述查询服务器将其保存的数据块存储分配策略发送给所述查询客户端。
第二方面,本发明提供了一种数据查询方法,包括:
查询客户端获取待查询数据的键;
所述查询客户端根据所述待查询数据的键和数据分块策略,确定所述待查询数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识;
所述查询客户端根据数据块存储分配策略,确定所述数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系;
所述查询客户端向所述查询服务器标识集合中的至少一个查询服务器标识所表征的查询服务器发送查询请求,所述查询请求携带所述待查询数据的键,以使得所述查询服务器在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的键对应的数据。
在第二方面的第一种可能的实现方式中,所述查询客户端根据所述待查询数据的键和数据分块策略,获取所述待查询数据所属数据块的标识包括:
所述查询客户端获取所述待查询数据的键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述待查询数据所属数据块的标识;或者,获取所述待查询数据的键的散列值,根据所述散列值确定所述待查询数据所属数据块的标识。
在第二方面的第一种可能的实现方式中,还提供了第二方面的第二种可能的实现方式,根据所述散列值获取所述待查询数据所属数据块的标识:
所述散列值除以分块数据块的总个数得到余数;
将所述余数确定为所述待查询数据所属数据块的标识。
在第二方面或第二方面的前两种任一可能的实现方式中,还提供了第二方面的第三种可能的实现方式,所述查询客户端根据所述待查询数据的键和数据分块策略,确定所述待查询数据所属数据块的标识之前,所述方法还包括:
所述查询客户端发送所述查询客户端中的数据分块策略的版本信息和数据块存储分配策略的版本信息给查询服务器,以使得所述查询服务器确定是否需要更新所述查询客户端中的数据分块策略和数据块存储分配策略。
在第二方面的第三种可能的实现方式中,还提供了第二方面的第四种可能的实现方式,若查询服务器确定需要更新所述查询客户端的数据分块策略和数据块存储分配策略,所述方法还包括:接收并保存所述查询服务器发送的数据分块策略和数据块存储分配策略。
第三方面,本发明提供了一种查询服务器,包括:
读取模块,用于读取数据;
第一确定模块,用于根据数据分块策略,确定所述读取模块读取到的数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识;
第二确定模块,用于根据数据块存储分配策略,确定所述第一确定模块得到的数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系;
存储模块,用于若所述第二确定模块得到的查询服务器标识集合中包括所述查询服务器的标识,则存储所述数据;否则不存储所述数据。
在第三方面的第一种可能的实现方式中,所述第一确定模块包括:第一确定单元和第二确定单元;
所述第一确定单元,用于从所述读取模块中读取到的数据中提取部分数据作为所述数据的键;
所述第二确定单元,用于获取所述第一确定单元得到的键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述数据所属数据块的标识;或者,获取所述第一确定单元得到的键的散列值,根据所述散列值确定所述数据所属数据块的标识。
在第三方面的第一种可能的实现方式中,还提供了第三方面的第二种可能的实现方式,所述第二确定单元包括:计算子单元和确定子单元;
所述计算子单元,用于将所述散列值除以分块数据块的总个数得到余数;
所述确定子单元,用于将所述计算子单元得到的余数确定为所述数据所属数据块的标识。
在第三方面或第三方面的前两种任一可能的实现方式中,还提供了第三种可能的实现方式,所述查询服务器还包括:接收模块;
所述接收模块,用于在所述读取模块读取数据之前,接收管理中心服务器发送的数据分块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策略。
在第三方面或第三方面的前三种任一可能的实现方式中,还提供了第四种可能的实现方式,所述查询服务器还包括:查询模块;
所述接收模块,还用于在所述存储模块存储所述数据之后,接收查询客户端发送的查询请求;所述查询请求携带待查询数据的键;
所述查询模块,用于在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的键对应的数据。
在第三方面的第四种可能的实现方式中,还提供了第五种可能的实现方式,所述查询服务器还包括:比较模块和发送模块;
所述接收模块,还用于在接收查询客户端发送的查询请求之前,接收所述查询客户端发送的数据分块策略的版本信息和数据块存储分配策略的版本信息;
所述比较模块,用于通过比较所述接收模块接收到的所述查询客户端发送的数据分块策略的版本信息与所述查询服务器中的数据分块策略的版本信息,以及所述接收模块接收到的所述查询客户端发送的数据块存储分配策略的版本信息与所述查询服务器中的数据块存储分配策略的版本信息是否一致,确定所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本是否相同、或所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本是否相同;
所述发送模块,用于若所述比较模块得到的所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本不同,则将所述查询服务器保存的数据分块策略发送给所述查询客户端;若所述比较模块得到的所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本不同,则将所述查询服务器保存的数据块存储分配策略发送给所述查询客户端。
第四方面,本发明提供了一种查询客户端,包括:
获取模块,用于获取待查询数据的键;
第一确定模块,用于根据所述获取模块得到的所述待查询数据的键和数据分块策略,确定所述待查询数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识;
第二确定模块,用于根据数据块存储分配策略,确定所述第一确定模块得到的数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系;
发送模块,用于向所述第二确定模块得到的查询服务器标识集合中的至少一个查询服务器标识所表征的查询服务器发送查询请求,所述查询请求携带所述待查询数据的键,以使得所述查询服务器在所述查询服务器所存储的数据中,查找所述待查询数据的键对应的数据。
在第四方面的第一种可能的实现方式中,所述第一确定模块用于获取所述获取模块得到的待查询数据的键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述待查询数据所属数据块的标识;或者,所述第一确定模块还用于获取所述获取模块得到的待查询数据的键的散列值,根据所述散列值确定所述待查询数据所属数据块的标识。
在第四方面的第二种可能的实现方式中,所述第二确定模块包括:计算单元和确定单元;
所述计算单元,用于将所述散列值除以分块数据块的总个数得到余数;
所述确定单元,用于将所述计算单元得到的余数确定为所述待查询数据所属数据块的标识。
在第四方面或第四种前两种任一可能的实现方式中,还提供了第四方面的第三种可能的实现方式,所述发送模块,还用于在查询客户端获取待查询数据的键之前,发送所述查询客户端中的数据分块策略的版本信息和数据块存储分配策略的版本信息给查询服务器,以使得查询服务器确定是否需要更新查询客户端中的数据分块策略和数据块存储分配策略。
在第四方面的第三种可能的实现方式中,还提供了第四方面的第四种可能的实现方式,所述查询客户端还包括:接收模块;所述接收模块,用于若查询服务器确定需要更新查询客户端的数据分块策略和数据块存储分配策略,接收并保存查询服务器发送的数据分块策略和数据块存储分配策略。
第五方面,本发明提供了一种数据存储和查询的***,包括:至少一个上述第三方面、或第三方面的任意一种可能的实现方式所述的查询服务器、至少一个上述第四方面、或第四方面的任意一种可能的实现方式所述的查询客户端、以及至少一个管理中心服务器;
其中,所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策略,并将所述数据分块策略和数据块存储分配策略发送给所述查询服务器。
本发明的实施例提供了一种数据存储方法、数据查询方法、相关装置和***,查询服务器根据数据分块策略和数据块存储分配策略对数据进行存储;查询客户端根据数据分块策略和数据块存储分配策略直接向存储有待查询数据的查询服务器发送查询请求,以在所述查询服务器所储存的数据中进行数据查找,减少单点故障和性能瓶颈的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据存储和数据查询的***示意图;
图2为本发明实施例提供的一种数据存储的方法示意图;
图3为本发明实施例提供的另一种数据存储的方法示意图;
图4为本发明实施例提供的另一种数据存储的方法示意图;
图5为本发明实施例提供的一种数据查询的方法示意图;
图6为本发明实施例提供的一种数据存储的流程示意图;
图7为本发明实施例提供的另一种数据存储的流程示意图;
图8为本发明实施例提供的一种数据查询的流程示意图;
图9为本发明实施例提供的一种查询服务器的结构示意图;
图10为本发明实施例提供的另一种查询服务器的结构示意图;
图11为本发明实施例提供的另一种查询服务器的结构示意图;
图12为本发明实施例提供的另一种查询服务器的结构示意图;
图13为本发明实施例提供的一种查询客户端的结构示意图;
图14为本发明实施例提供的另一种查询客户端的结构示意图;
图15为本发明实施例提供的另一种查询客户端的结构示意图;
图16为本发明实施例提供的一种查询客户端的实体结构示意图;
图17为本发明实施例提供的一种查询客户端的实体结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供了一种数据存储和查询的***,所述***包括:至少一个查询服务器和至少一个查询客户端。可选地,该***还包括至少一个管理中心服务器,如图1所示。为了提高可靠性,所述***可以包括至少两个管理中心服务器,其中的一个管理中心服务器为主服务器,其余的为备份服务器,以便在主管理中心服务器出现故障时,备份管理中心服务器可以继续为整个***服务,避免造成***的瘫痪。
其中,所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策略,并将所述数据分块策略和数据块存储分配策略发送给查询服务器或查询客户端;
所述查询服务器用于根据所述数据分块策略和数据块存储分配策略对数据进行存储,以便查询客户端在存储有待查询数据的查询服务器中进行数据查询;
所述查询客户端用于根据所述数据分块策略和数据块存储分配策略对数据,向存储有待查询数据的查询服务器发送查询请求,以便在存储有待查询数据的查询服务器中查询到所述待查询数据。
针对上述数据存储和查询的***,本发明实施例提供了一种数据存储的方法,其执行主体为一个查询服务器,如图2所示,包括:
步骤201、查询服务器读取数据。
其中,总量数据为数亿或者数十亿的海量数据,所述海量数据按照一定的格式进行分条记录。针对于一条记录数据,查询服务器读取该数据,并对该数据执行后续步骤202~206的处理。
步骤202、所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识。
其中,所述数据分块策略可以为数据分块算法,所述数据分块算法可以为一个非常简单的算法,也可以为一个非常复杂的方法,当然不限于此;所述数据分块策略可以初始化设置的,也可以是中心管理服务器发送给所述查询服务器的,当然不限于此。
具体的,所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识包括:
所述查询服务器从所述数据中提取部分数据作为所述数据的键;
所述查询服务器获取所述键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述数据所属数据块的标识;或者,获取所述键的散列值,根据所述散列值确定所述数据所属数据块的标识。
其中,所述根据所述散列值确定所述数据所属数据块的标识包括:
所述散列值除以分块数据块的总个数得到余数;
将所述余数确定为所述数据所属数据块的标识。
可选的,管理中心服务器可以根据ASCII码值对所述海量数据进行数据分块,由于ASCII码值共有256(0~255)种可能,所以可将所述海量数据分为256块。具体的,管理中心服务器读取一条数据,将所述数据抽象为键值(key-value)对,即从所述数据中提取部分数据作为所述数据的键(key),所述数据的剩余部分作为值(value);查询服务器获取到所述数据的key,将所述key中指定位置的字符的ASCII码值作为所述数据所属数据块的标识(Identify,简称ID),其中,所述指定位置可以是key中的第一个字符,也可以是最后一个字符,也可以是第一个字符和最后一个字符中任一字符,也可以是key中至少两个指定位置字符的平均值,当然不限于此。
或者可选的,管理中心服务器可以通过计算所述数据键的散列值确定所述数据所属数据块的标识。其中,所述散列值为将值从一个大的(可能很大)定义域映射到一个较小值域的(数学)函数,目前常见的散列函数如MD5、SHA-1等。具体的,管理中心服务器将所述数据抽象为key-value对,计算key的散列值,记作散列值(key),然后利用计算得到的key的散列值除以总的分块个数n所得到的余数,作为所述数据所属数据块的标识,记作分块ID;对于总的分块个数n可以为根据数据的类型进行设定,也可以为根据查询服务器的存储能力进行设定,当然不限于此。
对于通过所述数据的key的散列值,确定所述数据所属数据块的标识,可根据下面的公式计算得到:
分块ID=散列值(key)除以n的余数,
即:分块ID=散列值(key)%n。
其中,所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识可以用数字0进行表示;也可以为用字母a进行表示,当然不限于此。
步骤203、所述查询服务器根据数据块存储分配策略,确定所述数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系。
其中,所述数据块存储分配策略可以为初始配置的,也可以为管理中心服务器发送的;所述数据块存储分配策略包括:所有数据块的ID与存储所述数据块的查询服务器的ID之间的映射关系;查询服务器的ID对应一个查询服务器的IP地址。所述数据块存储分配策略可以为分块数据表,表中记录了每块数据分别被存储到了哪个查询服务器中;也可以为分块数据图,图中记录了每块数据分别被存储到了哪个查询服务器,当然不限于此。
示例的,假设步骤202得到所述数据所属数据块的标识为0,根据所述数据块存储分配策略得到所述数据块的标识0对应的查询服务器标识集合为0和1,即标识为0和1的查询服务器存储了标识为0的数据块。
步骤204、若所述查询服务器标识集合中包括所述查询服务器的标识,则所述查询服务器存储所述数据;否则所述查询服务器不存储所述数据。
示例的,假设根据步骤203可以得到,所述数据所属数据块的标识为0,标识为0和1的查询服务器均存储了所述数据所属数据块。若当前查询服务器的标识为0或者1时,即所述查询服务器标识集合中包括所述查询服务器的标识,则该查询服务器存储所述数据;若当前查询服务器的标识为2,即所述查询服务器标识集合中不包括所述查询服务器的标识,则当前的查询服务器不存储所述数据。
进一步的,针对上述数据存储方法中所述的数据分块策略和数据块存储分配策略,所述数据分块策略可以为初始化时配置的,所述数据块存储分配策略为管理中心服务器发送的。
进一步的,针对上述数据存储方法中所述的数据分块策略和数据块存储分配策略,所述查询服务器读取数据之前,即在步骤201之前,所述方法还包括:接收管理中心服务器发送的数据分块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策略。
查询服务器中的数据分块策略和数据块存储分配策略无论是初始化配置的,还是管理中心服务器发送的,查询服务器都需要对数据分块策略和数据块存储分配策略进行保存,并根据保存的数据分块策略和数据块存储分配策略存储数据。
在所述查询服务器存储所述数据之后,如图3所示,所述方法还包括:
步骤205、接收查询客户端发送的查询请求;所述查询请求携带待查询数据的键;
步骤206、在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的键对应的数据。
进一步的,在所述查询服务器接收查询客户端发送的查询请求之前,如图4所示,所述方法还包括:
步骤401、接收所述查询客户端发送的数据分块策略的版本信息和数据块存储分配策略的版本信息。
步骤402、通过比较所述查询客户端发送的数据分块策略的版本信息与所述查询服务器中的数据分块策略的版本信息,以及所述查询客户端发送的数据块存储分配策略的版本信息与所述查询服务器中的数据块存储分配策略的版本信息是否一致,确定所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本是否相同、或所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本是否相同。
步骤403、若所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本不同,则所述查询服务器将其保存的数据分块策略发送给所述查询客户端;若所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本不同,则所述查询服务器将其保存的数据块存储分配策略发送给所述查询客户端。
本发明的实施例提供了一种数据存储方法,查询服务器根据数据分块策略和数据块存储分配策略对数据进行存储,以使得查询客户端根据数据分块策略和数据块存储分配策略直接向存储有待查询数据的查询服务器发送查询请求,以在所述查询服务器所储存的数据中进行数据查找,减少单点故障和性能瓶颈的问题。
本发明提供了一种数据查询方法,其执行主体为查询客户端,如图5所示,包括:
步骤501、查询客户端获取待查询数据的键。
其中,所述待查询数据的键为待查询数据中一部分。
步骤502、所述查询客户端根据所述待查询数据的键和数据分块策略,确定所述待查询数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识。
其中,所述数据分块策略可以为数据分块算法,所述数据分块算法可以为一个非常简单的算法,也可以为一个非常复杂的算法,当然不限于此;所述数据分块策略可以初始化设置的,也可以是中心管理服务器发送给所述查询服务器的,当然不限于此。
具体的,所述查询客户端根据所述待查询数据的键和数据分块策略,获取所述待查询数据所属数据块的标识包括:
所述查询客户端获取所述待查询数据的键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述待查询数据所属数据块的标识;或者,获取所述待查询数据的键的散列值,根据所述散列值确定所述待查询数据所属数据块的标识。
其中,所述根据所述散列值获取所述待查询数据所属数据块的标识包括:
所述散列值除以分块数据块的总个数得到余数;
将所述余数确定为所述待查询数据所属数据块的标识。
可选的,管理中心服务器可以根据ASCII码值对所述海量数据进行数据分块,由于ASCII码值共有256(0~255)种可能,所以可将所述海量数据分为256块。具体的,管理中心服务器读取一条数据记录,将所述数据抽象为key-value对,即从所述数据中提取部分数据作为所述数据的key,所述数据的剩余部分作为value;查询服务器通过获取到所述数据的key,可以将所述key中指定位置的字符的ASCII码值作为所述数据所属数据块的ID,其中,所述指定位置可以是key中的第一个字符,也可以是最后一个字符,也可以是第一个字符和最后一个字符中任一字符,也可以是key中至少两个指定位置字符的平均值,当然不限于此。
或者可选的,管理中心服务器可以通过计算所述数据键的散列值确定所述数据所属数据块的标识。其中,所述散列值为将值从一个大的(可能很大)定义域映射到一个较小值域的(数学)函数,目前常见的散列函数如MD5、SHA-1等。具体的,管理中心服务器将所述数据抽象为key-value对,计算key的散列值,记作散列值(key),然后利用计算得到的key的散列值除以总的分块个数n所得到的余数,作为所述数据所属数据块的标识,记作分块ID,对于总的分块个数n可以为根据数据的类型进行设定,也可以为根据查询服务器的存储能力进行设定,当然不限于此;
对于通过所述数据的key的散列值,确定所述数据所属数据块的标识,可根据下面的公式计算得到:
分块ID=散列值(key)除以n的余数,
即:分块ID=散列值(key)%n。
其中,所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识可以用数字0进行表示;也可以为用字母a进行表示,当然不限于此。
步骤503、所述查询客户端根据数据块存储分配策略,确定所述数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系。
其中,所述数据块存储分配策略可以为初始配置的,也可以为管理中心服务器发送的;所述数据块存储分配策略包括:所有数据块的ID与存储所述数据块的查询服务器的ID之间的映射关系;查询服务器的ID对应一个查询服务器的IP地址。所述数据块存储分配策略可以为分块数据表,表中记录了每块数据分别被存储到了哪个查询服务器中;也可以为分块数据图,图中记录了每块数据分别被存储到了哪个查询服务器,当然不限于此。
可选的,所述查询客户端根据数据块存储分配策略,确定所述查询服务器标识集合中只包含一个查询服务器标识。
或者可选的,所述查询客户端根据数据块存储分配策略,确定所述查询服务器标识集合中包含至少一个查询服务器标识。
示例的,若经过步骤403得到所述数据所属数据块的标识为0,根据所述数据块存储分配策略得到所述数据块的标识0对应的查询服务器标识集合为0和1,即标识为0和1的查询服务器存储了标识为0的数据块。
步骤504、所述查询客户端向所述查询服务器标识集合中的至少一个查询服务器标识所表征的查询服务器发送查询请求,所述查询请求中携带所述待查询数据的键,以使得在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的键对应的数据;其中,所述查询服务器存储了所述查询服务器对应的数据块所包含的数据。
可选的,若所述查询服务器标识集合中只有一个查询服务器标识,则查询客户端向所述查询服务器标识所表征的查询服务器发送查询请求,以使得所述查询服务器根据所述查询请求查询所述待查询数据。
或者可选的,若所述查询服务器标识集合中包含至少一个查询服务器标识,则查询客户端向所述查询服务器标识集合中的至少一个查询服务器所表征的查询服务器发送查询请求,以使得所述查询服务器根据所述查询请求查询所述待查询数据。查询客户端可以选择向物理距离近的查询服务器发送查询请求,也可以选择向响应速度快的查询服务器发送查询请求,当然不限于此。
当同一数据被存储到多个查询服务器时,当其中一台查询服务器失效时,查询客户端可以向其他查询服务器发送查询请求,以使得所述查询服务器根据所述查询请求进行数据查询。
进一步的,所述查询客户端根据所述待查询数据的键和数据分块策略,确定所述待查询数据所属数据块的标识之前,所述方法还包括:
所述查询客户端发送所述查询客户端中的数据分块策略的版本信息和数据块存储分配策略的版本信息给查询服务器,以使得所述查询服务器确定是否需要更新所述查询客户端中的数据分块策略和数据块存储分配策略。
若查询服务器确定需要更新所述查询客户端的数据分块策略和数据块存储分配策略,所述方法还包括:接收并保存所述查询服务器发送的数据分块策略和数据块存储分配策略。
本发明的实施例提供了一种数据查询方法,查询客户端根据数据分块策略和数据块存储分配策略直接向存储有待查询数据的查询服务器发送查询请求,以在所述查询服务器所储存的数据中进行数据查找,减少单点故障和性能瓶颈的问题。
实施例一、
下面,根据上述数据存储和查询的***,本发明实施例提供了一具体实例,对上述数据存储和查询的方法进行详述。
本发明实施例中,可以将数据分块策略和数据块存储分配策略作为一个预先的约定,以一个固定的逻辑算法程序预置到管理中心服务器、查询服务器和查询客户端的设备中,数据块存储分配策略为管理中心服务器根据所述数据分块策略得到的。在本发明实施例中,管理中心服务器可以对数据分块策略和数据块存储分配策略进行更新,并将更新后的数据分块策略和数据块存储分配策略发送给查询服务器,查询客户端可以通过管理中心服务器或者查询服务器获取更新后的数据分块策略和数据块存储分配策略。具体的,对于数据存储和查询的方法包括:
A、管理中心服务器根据数据分块策略对海量数据进行分块并构造数据块存储分配策略,向各个查询服务器发送所述数据块存储分配策略。其中,数据分块策略为具体的数据分块算法,数据块存储分配策略为具体的分块数据表,如图6所示,具体步骤包括:
(A1)确定海量URL数据。
其中,所述数据是按照一定格式存储的分条记录,只是记录的数目非常庞大,通常会达到数亿到数十亿的规模。以URL过滤为例,要提供高品质的URL过滤服务,需要收集海量的URL,通常是数亿的域名级和和数十亿的页面级信息,可以对这些信息进行分类,每个域名和页面都对应到一个基于内容的分类中,例如人文类、论坛类、军事类、低俗类等等,有的还会提供域名的安全信誉等级。下面是URL分类数据的记录示例:
ci.stevens-point.wi.us,1,108,0,0,269041,1,127.0.0.1,0,0,1
lymanestate.org,1,103,0,0,82795,1,127.0.0.1,0,0,1
maxwell.ayell-nz.com,1,223,0,0,178295,1,127.0.0.1,0,0,1
www.qilu.org.cn,1,223,0,0,265411,1,127.0.0.1,0,0,1
www.ekozik.com,1,168,0,0,244087,1,127.0.0.1,0,0,1
www.hotel1547.c.la,1,131,0,0,301843,1,127.0.0.1,0,0,1
nmoi.madeintrust.com,1,114,0,0,315999,1,127.0.0.1,0,0,1
kofc.stceciliacalgary.com,1,154,0,0,101558,1,127.0.0.1,0,0,1
upon188.cn-sos.com,1,220,0,0,108332,1,127.0.0.1,0,0,1
www.tumortherapy.com,1,136,0,0,11352,1,127.0.0.1,0,0,1
(A2)将URL数据抽象为key-value对,得到URL数据的key。
如表1所示,对于上面的数据,将URL作为key,其他所有信息作为value,则对上面示例的数据抽象之后的形式变为:
表1
Key |
Value |
ci.stevens-point.wi.us |
1,108,0,0,269041,1,127.0.0.1,0,0,1 |
lymanestate.org |
1,103,0,0,82795,1,127.0.0.1,0,0,1 |
maxwell.ayell-nz.com |
1,223,0,0,178295,1,127.0.0.1,0,0,1 |
www.qilu.org.cn |
1,223,0,0,265411,1,127.0.0.1,0,0,1 |
www.ekozik.com |
1,168,0,0,244087,1,127.0.0.1,0,0,1 |
www.hotel1547.c.la |
1,131,0,0,301843,1,127.0.0.1,0,0,1 |
nmoi.madeintrust.com |
1,114,0,0,315999,1,127.0.0.1,0,0,1 |
kofc.stceciliacalgary.com |
1,154,0,0,101558,1,127.0.0.1,0,0,1 |
upon188.cn-sos.com |
1,220,0,0,108332,1,127.0.0.1,0,0,1 |
www.tumortherapy.com |
1,136,0,0,11352,1,127.0.0.1,0,0,1 |
(A3)计算每条URL数据的key的MD5值,记作MD5(key)。
(A4)根据MD5(key)计算每条记录URL数据所属数据块的标识,记作分块ID。
具体的,假设将海量数据总共分为2块,可通过下面的公式计算得到每条记录的分块标识:
分块ID=MD5(key)除以2的余数,
记作:分块ID=MD5(key)%2。
(A5)根据计算得到的所有待分块URL数据所属数据块的标识以及所有查询服务器的标识构造数据块存储分配策略。
具体的,管理中心服务器会从整个***考虑,保证所有的数据分块都能被存储到分布式查询服务器中,同时还有一定的冗余。
假设海量数据被分为8块,查询服务器共有8台,每台服务器可以存储2块数据,则所述数据块存储分配策略的表现形式为分块数据表,如表2中所示:
表2
(A6)管理中心服务器将数据块存储分配策略发送给所有的查询服务器,以使得查询服务器根据数据分块策略和数据块存储分配策略确定需要存储的数据。
B、查询服务器根据数据分块策略和数据块存储分配策略确定待存储的数据,如图7所示,其中,数据分块策略为具体的数据分块算法,数据块存储分配策略为具体的分块数据表。
(B1)查询服务器读取一条URL数据。
(B2)将该URL数据抽象为key-value对,得到该URL数据的key。
(B3)计算该URL数据的key的MD5值,记作MD5(key)。
(B4)根据MD5(key)计算该URL数据每条记录所属数据块的标识,记作分块ID。
具体的,假设将海量数据总共分为2块,可通过下面的公式计算得到该URL数据所属数据块的标识,记作分块ID:
分块ID=MD5(key)除以2的余数,
记作:分块ID=MD5(key)%2。
(B5)根据数据块存储分配策略,确定该URL数据所属数据块的ID所对应的查询服务器的ID集合。
(B6)若所述查询服务器标识集合中包括所述查询服务器的标识,则所述查询服务器存储该URL数据;否则所述查询服务器不存储该URL数据。
所有的查询服务器存储数据的方法均可参考B1-B6的具体过程,直至所有的URL数据存储完成为止。
C、查询客户端根据数据分块策略和数据块存储分配策略向存储待查询数据的查询服务器发送查询请求,以便在所述查询服务器中进行数据查询。
查询服务器在初次查询之前,可以向管理中心获取数据块存储分配策略,也可以向任意一台查询服务器获取数据块存储分配策略。如图8所示,在查询客户端有待查询的数据时,具体的步骤包括:
(C1)获取待查询数据URL;
示例的,待查询数据为:
ci.stevens-point.wi.us,1,108,0,0,269041,1,127.0.0.1,0,0,1;
则待查询数据URL为:ci.stevens-point.wi.us,所述待查询数据URL为待查询数据的key,即key:ci.stevens-point.wi.us。
(C2)计算key的MD5值,记作MD5(key)。
示例的,计算得到key的MD5值,记作MD5(ci.stevens-point.wi.us)=63d36561d8fc0b7b3f1b232c7030729e。
(C3)根据MD5(key)计算该URL所属数据块的标识,记作分块ID。
具体的,假设将海量数据总共分为2块,可通过下面的公式计算得到每条记录的分块标识:
分块ID=MD5(key)除以2的余数,
记作:分块ID=MD5(key)%2。
示例的,上述待查询数据URL的分块ID,通过上述公式计算得到,即分块ID=0x63d36561d8fc0b7b3f1b232c7030729e/2。
(C4)根据数据块存储分配策略,确定该URL所属数据块的ID对应的查询服务器的ID集合。
(C5)向存储该URL的查询服务器标识集合中的至少一个查询服务器标识所表征的查询服务器发送查询请求,所述查询请求中携带待查询数据的键;以使得所述查询服务器在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的键对应的数据。
可选的,若同一数据被存储到多个查询服务器,查询客户端可以选择物理距离近或者响应速度块的查询服务器进行数据查询;若其中的一台查询服务器失效,查询客户端可以向其他存储该待查询数据的查询服务器发送查询请求。
本发明的实施例提供了一种数据存储方法和数据查询方法,查询服务器根据数据分块策略和数据块存储分配策略对数据进行存储;查询客户端根据数据分块策略和数据块存储分配策略直接向存储有待查询数据的查询服务器发送查询请求,以在所述查询服务器所储存的数据中进行数据查找,减少单点故障和性能瓶颈的问题。
实施例二、
下面,根据上述数据存储和查询的***,本发明实施例还提供了另外一种具体的实施方案,对数据存储和查询的方法进行详述。
在本实施例中,对于数据的存储和查询方法,可以参考实施例一中的步骤,区别仅在于在本实施例中,可以将数据分块策略用一个文件进行描述,这样就可以对数据分块策略进行更新升级。
具体的,管理员可以将新的数据分块策略上传到管理中心服务器,管理中心服务器根据新的数据分块策略重新对海量数据进行分块,并构造新的数据块存储分配策略,然后将新的数据分块策略和相对应的数据块存储分配策略发送给所有的查询服务器上。
查询服务器接收新的数据分块策略和相对应的数据块存储分配策略,根据数据分块策略对数据重新计算,并根据新的数据块存储分配策略确定所要存储的数据。
查询客户端向查询服务器发送查询请求时,查询服务器需要告知查询客户端需要升级数据分块策略和数据块存储分配策略,因此将更新后的数据分块策略和相对应的数据块存储分配策略发送查询客户端。进一步的,查询客户端接收并保存更新后的数据分块策略和相对应的数据块存储分配策略,并根据更新后的数据分块策略和相对应的数据块存储分配策略向存储待查询数据的查询服务器发送查询请求。
本发明的实施例提供了一种数据存储方法和数据查询方法,查询服务器根据数据分块策略和数据块存储分配策略对数据进行存储;查询客户端根据数据分块策略和数据块存储分配策略直接向存储有待查询数据的查询服务器发送查询请求,以在所述查询服务器所储存的数据中进行数据查找,减少单点故障和性能瓶颈的问题。
本发明实施例提供了一种查询服务器90,如图9所示。该查询服务器90中的各个功能模块与以执行主体为查询服务器的方法步骤相对应,在此不进行详细描述。所述查询服务器90包括:
读取模块901,用于读取数据;
第一确定模块902,用于根据数据分块策略,确定所述读取模块901读取到的数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识;
第二确定模块903,用于根据数据块存储分配策略,确定所述第一确定模块902得到的数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系;
存储模块904,用于若所述第二确定模块903得到的查询服务器标识集合中包括所述查询服务器的标识,则存储所述数据;否则不存储所述数据。
进一步的,所述第一确定模块902包括:第一确定单元905和第二确定单元906,如图10所示;
其中,所述第一确定单元905,用于从所述读取模块901中读取到的数据中提取部分数据作为所述数据的键;
所述第二确定单元906,用于获取所述第一确定单元905得到的键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述数据所属数据块的标识;或者,获取所述第一确定单元得到的键的散列值,根据所述散列值确定所述数据所属数据块的标识。
进一步的,所述第二确定单元906包括:计算子单元907和确定子单元908,如图11所示;
所述计算子单元907,用于将所述散列值除以分块数据块的总个数得到余数;
所述确定子单元908,用于将所述计算子单元907得到的余数确定为所述数据所属数据块的标识。
进一步的,所述查询服务器90还包括:接收模块909,如图12所示;所述接收模块用于在所述读取模块读取数据之前,接收管理中心服务器发送的数据分块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策略。
进一步的,所述查询服务器90还包括:查询模块910,如图12所示;在所述存储模块904存储所述数据之后,
所述接收模块909,还用于接收查询客户端发送的查询请求;所述查询请求中携带待查询数据的键;
所述查询模块910,用于在所述查询服务器所存储的数据中,查找所述接收模块909接收到的查询请求中待查询数据的键对应的数据。
进一步的,所述查询服务器90还包括:比较模块911和发送模块912,如图12所示;
所述接收模块909,还用于在接收查询客户端发送的查询请求之前,接收所述查询客户端发送的数据分块策略的版本信息和数据块存储分配策略的版本信息;
所述比较模块911,用于通过比较所述接收模块909接收到的所述查询客户端发送的数据分块策略的版本信息与所述查询服务器中的数据分块策略的版本信息,以及所述接收模块接收到的所述查询客户端发送的数据块存储分配策略的版本信息与所述查询服务器中的数据块存储分配策略的版本信息是否一致,确定所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本是否相同、或所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本是否相同;
所述发送模块912,用于若所述比较模块911得到的所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本不同,则将所述查询服务器保存的数据分块策略发送给所述查询客户端;若所述比较模块911得到的所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本不同,则将所述查询服务器保存的数据块存储分配策略发送给所述查询客户端。
本发明实施例还提供了一种查询客户端130,如图13所示。该查询客户端130中的各个功能模块与以执行主体为查询客户端的方法步骤相对应,在此不进行详细描述。所述查询客户端130包括:
获取模块1301,用于获取待查询数据的键;
第一确定模块1302,用于根据所述获取模块1301得到的所述待查询数据的键和数据分块策略,确定所述待查询数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识;
第二确定模块1303,用于根据数据块存储分配策略,确定所述第一确定模块1302得到的数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系;
发送模块1304,用于向所述第二确定模块1303得到的查询服务器标识集合中的至少一个查询服务器标识所表征的查询服务器发送查询请求,所述查询请求中携带待查询数据的键,以使得所述查询服务器在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的键对应的数据;其中,所述查询服务器存储了所述查询服务器对应的数据块所包含的数据。
进一步的,所述第一确定模块1302用于获取所述获取模块得到的待查询数据的键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述待查询数据所属数据块的标识;或者,所述第一确定模块1302还用于获取所述获取模块得到的待查询数据的键的散列值,根据所述散列值确定所述待查询数据所属数据块的标识。
进一步的,所述第二确定模块1303包括:计算单元1305和确定单元1306,如图14所示;
所述计算单元1305,用于将所述散列值除以分块数据块的总个数得到余数;
所述确定单元1306,用于将所述计算单元1305得到的余数确定为所述待查询数据所属数据块的标识。
进一步的,所述发送模块1304还用于在查询客户端获取待查询数据的键之前,发送所述查询客户端中的数据分块策略的版本信息和数据块存储分配策略的版本信息给查询服务器,以使得查询服务器确定是否需要更新查询客户端中的数据分块策略和数据块存储分配策略。
进一步的,所述查询客户端130还包括:接收模块1307,如图15所示;所述接收模块1307用于若查询服务器确定需要更新查询客户端的数据分块策略和数据块存储分配策略,接收并保存查询服务器发送的数据分块策略和数据块存储分配策略。
本发明的实施例提供了一种查询服务器和查询客户端,查询服务器根据数据分块策略和数据块存储分配策略对数据进行存储;查询客户端根据数据分块策略和数据块存储分配策略直接向存储有待查询数据的查询服务器发送查询请求,以在所述查询服务器所储存的数据中进行数据查找,减少单点故障和性能瓶颈的问题。
本发明实施例还提供了一种数据存储和查询的***,包括:上述至少一个所述查询服务器90、上述至少一个所述查询客户端130、以及至少一个管理中心服务器;
其中,所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策略,并将所述数据分块策略和数据块存储分配策略发送给查询服务器。
本发明实施例提供了一种查询服务器的示意图,如图16所示,本发明实施例的查询服务器160可为任何能够实现上述以执行主体为查询服务器90的方法实施例中所述功能的网络设备,例如机架式服务器、机柜式服务器、刀片式服务器等。查询服务器160可包括:存储器1601、处理器1602、接收器1603、发送器1604和通信总线1605。
其中,存储器1601、处理器1602、接收器1603、发送器1604通过通信总线1605完成相互间的通信。
所述存储器1601可以为内存,且存储器1601中存储一组程序代码,且所述程序代码包括数据分块策略和数据块存储分配策略的程序代码,所述程序代码用于执行以查询服务器160为执行主体的数据存储的方法。
所述处理器1602用于调用所述存储器1601中的程序代码,执行以下步骤:读取数据;利用所述查询服务器160中存储器1601中的数据分块策略,确定所述数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识;利用所述查询服务器160中存储器1601中的查询服务器根据数据块存储分配策略,确定所述数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系;若所述查询服务器标识集合中包括所述查询服务器的标识,则所述查询服务器存储所述数据;否则所述查询服务器不存储所述数据。
进一步的,所述处理器1602用于调用所述存储器1601中的程序代码,用于从所述数据中提取部分数据作为所述数据的键;获取所述键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述数据所属数据块的标识;或者,获取所述键的散列值,根据所述散列值确定所述数据所属数据块的标识。
进一步的,所述处理器1602用于调用所述存储器1601中的程序代码,用于将所述散列值除以分块数据块的总个数得到余数;将所述余数确定为所述数据所属数据块的标识。
所述接收机1603,用于在所述查询服务器读取数据之前,接收管理中心服务器发送的数据分块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策略。
进一步的,所述接收器1603还用于在所述查询服务器存储所述数据之后,接收查询客户端发送的查询请求,所述查询请求携带所述待查询数据的键;所述处理器1602用于调用所述存储器1601中的程序代码,以根据所述查询请求在所述查询服务器所存储的数据中,查找所述待查询数据的键对应的数据。
进一步的,在所述接收机1603接收查询客户端发送的查询请求之前,所述接收机1603还用于接收所述查询客户端发送的数据分块策略的版本信息和数据块存储分配策略的版本信息;
所述处理器1602用于调用所述存储器1601中的程序代码,用于通过比较所述查询客户端发送的数据分块策略的版本信息与所述查询服务器中的数据分块策略的版本信息,以及所述查询客户端发送的数据块存储分配策略的版本信息与所述查询服务器中的数据块存储分配策略的版本信息是否一致,确定所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本是否相同、或所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本是否相同;
所述发送器1604,用于若所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本不同,则所述查询服务器将其保存的数据分块策略发送给所述查询客户端;若所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本不同,则所述查询服务器将其保存的数据块存储分配策略发送给所述查询客户端。
本发明实施例提供了一种查询客户端的示意图,如图17所示,本发明实施例的查询客户端170可为任何能够实现上述以执行主体为查询客户端的方法实施例中所述功能的网络设备,例如计算机、通讯设备等。查询客户端170可包括:存储器1701、处理器1702、发送器1703、接收器1704和通信总线1705。
其中,存储器1701、处理器1702、发送器1703、接收器1704通过通信总线1705完成相互间的通信。
所述存储器1701可以为内存,且存储器1701中存储一组程序代码,且所述程序代码包括数据分块策略和数据块存储分配策略的程序代码,所述程序代码用于执行以查询客户端170为执行主体的数据存储的方法。
所述处理器1702,用于调用所述存储器1701中的程序代码,执行以下步骤:获取待查询数据的键;根据所述待查询数据的键和数据分块策略,确定所述待查询数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识;根据数据块存储分配策略,确定所述数据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系。
所述发送器1703,用于向所述查询服务器标识集合中的至少一个查询服务器标识所表征的查询服务器发送查询请求,所述查询请求携带所述待查询数据的键,以使得所述查询服务器所存储的数据中查找所述待查询数据的键对应的数据;其中,所述查询服务器存储了其对应的数据块所包含的数据。
进一步的,所述处理器1702,用于调用所述存储器1701中的程序代码,以获取所述待查询数据的键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述待查询数据所属数据块的标识;或者,获取所述待查询数据的键的散列值,根据所述散列值确定所述待查询数据所属数据块的标识。
进一步的,所述处理器1702,用于调用所述存储器1701中的程序代码,以将所述散列值除以分块数据块的总个数得到余数;将所述余数确定为所述待查询数据所属数据块的标识。
进一步的,所述发送器1703,还用于发送所述存储器1702中的数据分块策略的版本信息和数据块存储分配策略的版本信息给查询服务器,以使得所述查询服务器确定是否需要更新所述查询客户端中的数据分块策略和数据块存储分配策略。
进一步的,所述接收器1704,用于若查询服务器确定需要更新所述查询客户端的数据分块策略和数据块存储分配策略,接收并保存所述查询服务器发送的数据分块策略和数据块存储分配策略。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。