一种数据存储方法、数据查询方法、相关装置和系统的制作方法
【专利摘要】本发明公开了一种数据存储方法、数据查询方法、相关装置和系统,涉及通信【技术领域】,以减少单点故障和性能瓶颈问题。所述方法包括:查询服务器读取数据;查询服务器根据数据分块策略,确定数据所属数据块的标识,数据分块策略用于确定数据所属数据块的标识;查询服务器根据数据块存储分配策略,确定数据块的标识对应的查询服务器标识集合,查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储数据块的标识所表征的数据块,数据块存储分配策略包含数据块的标识与查询服务器标识集合的对应关系;若查询服务器标识集合中包括所述查询服务器的标识,则所述查询服务器存储所述数据;否则所述查询服务器不存储所述数据。
【专利说明】一种数据存储方法、数据查询方法、相关装置和系统
【技术领域】
[0001] 本发明涉及通信【技术领域】,尤其涉及一种数据存储方法和数据查询方法、一种查 询服务器、一种查询客户端以及一种数据存储和查询的系统。
【背景技术】
[0002] 在当前的网络设备中,统一资源定位符(Uniform Resource Locator,简称URL)过 滤、网络协议(Internet Protocol,简称IP)信誉等功能越来越普及,这些功能需要在海量 数据中实现实时快速的查询处理,例如查询URL对应的类别信息(例如人文类、论坛类、军 事类等等),或者查询IP地址对应的信誉等级评分等。
[0003] 现有技术中,网络设备的本地缓存中上保存较少部分的热点数据,全部的数据保 存在远程查询服务器中,所以网络设备在获取到数据信息后,先在网络设备的本地缓存中 进行数据查询,如果找到就直接返回结果;如果没找到,就向远程的查询服务器进行数据查 询。
[0004] 对于向远程的查询服务器进行数据查询的方法,现有技术采用分布式网络进行数 据查询,分布式网络包括:多台查询服务器、分发服务器、以及多台网络设备(也可称为查询 客户端)。其中,每台查询服务器只存储部分数据,所有的查询服务器存储的数据合集为全 部数据;分发服务器记录了哪台查询服务器存储了哪些数据,是所有查询客户端发送查询 请求的总入口。查询客户端进行数据查询的过程为:查询客户端发送查询请求到分发服务 器,分发服务器查看查询请求,计算所要查询的数据存储在哪台查询服务器,然后将查询请 求转发到对应的查询服务器,以在所对应的查询服务器中进行数据查询。
[0005] 在现有技术中,查询客户端必须首先将查询请求发送给分发服务器,但是当分发 服务器失效时,所有的查询客户端将无法进行远程查询,单点故障的风险较大,较容易出现 性能瓶颈的问题。
【发明内容】
[0006] 本发明的实施例提供了一种数据存储方法、数据查询方法、相关装置和系统,以减 少单点故障和性能瓶颈问题。
[0007] 为达到上述目的,本发明的实施例采用如下技术方案:
[0008] 第一方面,本发明提供了一种数据存储方法,包括:
[0009] 查询服务器读取数据;
[0010] 所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识,所述数据 分块策略用于确定数据所属数据块的标识;
[0011] 所述查询服务器根据数据块存储分配策略,确定所述数据块的标识对应的查询服 务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存 储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询 服务器标识集合的对应关系;
[0012] 若所述查询服务器标识集合中包括所述查询服务器的标识,则所述查询服务器存 储所述数据;否则所述查询服务器不存储所述数据。
[0013] 在第一方面的第一种可能的实现方式中,所述查询服务器根据数据分块策略,确 定所述数据所属数据块的标识包括:
[0014] 所述查询服务器从所述数据中提取部分数据作为所述数据的键;
[0015] 所述查询服务器获取所述键中指定位置的字符的ASCII码值,根据所述ASCII码 值确定所述数据所属数据块的标识;或者,获取所述键的散列值,根据所述散列值确定所述 数据所属数据块的标识。
[0016] 在第一方面的第一种可能的实现方式中,还提供了第一方面的第二种可能的实现 方式,所述根据所述散列值确定所述数据所属数据块的标识包括:
[0017] 所述散列值除以分块数据块的总个数得到余数;
[0018] 将所述余数确定为所述数据所属数据块的标识。
[0019] 在第一方面或第一方面的前两种任一可能的实现方式中,还提供了第一方面的第 三种可能的实现方式,所述查询服务器读取数据之前,所述方法还包括:接收管理中心服务 器发送的数据分块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数据 分块策略和数据块存储分配策略。
[0020] 在第一方面或第一方面的前三种任一可能的实现方式中,还提供了第一方面的第 四种可能的实现方式,所述查询服务器存储所述数据之后,所述方法还包括:接收查询客户 端发送的查询请求;所述查询请求携带待查询数据的键;在所述查询服务器所存储的数据 中,查找所述查询请求中待查询数据的键对应的数据。
[0021] 在第一方面的第四种可能的实现方式中,还提供了第一方面的第五种可能的实现 方式,所述接收查询客户端发送的查询请求之前,所述方法还包括:
[0022] 接收所述查询客户端发送的数据分块策略的版本信息和数据块存储分配策略的 版本信息;
[0023] 通过比较所述查询客户端发送的数据分块策略的版本信息与所述查询服务器中 的数据分块策略的版本信息,以及所述查询客户端发送的数据块存储分配策略的版本信息 与所述查询服务器中的数据块存储分配策略的版本信息是否一致,确定所述查询客户端中 的数据分块策略与所述查询服务器中的数据分块策略的版本是否相同、或所述查询客户端 中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本是否相同;
[0024] 若所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版 本不同,则所述查询服务器将其保存的数据分块策略发送给所述查询客户端;
[0025] 若所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储 分配策略的版本不同,则所述查询服务器将其保存的数据块存储分配策略发送给所述查询 客户端。
[0026] 第二方面,本发明提供了一种数据查询方法,包括:
[0027] 查询客户端获取待查询数据的键;
[0028] 所述查询客户端根据所述待查询数据的键和数据分块策略,确定所述待查询数据 所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识;
[0029] 所述查询客户端根据数据块存储分配策略,确定所述数据块的标识对应的查询服 务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存 储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询 服务器标识集合的对应关系;
[0030] 所述查询客户端向所述查询服务器标识集合中的至少一个查询服务器标识所表 征的查询服务器发送查询请求,所述查询请求携带所述待查询数据的键,以使得所述查询 服务器在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的键对应的数 据。
[0031] 在第二方面的第一种可能的实现方式中,所述查询客户端根据所述待查询数据的 键和数据分块策略,获取所述待查询数据所属数据块的标识包括:
[0032] 所述查询客户端获取所述待查询数据的键中指定位置的字符的ASCII码值,根据 所述ASCII码值确定所述待查询数据所属数据块的标识;或者,获取所述待查询数据的键 的散列值,根据所述散列值确定所述待查询数据所属数据块的标识。
[0033] 在第二方面的第一种可能的实现方式中,还提供了第二方面的第二种可能的实现 方式,根据所述散列值获取所述待查询数据所属数据块的标识:
[0034] 所述散列值除以分块数据块的总个数得到余数;
[0035] 将所述余数确定为所述待查询数据所属数据块的标识。
[0036] 在第二方面或第二方面的前两种任一可能的实现方式中,还提供了第二方面的第 三种可能的实现方式,所述查询客户端根据所述待查询数据的键和数据分块策略,确定所 述待查询数据所属数据块的标识之前,所述方法还包括:
[0037] 所述查询客户端发送所述查询客户端中的数据分块策略的版本信息和数据块存 储分配策略的版本信息给查询服务器,以使得所述查询服务器确定是否需要更新所述查询 客户端中的数据分块策略和数据块存储分配策略。
[0038] 在第二方面的第三种可能的实现方式中,还提供了第二方面的第四种可能的实现 方式,若查询服务器确定需要更新所述查询客户端的数据分块策略和数据块存储分配策 略,所述方法还包括:接收并保存所述查询服务器发送的数据分块策略和数据块存储分配 策略。
[0039] 第三方面,本发明提供了一种查询服务器,包括:
[0040] 读取模块,用于读取数据;
[0041] 第一确定模块,用于根据数据分块策略,确定所述读取模块读取到的数据所属数 据块的标识,所述数据分块策略用于确定数据所属数据块的标识;
[0042] 第二确定模块,用于根据数据块存储分配策略,确定所述第一确定模块得到的数 据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所 表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略 包含数据块的标识与查询服务器标识集合的对应关系;
[0043] 存储模块,用于若所述第二确定模块得到的查询服务器标识集合中包括所述查询 服务器的标识,则存储所述数据;否则不存储所述数据。
[0044] 在第三方面的第一种可能的实现方式中,所述第一确定模块包括:第一确定单元 和第二确定单元;
[0045] 所述第一确定单元,用于从所述读取模块中读取到的数据中提取部分数据作为所 述数据的键;
[0046] 所述第二确定单元,用于获取所述第一确定单元得到的键中指定位置的字符的 ASCII码值,根据所述ASCII码值确定所述数据所属数据块的标识;或者,获取所述第一确 定单元得到的键的散列值,根据所述散列值确定所述数据所属数据块的标识。
[0047] 在第三方面的第一种可能的实现方式中,还提供了第三方面的第二种可能的实现 方式,所述第二确定单元包括:计算子单元和确定子单元;
[0048] 所述计算子单元,用于将所述散列值除以分块数据块的总个数得到余数;
[0049] 所述确定子单元,用于将所述计算子单元得到的余数确定为所述数据所属数据块 的标识。
[0050] 在第三方面或第三方面的前两种任一可能的实现方式中,还提供了第三种可能的 实现方式,所述查询服务器还包括:接收模块;
[0051] 所述接收模块,用于在所述读取模块读取数据之前,接收管理中心服务器发送的 数据分块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数据分块策略 和数据块存储分配策略。
[0052] 在第三方面或第三方面的前三种任一可能的实现方式中,还提供了第四种可能的 实现方式,所述查询服务器还包括:查询模块;
[0053] 所述接收模块,还用于在所述存储模块存储所述数据之后,接收查询客户端发送 的查询请求;所述查询请求携带待查询数据的键;
[0054] 所述查询模块,用于在所述查询服务器所存储的数据中,查找所述查询请求中待 查询数据的键对应的数据。
[0055] 在第三方面的第四种可能的实现方式中,还提供了第五种可能的实现方式,所述 查询服务器还包括:比较模块和发送模块;
[0056] 所述接收模块,还用于在接收查询客户端发送的查询请求之前,接收所述查询客 户端发送的数据分块策略的版本信息和数据块存储分配策略的版本信息;
[0057] 所述比较模块,用于通过比较所述接收模块接收到的所述查询客户端发送的数据 分块策略的版本信息与所述查询服务器中的数据分块策略的版本信息,以及所述接收模块 接收到的所述查询客户端发送的数据块存储分配策略的版本信息与所述查询服务器中的 数据块存储分配策略的版本信息是否一致,确定所述查询客户端中的数据分块策略与所述 查询服务器中的数据分块策略的版本是否相同、或所述查询客户端中的数据块存储分配策 略与所述查询服务器中的数据块存储分配策略的版本是否相同;
[0058] 所述发送模块,用于若所述比较模块得到的所述查询客户端中的数据分块策略与 所述查询服务器中的数据分块策略的版本不同,则将所述查询服务器保存的数据分块策略 发送给所述查询客户端;若所述比较模块得到的所述查询客户端中的数据块存储分配策略 与所述查询服务器中的数据块存储分配策略的版本不同,则将所述查询服务器保存的数据 块存储分配策略发送给所述查询客户端。
[0059] 第四方面,本发明提供了一种查询客户端,包括:
[0060] 获取模块,用于获取待查询数据的键;
[0061] 第一确定模块,用于根据所述获取模块得到的所述待查询数据的键和数据分块策 略,确定所述待查询数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块 的标识;
[0062] 第二确定模块,用于根据数据块存储分配策略,确定所述第一确定模块得到的数 据块的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所 表征的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略 包含数据块的标识与查询服务器标识集合的对应关系;
[0063] 发送模块,用于向所述第二确定模块得到的查询服务器标识集合中的至少一个查 询服务器标识所表征的查询服务器发送查询请求,所述查询请求携带所述待查询数据的 键,以使得所述查询服务器在所述查询服务器所存储的数据中,查找所述待查询数据的键 对应的数据。
[0064] 在第四方面的第一种可能的实现方式中,所述第一确定模块用于获取所述获取模 块得到的待查询数据的键中指定位置的字符的ASCII码值,根据所述ASCII码值确定所述 待查询数据所属数据块的标识;或者,所述第一确定模块还用于获取所述获取模块得到的 待查询数据的键的散列值,根据所述散列值确定所述待查询数据所属数据块的标识。
[0065] 在第四方面的第二种可能的实现方式中,所述第二确定模块包括:计算单元和确 定单元;
[0066] 所述计算单元,用于将所述散列值除以分块数据块的总个数得到余数;
[0067] 所述确定单元,用于将所述计算单元得到的余数确定为所述待查询数据所属数据 块的标识。
[0068] 在第四方面或第四种前两种任一可能的实现方式中,还提供了第四方面的第三种 可能的实现方式,所述发送模块,还用于在查询客户端获取待查询数据的键之前,发送所述 查询客户端中的数据分块策略的版本信息和数据块存储分配策略的版本信息给查询服务 器,以使得查询服务器确定是否需要更新查询客户端中的数据分块策略和数据块存储分配 策略。
[0069] 在第四方面的第三种可能的实现方式中,还提供了第四方面的第四种可能的实现 方式,所述查询客户端还包括:接收模块;所述接收模块,用于若查询服务器确定需要更新 查询客户端的数据分块策略和数据块存储分配策略,接收并保存查询服务器发送的数据分 块策略和数据块存储分配策略。
[0070] 第五方面,本发明提供了一种数据存储和查询的系统,包括:至少一个上述第三方 面、或第三方面的任意一种可能的实现方式所述的查询服务器、至少一个上述第四方面、或 第四方面的任意一种可能的实现方式所述的查询客户端、以及至少一个管理中心服务器;
[0071] 其中,所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策 略,并将所述数据分块策略和数据块存储分配策略发送给所述查询服务器。
[0072] 本发明的实施例提供了一种数据存储方法、数据查询方法、相关装置和系统,查询 服务器根据数据分块策略和数据块存储分配策略对数据进行存储;查询客户端根据数据分 块策略和数据块存储分配策略直接向存储有待查询数据的查询服务器发送查询请求,以在 所述查询服务器所储存的数据中进行数据查找,减少单点故障和性能瓶颈的问题。
【专利附图】
【附图说明】
[0073] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中 所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实 施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图 获得其他的附图。
[0074] 图1为本发明实施例提供的一种数据存储和数据查询的系统示意图;
[0075] 图2为本发明实施例提供的一种数据存储的方法示意图;
[0076] 图3为本发明实施例提供的另一种数据存储的方法示意图;
[0077] 图4为本发明实施例提供的另一种数据存储的方法示意图;
[0078] 图5为本发明实施例提供的一种数据查询的方法示意图;
[0079] 图6为本发明实施例提供的一种数据存储的流程示意图;
[0080] 图7为本发明实施例提供的另一种数据存储的流程示意图;
[0081] 图8为本发明实施例提供的一种数据查询的流程示意图;
[0082] 图9为本发明实施例提供的一种查询服务器的结构示意图;
[0083] 图10为本发明实施例提供的另一种查询服务器的结构示意图;
[0084] 图11为本发明实施例提供的另一种查询服务器的结构示意图;
[0085] 图12为本发明实施例提供的另一种查询服务器的结构示意图;
[0086] 图13为本发明实施例提供的一种查询客户端的结构示意图;
[0087] 图14为本发明实施例提供的另一种查询客户端的结构示意图;
[0088] 图15为本发明实施例提供的另一种查询客户端的结构示意图;
[0089] 图16为本发明实施例提供的一种查询客户端的实体结构示意图;
[0090] 图17为本发明实施例提供的一种查询客户端的实体结构示意图。
【具体实施方式】
[0091] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0092] 本发明提供了一种数据存储和查询的系统,所述系统包括:至少一个查询服务器 和至少一个查询客户端。可选地,该系统还包括至少一个管理中心服务器,如图1所示。为 了提高可靠性,所述系统可以包括至少两个管理中心服务器,其中的一个管理中心服务器 为主服务器,其余的为备份服务器,以便在主管理中心服务器出现故障时,备份管理中心服 务器可以继续为整个系统服务,避免造成系统的瘫痪。
[0093] 其中,所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策 略,并将所述数据分块策略和数据块存储分配策略发送给查询服务器或查询客户端;
[0094] 所述查询服务器用于根据所述数据分块策略和数据块存储分配策略对数据进行 存储,以便查询客户端在存储有待查询数据的查询服务器中进行数据查询;
[0095] 所述查询客户端用于根据所述数据分块策略和数据块存储分配策略对数据,向存 储有待查询数据的查询服务器发送查询请求,以便在存储有待查询数据的查询服务器中查 询到所述待查询数据。
[0096] 针对上述数据存储和查询的系统,本发明实施例提供了 一种数据存储的方法,其 执行主体为一个查询服务器,如图2所示,包括:
[0097] 步骤201、查询服务器读取数据。
[0098] 其中,总量数据为数亿或者数十亿的海量数据,所述海量数据按照一定的格式进 行分条记录。针对于一条记录数据,查询服务器读取该数据,并对该数据执行后续步骤 202?206的处理。
[0099] 步骤202、所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识, 所述数据分块策略用于确定数据所属数据块的标识。
[0100] 其中,所述数据分块策略可以为数据分块算法,所述数据分块算法可以为一个非 常简单的算法,也可以为一个非常复杂的方法,当然不限于此;所述数据分块策略可以初始 化设置的,也可以是中心管理服务器发送给所述查询服务器的,当然不限于此。
[0101] 具体的,所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识包 括:
[0102] 所述查询服务器从所述数据中提取部分数据作为所述数据的键;
[0103] 所述查询服务器获取所述键中指定位置的字符的ASCII码值,根据所述ASCII码 值确定所述数据所属数据块的标识;或者,获取所述键的散列值,根据所述散列值确定所述 数据所属数据块的标识。
[0104] 其中,所述根据所述散列值确定所述数据所属数据块的标识包括:
[0105] 所述散列值除以分块数据块的总个数得到余数;
[0106] 将所述余数确定为所述数据所属数据块的标识。
[0107] 可选的,管理中心服务器可以根据ASCII码值对所述海量数据进行数据分块,由 于ASCII码值共有256 (0?255)种可能,所以可将所述海量数据分为256块。具体的,管 理中心服务器读取一条数据,将所述数据抽象为键值(key-value)对,即从所述数据中提取 部分数据作为所述数据的键(key),所述数据的剩余部分作为值(value);查询服务器获取 到所述数据的key,将所述key中指定位置的字符的ASCII码值作为所述数据所属数据块的 标识(Identify,简称ID),其中,所述指定位置可以是key中的第一个字符,也可以是最后 一个字符,也可以是第一个字符和最后一个字符中任一字符,也可以是key中至少两个指 定位置字符的平均值,当然不限于此。
[0108] 或者可选的,管理中心服务器可以通过计算所述数据键的散列值确定所述数据所 属数据块的标识。其中,所述散列值为将值从一个大的(可能很大)定义域映射到一个较小 值域的(数学)函数,目前常见的散列函数如MD5、SHA-I等。具体的,管理中心服务器将所 述数据抽象为key-value对,计算key的散列值,记作散列值(key),然后利用计算得到的 key的散列值除以总的分块个数η所得到的余数,作为所述数据所属数据块的标识,记作分 块ID ;对于总的分块个数η可以为根据数据的类型进行设定,也可以为根据查询服务器的 存储能力进行设定,当然不限于此。
[0109] 对于通过所述数据的key的散列值,确定所述数据所属数据块的标识,可根据下 面的公式计算得到:
[0110] 分块ID=散列值(key)除以η的余数,
[0111] 即:分块ID=散列值(key) %η。
[0112] 其中,所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识可以 用数字O进行表示;也可以为用字母a进行表示,当然不限于此。
[0113] 步骤203、所述查询服务器根据数据块存储分配策略,确定所述数据块的标识对应 的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务 器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标 识与查询服务器标识集合的对应关系。
[0114] 其中,所述数据块存储分配策略可以为初始配置的,也可以为管理中心服务器发 送的;所述数据块存储分配策略包括:所有数据块的ID与存储所述数据块的查询服务器的 ID之间的映射关系;查询服务器的ID对应一个查询服务器的IP地址。所述数据块存储分 配策略可以为分块数据表,表中记录了每块数据分别被存储到了哪个查询服务器中;也可 以为分块数据图,图中记录了每块数据分别被存储到了哪个查询服务器,当然不限于此。
[0115] 示例的,假设步骤202得到所述数据所属数据块的标识为0,根据所述数据块存储 分配策略得到所述数据块的标识0对应的查询服务器标识集合为0和1,即标识为0和1的 查询服务器存储了标识为0的数据块。
[0116] 步骤204、若所述查询服务器标识集合中包括所述查询服务器的标识,则所述查询 服务器存储所述数据;否则所述查询服务器不存储所述数据。
[0117] 示例的,假设根据步骤203可以得到,所述数据所属数据块的标识为0,标识为0和 1的查询服务器均存储了所述数据所属数据块。若当前查询服务器的标识为〇或者1时,即 所述查询服务器标识集合中包括所述查询服务器的标识,则该查询服务器存储所述数据; 若当前查询服务器的标识为2,即所述查询服务器标识集合中不包括所述查询服务器的标 识,则当前的查询服务器不存储所述数据。
[0118] 进一步的,针对上述数据存储方法中所述的数据分块策略和数据块存储分配策 略,所述数据分块策略可以为初始化时配置的,所述数据块存储分配策略为管理中心服务 器发送的。
[0119] 进一步的,针对上述数据存储方法中所述的数据分块策略和数据块存储分配策 略,所述查询服务器读取数据之前,即在步骤201之前,所述方法还包括:接收管理中心服 务器发送的数据分块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数 据分块策略和数据块存储分配策略。
[0120] 查询服务器中的数据分块策略和数据块存储分配策略无论是初始化配置的,还是 管理中心服务器发送的,查询服务器都需要对数据分块策略和数据块存储分配策略进行保 存,并根据保存的数据分块策略和数据块存储分配策略存储数据。
[0121] 在所述查询服务器存储所述数据之后,如图3所示,所述方法还包括:
[0122] 步骤205、接收查询客户端发送的查询请求;所述查询请求携带待查询数据的键;
[0123] 步骤206、在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的 键对应的数据。
[0124] 进一步的,在所述查询服务器接收查询客户端发送的查询请求之前,如图4所示, 所述方法还包括:
[0125] 步骤401、接收所述查询客户端发送的数据分块策略的版本信息和数据块存储分 配策略的版本信息。
[0126] 步骤402、通过比较所述查询客户端发送的数据分块策略的版本信息与所述查询 服务器中的数据分块策略的版本信息,以及所述查询客户端发送的数据块存储分配策略的 版本信息与所述查询服务器中的数据块存储分配策略的版本信息是否一致,确定所述查询 客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本是否相同、或所述查 询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本是 否相同。
[0127] 步骤403、若所述查询客户端中的数据分块策略与所述查询服务器中的数据分块 策略的版本不同,则所述查询服务器将其保存的数据分块策略发送给所述查询客户端;若 所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配策略的 版本不同,则所述查询服务器将其保存的数据块存储分配策略发送给所述查询客户端。
[0128] 本发明的实施例提供了一种数据存储方法,查询服务器根据数据分块策略和数据 块存储分配策略对数据进行存储,以使得查询客户端根据数据分块策略和数据块存储分配 策略直接向存储有待查询数据的查询服务器发送查询请求,以在所述查询服务器所储存的 数据中进行数据查找,减少单点故障和性能瓶颈的问题。
[0129] 本发明提供了一种数据查询方法,其执行主体为查询客户端,如图5所示,包括:
[0130] 步骤501、查询客户端获取待查询数据的键。
[0131] 其中,所述待查询数据的键为待查询数据中一部分。
[0132] 步骤502、所述查询客户端根据所述待查询数据的键和数据分块策略,确定所述待 查询数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标识。
[0133] 其中,所述数据分块策略可以为数据分块算法,所述数据分块算法可以为一个非 常简单的算法,也可以为一个非常复杂的算法,当然不限于此;所述数据分块策略可以初始 化设置的,也可以是中心管理服务器发送给所述查询服务器的,当然不限于此。
[0134] 具体的,所述查询客户端根据所述待查询数据的键和数据分块策略,获取所述待 查询数据所属数据块的标识包括:
[0135] 所述查询客户端获取所述待查询数据的键中指定位置的字符的ASCII码值,根据 所述ASCII码值确定所述待查询数据所属数据块的标识;或者,获取所述待查询数据的键 的散列值,根据所述散列值确定所述待查询数据所属数据块的标识。
[0136] 其中,所述根据所述散列值获取所述待查询数据所属数据块的标识包括:
[0137] 所述散列值除以分块数据块的总个数得到余数;
[0138] 将所述余数确定为所述待查询数据所属数据块的标识。
[0139] 可选的,管理中心服务器可以根据ASCII码值对所述海量数据进行数据分块,由 于ASCII码值共有256 (0?255)种可能,所以可将所述海量数据分为256块。具体的, 管理中心服务器读取一条数据记录,将所述数据抽象为key-value对,即从所述数据中提 取部分数据作为所述数据的key,所述数据的剩余部分作为value ;查询服务器通过获取到 所述数据的key,可以将所述key中指定位置的字符的ASCII码值作为所述数据所属数据 块的ID,其中,所述指定位置可以是key中的第一个字符,也可以是最后一个字符,也可以 是第一个字符和最后一个字符中任一字符,也可以是key中至少两个指定位置字符的平均 值,当然不限于此。
[0140] 或者可选的,管理中心服务器可以通过计算所述数据键的散列值确定所述数据所 属数据块的标识。其中,所述散列值为将值从一个大的(可能很大)定义域映射到一个较小 值域的(数学)函数,目前常见的散列函数如MD5、SHA-I等。具体的,管理中心服务器将所 述数据抽象为key-value对,计算key的散列值,记作散列值(key),然后利用计算得到的 key的散列值除以总的分块个数η所得到的余数,作为所述数据所属数据块的标识,记作分 块ID,对于总的分块个数η可以为根据数据的类型进行设定,也可以为根据查询服务器的 存储能力进行设定,当然不限于此;
[0141] 对于通过所述数据的key的散列值,确定所述数据所属数据块的标识,可根据下 面的公式计算得到:
[0142] 分块ID=散列值(key)除以η的余数,
[0143] S卩:分块 ID=散列值(key) %η。
[0144] 其中,所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识可以 用数字〇进行表示;也可以为用字母a进行表示,当然不限于此。
[0145] 步骤503、所述查询客户端根据数据块存储分配策略,确定所述数据块的标识对应 的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务 器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标 识与查询服务器标识集合的对应关系。
[0146] 其中,所述数据块存储分配策略可以为初始配置的,也可以为管理中心服务器发 送的;所述数据块存储分配策略包括:所有数据块的ID与存储所述数据块的查询服务器的 ID之间的映射关系;查询服务器的ID对应一个查询服务器的IP地址。所述数据块存储分 配策略可以为分块数据表,表中记录了每块数据分别被存储到了哪个查询服务器中;也可 以为分块数据图,图中记录了每块数据分别被存储到了哪个查询服务器,当然不限于此。
[0147] 可选的,所述查询客户端根据数据块存储分配策略,确定所述查询服务器标识集 合中只包含一个查询服务器标识。
[0148] 或者可选的,所述查询客户端根据数据块存储分配策略,确定所述查询服务器标 识集合中包含至少一个查询服务器标识。
[0149] 示例的,若经过步骤403得到所述数据所属数据块的标识为0,根据所述数据块存 储分配策略得到所述数据块的标识〇对应的查询服务器标识集合为〇和1,即标识为〇和1 的查询服务器存储了标识为〇的数据块。
[0150] 步骤504、所述查询客户端向所述查询服务器标识集合中的至少一个查询服务器 标识所表征的查询服务器发送查询请求,所述查询请求中携带所述待查询数据的键,以使 得在所述查询服务器所存储的数据中,查找所述查询请求中待查询数据的键对应的数据; 其中,所述查询服务器存储了所述查询服务器对应的数据块所包含的数据。
[0151] 可选的,若所述查询服务器标识集合中只有一个查询服务器标识,则查询客户端 向所述查询服务器标识所表征的查询服务器发送查询请求,以使得所述查询服务器根据所 述查询请求查询所述待查询数据。
[0152] 或者可选的,若所述查询服务器标识集合中包含至少一个查询服务器标识,则查 询客户端向所述查询服务器标识集合中的至少一个查询服务器所表征的查询服务器发送 查询请求,以使得所述查询服务器根据所述查询请求查询所述待查询数据。查询客户端可 以选择向物理距离近的查询服务器发送查询请求,也可以选择向响应速度快的查询服务器 发送查询请求,当然不限于此。
[0153] 当同一数据被存储到多个查询服务器时,当其中一台查询服务器失效时,查询客 户端可以向其他查询服务器发送查询请求,以使得所述查询服务器根据所述查询请求进行 数据查询。
[0154] 进一步的,所述查询客户端根据所述待查询数据的键和数据分块策略,确定所述 待查询数据所属数据块的标识之前,所述方法还包括:
[0155] 所述查询客户端发送所述查询客户端中的数据分块策略的版本信息和数据块存 储分配策略的版本信息给查询服务器,以使得所述查询服务器确定是否需要更新所述查询 客户端中的数据分块策略和数据块存储分配策略。
[0156] 若查询服务器确定需要更新所述查询客户端的数据分块策略和数据块存储分配 策略,所述方法还包括:接收并保存所述查询服务器发送的数据分块策略和数据块存储分 配策略。
[0157] 本发明的实施例提供了一种数据查询方法,查询客户端根据数据分块策略和数据 块存储分配策略直接向存储有待查询数据的查询服务器发送查询请求,以在所述查询服务 器所储存的数据中进行数据查找,减少单点故障和性能瓶颈的问题。
[0158] 实施例一、
[0159] 下面,根据上述数据存储和查询的系统,本发明实施例提供了一具体实例,对上述 数据存储和查询的方法进行详述。
[0160] 本发明实施例中,可以将数据分块策略和数据块存储分配策略作为一个预先的约 定,以一个固定的逻辑算法程序预置到管理中心服务器、查询服务器和查询客户端的设备 中,数据块存储分配策略为管理中心服务器根据所述数据分块策略得到的。在本发明实施 例中,管理中心服务器可以对数据分块策略和数据块存储分配策略进行更新,并将更新后 的数据分块策略和数据块存储分配策略发送给查询服务器,查询客户端可以通过管理中心 服务器或者查询服务器获取更新后的数据分块策略和数据块存储分配策略。具体的,对于 数据存储和查询的方法包括:
[0161] A、管理中心服务器根据数据分块策略对海量数据进行分块并构造数据块存储分 配策略,向各个查询服务器发送所述数据块存储分配策略。其中,数据分块策略为具体的数 据分块算法,数据块存储分配策略为具体的分块数据表,如图6所示,具体步骤包括:
[0162] (Al)确定海量URL数据。
[0163] 其中,所述数据是按照一定格式存储的分条记录,只是记录的数目非常庞大,通常 会达到数亿到数十亿的规模。以URL过滤为例,要提供高品质的URL过滤服务,需要收集海 量的URL,通常是数亿的域名级和和数十亿的页面级信息,可以对这些信息进行分类,每个 域名和页面都对应到一个基于内容的分类中,例如人文类、论坛类、军事类、低俗类等等,有 的还会提供域名的安全信誉等级。下面是URL分类数据的记录示例:
[0164] ci. stevens-point. wi. us,1,108, 0, 0, 269041,1,127. 0· 0· 1,0, 0, 1
[0165] lymanestate. org,1,103, 0, 0, 82795, 1,127. 0· 0· 1,0, 0, I
[0166] maxwell, ayell-nz. com,1,223, 0, 0, 178295, 1,127. 0· 0· 1,0, 0, I
[0167] www. qilu. org. cn,1,223, 0, 0, 265411,1,127. 0· 0· 1,0, 0, I
[0168] www. ekozik. com,1,168, 0, 0, 244087, 1,127. 0· 0· 1,0, 0, I
[0169] www. hotell547. c. la,1,131,0, 0, 301843, 1,127. 0· 0· 1,0, 0, I
[0170] nmoi. madeintrust. com, I, 114, 0, 0, 315999, I, 127. 0. 0. I, 0, 0, 1
[0171] kofc. stceciliacalgary. com, 1, 154, 0, 0, 101558, 1, 127. 0. 0. 1, 0, 0, 1
[0172] uponl88. cn-sos. com, I, 220, 0, 0, 108332, 1, 127. 0. 0. 1, 0, 0, 1
[0173] www. tumortherapy. com, I, 136, 0, 0, 11352, 1, 127. 0. 0. 1, 0, 0, 1
[0174] (Α2)将URL数据抽象为key-value对,得到URL数据的key。
[0175] 如表1所示,对于上面的数据,将URL作为key,其他所有信息作为value,则对上 面示例的数据抽象之后的形式变为:
[0176] 表 1
[0177]
【权利要求】
1. 一种数据存储方法,其特征在于,包括: 查询服务器读取数据; 所述查询服务器根据数据分块策略,确定所述数据所属数据块的标识,所述数据分块 策略用于确定数据所属数据块的标识; 所述查询服务器根据数据块存储分配策略,确定所述数据块的标识对应的查询服务器 标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所 述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务 器标识集合的对应关系; 若所述查询服务器标识集合中包括所述查询服务器的标识,则所述查询服务器存储所 述数据;否则所述查询服务器不存储所述数据。
2. 根据权利要求1所述的方法,其特征在于,所述查询服务器根据数据分块策略,确定 所述数据所属数据块的标识包括: 所述查询服务器从所述数据中提取部分数据作为所述数据的键; 所述查询服务器获取所述键中指定位置的字符的ASCII码值,根据所述ASCII码值确 定所述数据所属数据块的标识;或者,获取所述键的散列值,根据所述散列值确定所述数据 所属数据块的标识。
3. 根据权利要求2所述的方法,其特征在于,所述根据所述散列值确定所述数据所属 数据块的标识包括: 所述散列值除以分块数据块的总个数得到余数; 将所述余数确定为所述数据所属数据块的标识。
4. 根据权利要求1-3任一项所述的方法,其特征在于, 所述查询服务器读取数据之前,所述方法还包括:接收管理中心服务器发送的数据分 块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数据分块策略和数据 块存储分配策略。
5. 根据权利要求1-4任一项所述的方法,其特征在于,所述查询服务器存储所述数据 之后,所述方法还包括: 接收查询客户端发送的查询请求,所述查询请求携带待查询数据的键; 在所述查询服务器所存储的数据中,查找所述待查询数据的键对应的数据。
6. 根据权利要求5所述的方法,其特征在于,所述接收查询客户端发送的查询请求之 前,所述方法还包括: 接收所述查询客户端发送的数据分块策略的版本信息和数据块存储分配策略的版本 信息; 通过比较所述查询客户端发送的数据分块策略的版本信息与所述查询服务器中的数 据分块策略的版本信息,以及所述查询客户端发送的数据块存储分配策略的版本信息与所 述查询服务器中的数据块存储分配策略的版本信息是否一致,确定所述查询客户端中的数 据分块策略与所述查询服务器中的数据分块策略的版本是否相同、或所述查询客户端中的 数据块存储分配策略与所述查询服务器中的数据块存储分配策略的版本是否相同; 若所述查询客户端中的数据分块策略与所述查询服务器中的数据分块策略的版本不 同,则所述查询服务器将其保存的数据分块策略发送给所述查询客户端; 若所述查询客户端中的数据块存储分配策略与所述查询服务器中的数据块存储分配 策略的版本不同,则所述查询服务器将其保存的数据块存储分配策略发送给所述查询客户 端。
7. -种数据查询方法,其特征在于,包括: 查询客户端获取待查询数据的键; 所述查询客户端根据所述待查询数据的键和数据分块策略,确定所述待查询数据所属 数据块的标识,所述数据分块策略用于确定数据所属数据块的标识; 所述查询客户端根据数据块存储分配策略,确定所述数据块的标识对应的查询服务器 标识集合,所述查询服务器标识集合中的查询服务器标识所表征的查询服务器用以存储所 述数据块的标识所表征的数据块,所述数据块存储分配策略包含数据块的标识与查询服务 器标识集合的对应关系; 所述查询客户端向所述查询服务器标识集合中的至少一个查询服务器标识所表征的 查询服务器发送查询请求,所述查询请求携带所述待查询数据的键,以使得所述查询服务 器在所述查询服务器所存储的数据中,查找所述待查询数据的键对应的数据。
8. 根据权利要求7所述的方法,其特征在于,所述查询客户端根据所述待查询数据的 键和数据分块策略,获取所述待查询数据所属数据块的标识包括: 所述查询客户端获取所述待查询数据的键中指定位置的字符的ASCII码值,根据所述 ASCII码值确定所述待查询数据所属数据块的标识;或者,获取所述待查询数据的键的散 列值,根据所述散列值确定所述待查询数据所属数据块的标识。
9. 根据权利要求8所述的方法,其特征在于,所述根据所述散列值获取所述待查询数 据所属数据块的标识: 所述散列值除以分块数据块的总个数得到余数; 将所述余数确定为所述待查询数据所属数据块的标识。
10. 根据权利要求7-9任一项所述的方法,其特征在于,所述查询客户端根据所述待查 询数据的键和数据分块策略,确定所述待查询数据所属数据块的标识之前,所述方法还包 括: 所述查询客户端发送所述查询客户端中的数据分块策略的版本信息和数据块存储分 配策略的版本信息给查询服务器,以使得所述查询服务器确定是否需要更新所述查询客户 端中的数据分块策略和数据块存储分配策略。
11. 根据权利要求10所述的方法,其特征在于,若查询服务器确定需要更新所述查询 客户端的数据分块策略和数据块存储分配策略,所述方法还包括: 接收并保存所述查询服务器发送的数据分块策略和数据块存储分配策略。
12. -种查询服务器,其特征在于,包括: 读取模块,用于读取数据; 第一确定模块,用于根据数据分块策略,确定所述读取模块读取到的数据所属数据块 的标识,所述数据分块策略用于确定数据所属数据块的标识; 第二确定模块,用于根据数据块存储分配策略,确定所述第一确定模块得到的数据块 的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征 的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含 数据块的标识与查询服务器标识集合的对应关系; 存储模块,用于若所述第二确定模块得到的查询服务器标识集合中包括所述查询服务 器的标识,则存储所述数据;否则不存储所述数据。
13. 根据权利要求12所述的查询服务器,其特征在于,所述第一确定模块包括:第一确 定单元和第二确定单元; 所述第一确定单元,用于从所述读取模块中读取到的数据中提取部分数据作为所述数 据的键; 所述第二确定单元,用于获取所述第一确定单元得到的键中指定位置的字符的ASCII 码值,根据所述ASCII码值确定所述数据所属数据块的标识;或者,获取所述第一确定单元 得到的键的散列值,根据所述散列值确定所述数据所属数据块的标识。
14. 根据权利要求13所述的查询服务器,其特征在于,所述第二确定单元包括:计算子 单元和确定子单元; 所述计算子单元,用于将所述散列值除以分块数据块的总个数得到余数; 所述确定子单元,用于将所述计算子单元得到的余数确定为所述数据所属数据块的标 识。
15. 根据权利要求12-14任一项所述的查询服务器,其特征在于,所述查询服务器还包 括:接收1吴块; 所述接收模块,用于在所述读取模块读取数据之前,接收管理中心服务器发送的数据 分块策略和数据块存储分配策略;所述管理中心服务器用于更新和维护数据分块策略和数 据块存储分配策略。
16. 根据权利要求15所述的查询服务器,其特征在于,所述查询服务器还包括:查询模 块; 所述接收模块,还用于在所述存储模块存储所述数据之后,接收查询客户端发送的查 询请求;所述查询请求携带待查询数据的键; 所述查询模块,用于在所述查询服务器所存储的数据中,查找所述待查询数据的键对 应的数据。
17. 根据权利要求16所述的查询服务器,其特征在于,所述查询服务器还包括:比较模 块和发送模块; 所述接收模块,还用于在接收查询客户端发送的查询请求之前,接收所述查询客户端 发送的数据分块策略的版本信息和数据块存储分配策略的版本信息; 所述比较模块,用于通过比较所述接收模块接收到的所述查询客户端发送的数据分块 策略的版本信息与所述查询服务器中的数据分块策略的版本信息,以及所述接收模块接收 到的所述查询客户端发送的数据块存储分配策略的版本信息与所述查询服务器中的数据 块存储分配策略的版本信息是否一致,确定所述查询客户端中的数据分块策略与所述查询 服务器中的数据分块策略的版本是否相同、或所述查询客户端中的数据块存储分配策略与 所述查询服务器中的数据块存储分配策略的版本是否相同; 所述发送模块,用于若所述比较模块得到的所述查询客户端中的数据分块策略与所述 查询服务器中的数据分块策略的版本不同,则将所述查询服务器保存的数据分块策略发送 给所述查询客户端;若所述比较模块得到的所述查询客户端中的数据块存储分配策略与所 述查询服务器中的数据块存储分配策略的版本不同,则将所述查询服务器保存的数据块存 储分配策略发送给所述查询客户端。
18. -种查询客户端,其特征在于,包括: 获取模块,用于获取待查询数据的键; 第一确定模块,用于根据所述获取模块得到的所述待查询数据的键和数据分块策略, 确定所述待查询数据所属数据块的标识,所述数据分块策略用于确定数据所属数据块的标 识; 第二确定模块,用于根据数据块存储分配策略,确定所述第一确定模块得到的数据块 的标识对应的查询服务器标识集合,所述查询服务器标识集合中的查询服务器标识所表征 的查询服务器用以存储所述数据块的标识所表征的数据块,所述数据块存储分配策略包含 数据块的标识与查询服务器标识集合的对应关系; 发送模块,用于向所述第二确定模块得到的查询服务器标识集合中的至少一个查询服 务器标识所表征的查询服务器发送查询请求,所述查询请求携带所述待查询数据的键,以 使得所述查询服务器在所述查询服务器所存储的数据中,查找所述待查询数据的键对应的 数据。
19. 根据权利要求18所述的查询客户端,其特征在于, 所述第一确定模块用于获取所述获取模块得到的待查询数据的键中指定位置的字符 的ASCII码值,根据所述ASCII码值确定所述待查询数据所属数据块的标识;或者,所述第 一确定模块还用于获取所述获取模块得到的待查询数据的键的散列值,根据所述散列值确 定所述待查询数据所属数据块的标识。
20. 根据权利要求19所述的查询客户端,其特征在于,所述第二确定模块包括:计算单 元和确定单元; 所述计算单元,用于将所述散列值除以分块数据块的总个数得到余数; 所述确定单元,用于将所述计算单元得到的余数确定为所述待查询数据所属数据块的 标识。
21. 根据权利要求18-20任一项所述的查询客户端,其特征在于, 所述发送模块,还用于在查询客户端获取待查询数据的键之前,发送所述查询客户端 中的数据分块策略的版本信息和数据块存储分配策略的版本信息给查询服务器,以使得查 询服务器确定是否需要更新查询客户端中的数据分块策略和数据块存储分配策略。
22. 根据权利要求21所述的查询客户端,其特征在于,所述查询客户端还包括:接收模 块; 所述接收模块,用于若查询服务器确定需要更新查询客户端的数据分块策略和数据块 存储分配策略,接收并保存查询服务器发送的数据分块策略和数据块存储分配策略。
23. -种数据存储和查询的系统,其特征在于,包括:权利要求12-17任一项所述的至 少一个查询服务器、权利要求18-22任一项所述的至少一个查询客户端、以及至少一个管 理中心服务器; 其中,所述管理中心服务器用于更新和维护数据分块策略和数据块存储分配策略,并 将所述数据分块策略和数据块存储分配策略发送给所述查询服务器。
【文档编号】G06F17/30GK104424316SQ201310403957
【公开日】2015年3月18日 申请日期:2013年9月6日 优先权日:2013年9月6日
【发明者】李有永 申请人:华为技术有限公司