本发明涉及数据库技术领域,特别涉及数据查询服务器的数据处理方法及装置、数据处理系统。
背景技术:
随着数据的大量存储,针对传统的关系型数据库,有时会采用分表分库的形式,将大量数据按照一定的规则,存储到不同数据库的不同表中。但是针对分表分库的情况,查询的效率受到很大影响,特别是针对复杂条件的组合查询,问题更为突出。因此如何提高数据查询效率成为需要解决的问题。
技术实现要素:
本发明实施例提供了数据查询服务器的数据处理方法及装置、数据处理系统。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。
根据本发明实施例的第一方面,提供了一种数据查询服务器的数据处理方法,所述方法包括:
接收数据装载服务器插入的更新数据,所述更新数据由所述数据装载服务器从至少两个分表数据库中抽取;
为所述更新数据创建用于数据查询的倒排索引。
可选的,所述为所述更新数据建立用于数据查询的倒排索引,包括:
根据所在集群中各数据查询服务器的负载,确定为所述更新数据创建倒排索引的数据查询服务器;
将所述更新数据分成数据分片、并将各数据分片分配给确定出的数据查询服务器;
当有分配给本数据查询服务器的数据分片时,针对分配给本数据查询服务器的数据分片创建倒排索引,并索引至本数据查询服务器的索引分片中。
进一步,所述分配给本数据查询服务器的数据分片,包括:
本数据查询服务器分配的数据分片;或者,
所在集群中其他数据查询服务器分配的数据分片;或者,
本数据查询服务器分配的数据分片和所在集群中其他数据查询服务器分配的数据分片。
进一步,所述方法还包括:
当针对分配给本数据查询服务器的数据分片创建倒排索引失败时,如果创建失败的数据分片由本数据查询服务器分配,向插入所述创建失败的数据分片的数据装载服务器发送创建失败消息,如果所述创建失败的数据分片由所在集群中的其他数据查询服务器分配,向分配所述创建失败的数据分片的数据查询服务器发送创建失败消息;所述创建失败消息中携带所述创建失败的数据分片的标识;
接收重新发送的所述创建失败的数据分片,为所述创建失败的数据分片创建倒排索引,并索引至本数据查询服务器的索引分片中。
可选的,所述根据所在集群中各数据查询服务器的负载,确定为所述更新数据创建倒排索引的数据查询服务器,包括:
获取所在集群中各数据查询服务器的权重,所述权重越大的数据查询服务器对应的负载越小;
选择权重大于设定阈值的数据查询服务器,作为为所述更新数据创建倒排索引的数据查询服务器。
可选的,所述方法还包括:
接收数据查询请求;
根据所在集群中各数据查询服务器的负载,将所述数据查询请求分配给所在集群中的数据查询服务器;
当有分配给本数据查询服务器的数据查询请求时,根据所述分配给本查询服务器的数据查询请求,查询本数据查询服务器及所在集群其他各数据查询服务器中的索引分片;根据查询结果应答所述分配给本数据查询服务器的数据查询请求。
可选的,所述接收数据装载服务器插入的更新数据,包括:接收至少两个数据装载服务器插入的更新数据;
其中,每个所述数据装载服务器用于按照设定抽取方式,从所述至少两个分表数据库中抽取本数据装载服务器负责的更新数据。
可选的,所述抽取方式,包括以下至少一项:
抽取对应存储时间的更新数据;
抽取对应地理位置来源的更新数据;
抽取对应类别的更新数据。
根据本发明实施例的第二方面,提供一种数据查询服务器的数据处理装置,所述装置包括:
第一接收模块,用于接收数据装载服务器插入的更新数据;所述更新数据由所述数据装载服务器从至少两个分表数据库中抽取;
索引创建模块,用于为所述更新数据建立用于数据查询的倒排索引。
可选的,所述索引创建模块,包括:
负载均衡子模块,用于根据所在集群中各数据查询服务器的负载,确定为所述更新数据创建倒排索引的数据查询服务器;
分配子模块,用于将所述更新数据分成数据分片、并将各数据分片分配给确定出的数据查询服务器;
创建子模块,用于在有分配给本数据查询服务器的数据分片时,针对分配给本数据查询服务器的数据分片创建倒排索引,并索引本数据查询服务器的索引分片中。
进一步,所述第一接收模块,还用于接收所在集群中其他数据查询服务器分配的数据分片;
所述分配给本数据查询服务器的数据分片,包括:所述分配子模块分配的数据分片;或者,所在集群中其他数据查询服务器分配的数据分片;或者所述分配子模块分配的数据分片和所在集群中其他数据查询服务器分配的数据分片。
进一步,所述装置还包括:
发送模块,用于在针对分配给本数据查询服务器的数据分片创建倒排索引失败时,如果创建失败的数据分片由本数据查询服务器分配,向插入所述创建失败的数据分片的数据装载服务器发送创建失败消息,如果所述创建失败的数据分片由所在集群中的其他数据查询服务器分配,向分配所述创建失败的数据分片的数据查询服务器发送创建失败消息;所述创建失败消息中携带所述创建失败的数据分片的标识;
所述第一接收模块,还用于接收重新发送的所述创建失败的数据分片,并触发所述创建子模块执行操作。
可选的,所述负载均衡子模块,包括:
获取子模块,用于获取所在集群中各数据查询服务器的权重,所述权重越大的数据查询服务器对应的负载越小;
选择子模块,用于选择权重大于设定阈值的数据查询服务器,作为为所述更新数据创建倒排索引的数据查询服务器。
可选的,所述装置还包括:
第二接收模块,用于接收数据查询请求;
负载均衡模块,用于根据所在集群中各个数据查询服务器的负载,将所述数据查询请求分配给所在集群中的数据查询服务器;
查询模块,用于在有分配给本数据查询服务器的数据查询请求时,根据所述分配给本数据查询服务器的数据查询请求,查询本数据查询服务器及所在集群其他各数据查询服务器中的索引分片;根据查询结果应答所述分配给本数据查询服务器的数据查询请求。
可选的,所述第一接收模块,接收至少两个数据装载服务器插入的更新数据;
其中,每个所述数据装载服务器用于按照设定抽取方式,从所述至少两个分表数据库中抽取本数据装载服务器负责的更新数据。
进一步,所述抽取方式,包括以下至少一项:
抽取对应存储时间的更新数据;
抽取对应地理位置来源的更新数据;
抽取对应类别的更新数据。
根据本发明实施例的第三方面,提供一种数据处理系统,所述系统包括:数据装载服务器和数据查询服务器;
所述数据装载服务器,用于从至少两个分表数据库中抽取更新数据,将所述更新数据插入所述数据查询服务器中;
所述数据查询服务器,用于为所述更新数据创建用于数据查询的倒排索引。
本发明实施例提供的技术方案可以包括以下有益效果:
一方面,由数据装载服务器从至少两个分表数据库中抽取更新数据、并插入数据查询服务器,相当于将分表分库的数据重新构建在一张表中,从而能够解决分表分库带来的问题,更好的支持复杂条件的组合查询,另一方面,数据查询服务器为更新数据建立用于数据查询的倒排索引,在支持复杂条件组合查询的前提下,进一步提高了查询效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的数据处理系统架构框图;
图2是根据一示例性实施例示出的数据处理系统架构框图;
图3是根据一示例性实施例示出的一种数据查询服务器的数据处理方法的流程示意图;
图4是根据一示例性实施例示出的一种数据查询服务器的数据处理方法的流程示意图;
图5是根据一示例性实施例示出的一种数据查询服务器的数据处理装置50的框图;
图6是根据一示例性实施例示出的一种数据查询服务器的数据处理装置60的框图。
具体实施方式
以下描述和附图充分地示出本发明的具体实施方案,以使本领域的技术人员能够实践它们。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施方案的部分和特征可以被包括在或替换其他实施方案的部分和特征。本发明的实施方案的范围包括权利要求书的整个范围,以及权利要求书的所有可获得的等同物。在本文中,各实施方案可以被单独地或总地用术语“发明”来表示,这仅仅是为了方便,并且如果事实上公开了超过一个的发明,不是要自动地限制该应用的范围为任何单个发明或发明构思。本文中,诸如第一和第二等之类的关系术语仅仅用于将一个实体或者操作与另一个实体或操作区分开来,而不要求或者暗示这些实体或操作之间存在任何实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素。本文中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的结构、产品等而言,由于其与实施例公开的部分相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
图1是根据一示例性实施例示出的数据处理系统架构框图。
如图1所示的系统包括:数据存储层、数据装载层和数据索引层。其中,数据存储层包含数据存储服务器,保存有至少两个分表数据库。数据装载层包含数据装载服务器,从上述至少两个分表数据库中抽取更新数据、并插入数据索引层。数据索引层包含数据查询服务器,为插入的更新数据创建用于数据查询的倒排索引。
作为一种可选的实施方式,图2是根据一示例性实施例示出的数据处理系统架构框图。与图1所示系统相比,图2中的数据处理系统增加了数据采集层和负载均衡层。
数据采集层包含用于采集数据的客户端。
负载均衡层包含至少两个负载均衡服务器,负载均衡服务器可以由Nginx实现,并由Nginx上的Keeplived实现故障检测和状态正常服务器的选择。
数据存储层包含数据存储服务器集群,该集群中包含至少两个数据存储服务器,由负载均衡服务器来选择将采集的数据存储在哪一个数据存储服务器中。数据存储服务器可以按照不同的规则存储数据。其中,可以按照对应存储时间存储数据,例如不同日期的数据存储在不同的存储服务器上。也可以按照地理位置来源来存储数据,例如来自于不同地区的数据存储在不同的存储服务器上。
数据装载层包含数据装载服务器集群,该集群中包含至少两个数据装载服务器,每个数据装载服务器按照设定抽取方式,从数据存储服务器的至少两个分表数据库中抽取更新数据。
上述设定抽取方式,可以是抽取对应存储时间的更新数据。假设数据装载层包括数据装载服务器1、数据装载服务器2和数据装载服务器3。其中,数据装载服务器1抽取2016年12月25日存储的数据,数据装载服务器2抽取2016年12月26日存储的数据,数据装载服务器3抽取2016年12月27日存储的数据。在下一次抽取中,数据装载服务器1抽取2016年12月28日存储的数据,数据装载服务器2抽取2016年12月29日存储的数据,数据装载服务器3抽取2016年12月30日抽取的数据。每次抽取都按上述方式以此类推。在这种抽取方式下,可以每隔3天就由3台数据装载服务器抽取一次更新数据。
上述抽取方式,也可以是抽取对应地理位置来源的更新数据。假设数据装载层包括数据装载服务器1、数据装载服务器2和数据装载服务器3。其中,数据装载服务器1抽取来源于北京的存储数据,数据装载服务器2抽取来源于上海的存储数据,数据装载服务器3抽取来源于杭州的存储数据。在这种抽取方式下,可以设定数据装载服务器抽取更新数据的时间,例如每隔12小时抽取一次。
上述抽取方式,还可以是抽取对应类别的更新数据。假设数据装载层包括数据装载服务器1、数据装载服务器2和数据装载服务器3。其中,数据装载服务器1抽取身份标识数据,数据装载服务器2抽取通信标识数据,数据装载服务器3抽取银行账号数据。在这种抽取方式下,可以设定数据装载服务器抽取更新数据的时间,例如每隔12小时抽取一次。
数据装载服务器抽取更新数据的方式,并不受限于数据存储服务器存储数据的规则,无论数据存储服务器按照哪种规则存储数据,每个数据装载服务器都可以从至少一个数据存储服务器中按照上述抽取方式抽取更新数据。
数据索引层包含数据查询服务器集群,该集群中包含至少两个数据查询服务器。上述至少两个数据查询服务器之间没有主次节点之分,并且能够在数据索引层中进行负载均衡处理,下文的步骤中将进行详细描述。
可以看出,图2所示的数据处理系统中,数据存储层、数据装载层和数据索引层都可以动态扩展节点,有利于扩展系统的并发能力,提高数据查询效率。
图3是根据一示例性实施例示出的一种数据查询服务器的数据处理方法的流程示意图,该流程基于图1所示系统中的数据查询服务器实现,包括如下步骤。
在步骤31中,接收数据装载服务器插入的更新数据,更新数据由数据装载服务器从至少两个分表数据库中抽取。
在步骤32中,为更新数据建立用于数据查询的倒排索引。
可以看出,在图3所示的数据查询服务器的数据处理方法中,一方面,由数据装载服务器从至少两个分表数据库中抽取更新数据、并插入数据查询服务器,相当于将分表分库的数据重新构建在一张表中,从而能够解决分表分库带来的问题,更好的支持复杂条件的组合查询,另一方面,数据查询服务器为更新数据建立用于数据查询的倒排索引,在支持复杂条件组合查询的前提下,进一步提高了查询效率。
图4是根据一示例性实施例示出的一种数据查询服务器的数据处理方法的流程示意图,该流程基于图2所示系统中的数据查询服务器实现,包括如下步骤。
在步骤41中,接收数据装载服务器插入的更新数据,更新数据由数据装载服务器从至少两个分表数据库中抽取。
作为一种可选的实施方式,可以接收至少两个数据装载服务器插入的更新数。每个数据装载服务器都可以按照设定抽取方式,从至少两个分表数据库中抽取自己负责的更新数据。抽取方式的可选实施方式,与图2所示系统中的对应部分一致。
在步骤42中,根据所在集群中各数据查询服务器的负载,确定为所述更新数据创建倒排索引的数据查询服务器。
作为一种可选的实施方式,每个数据查询服务器对应一个权重,权重越大的数据查询服务器对应的负载越小。根据负载均衡原则,可以设定一个权重阈值,选择权重大于设定阈值的数据查询服务器,作为为更新数据创建倒排索引的数据查询服务器。
在步骤43中,将更新数据分成数据分片、并将各数据分片分配给确定出的数据查询服务器。
作为一种可选的实施方式,每个数据分片的大小可以不同,根据步骤42中确定出的数据查询服务器的权值,权值越大的数据查询服务器负载越小,数据处理能力也越强,因此分配的数据分片可以越大。
在步骤44中,当有分配给本数据查询服务器的数据分片时,针对分配给本数据查询服务器的数据分片创建倒排索引,并索引至本数据查询服务器的索引分片中。
由于多个数据查询服务器之间没有主次节点之分,因此分配给一个数据查询服务器的数据分片,可能是由该数据查询服务器自己分配的,也可能是由所在集群中的其他数据查询服务器分配的,还可能包括该数据查询服务器自己分配的和所在集群中的其他数据查询服务器分配的。无论是哪种情况,只要有分配给数据查询服务器的数据分片,该数据查询服务器就针对该分配的数据分片创建倒排索引,并索引至本数据查询服务器的索引分片中。
数据查询服务器针对分配的数据分片创建倒排索引的方式,与已有的方式类似,比如用分词器解析数据分片,并索引至本数据查询服务器对应的索引分片中,这里不再赘述详细实现过程。
为了提高倒排索引的创建成功率,更好的保障后续的数据查询操作,本实施例中可以使用报错机制。数据查询服务器在根据设定原则确定倒排索引创建失败时,如果创建失败的数据分片由本数据查询服务器分配,则向插入创建失败的数据分片的数据装载服务器发送创建失败消息,如果创建失败的数据分片由所在集群中的其他数据查询服务器分配,向分配创建失败的数据分片的数据查询服务器发送创建失败消息,由分配创建失败的数据分片的数据查询服务器向数据装载服务器转发该创建失败消息。上述创建失败消息中携带创建失败的数据分片的标识。数据装载服务器在接收到创建失败消息之后,将重新发送创建失败的数据分片。创建倒排索引失败的数据查询服务器接收数据装载服务器重新发送的数据分片,或者接收所在集群中其他数据查询服务器转发的由数据装载服务器重新发送的数据分片,为创建失败的数据分片再次创建倒排索引,并索引至本数据查询服务器的索引分片中。上述设定原则,可以是时延,例如超过30秒倒排索引未创建成功时则认为创建失败。
通过以上步骤41至步骤44,为数据装载服务器插入的更新数据创建用于数据查询的倒排索引。在此基础上,数据查询服务器还提供数据查询功能,基于创建的倒排索引,提供复杂条件的高效率组合查询,由此本实施中的方法还可以包括如下步骤。
在步骤45中,接收数据查询请求。
数据查询服务器可以直接和有数据查询需求的客户端通信(图2并未示出这部分客户端),数据查询请求中将携带用于识别客户端的标识。
在步骤46中,根据所在集群中各数据查询服务器的负载,将所述数据查询请求分配给所在集群中的数据查询服务器。
任一个数据查询服务器都可以接收数据查询请求、并根据负载均衡原则将数据查询请求分配给所在集群中的数据查询服务器,分配数据查询请求时还需告知发送数据查询请求的客户端的标识,以便于被分配的数据查询服务器在处理完数据查询请求后向该客户端返回查询结果。这里的负载均衡原则,与前文分配数据分片时类似。根据负载均衡原则分配的结果,可能是将数据查询请求分配给本数据查询服务器,也可能是分配给所在集群中的其他数据查询服务器。
在步骤47中,当有分配给本数据查询服务器的数据查询请求时,根据分配给本数据查询服务器的数据查询请求,查询本数据查询服务器及所在集群中其他各数据查询服务器中的索引分片;根据查询结果应答分配给本数据查询服务器的数据查询请求。
由于数据索引层的每个数据查询服务器上都有索引分片,所以处理数据查询请求的数据查询服务器不仅要根据数据查询请求检索本数据查询服务器中的索引分片,还要检索所在集群中其他数据查询服务器中的索引分片,并可以将查询结果直接应答给发送数据查询请求的客户端。
下面介绍本发明实施例中数据查询服务器的数据处理装置,装置中各模块的功能可以由软件实现,可以由硬件实现,还可以由软件和硬件共同实现,这里不做限定。各模块功能与前文方法中的相同之处,不再赘述。
图5是根据一示例性实施例示出的一种数据查询服务器的数据处理装置50的框图,该数据处理装置50实现图1所示系统中的数据查询服务器的相关功能,包括第一接收模块51和索引创建模块52。
第一接收模块51,用于接收数据装载服务器插入的更新数据。上述更新数据由数据装载服务器从至少两个分表数据库中抽取。
索引创建模块52,用于为更新数据建立用于数据查询的倒排索引。
可以看出,在图5所示的数据查询服务器的数据处理装置中,一方面,由数据装载服务器从至少两个分表数据库中抽取更新数据、并插入数据查询服务器,相当于将分表分库的数据重新构建在一张表中,从而能够解决分表分库带来的问题,更好的支持复杂条件的组合查询,另一方面,数据查询服务器为更新数据建立用于数据查询的倒排索引,在支持复杂条件组合查询的前提下,进一步提高了查询效率。
图6是根据一示例性实施例示出的一种数据查询服务器的数据处理装置60的框图,该数据处理装置60装置实现图2所示系统中的数据查询服务器的相关功能,包括第一接收模块61、索引创建模块62、发送模块63、第二接收模块64、负载均衡模块65和查询模块66。
第一接收模块61,用于接收数据装载服务器插入的更新数据。上述更新数据由数据装载服务器从至少两个分表数据库中抽取。作为一种可选的实施方式,第一接收模块61可以接收至少两个数据装载服务器插入的更新数据。
索引创建模块62包括:负载均衡子模块621、分配子模块622和创建子模块623。
负载均衡子模块621,用于根据所在集群中各数据查询服务器的负载,确定为更新数据创建倒排索引的数据查询服务器。
作为一种可选的实施方式,负载均衡子模块621可以包括:获取子模块6211和选择子模块6212。
获取子模块6211,用于获取所在集群中各数据查询服务器的权重,权重越大的数据查询服务器对应的负载越小。
选择子模块6212,用于选择权重大于设定阈值的数据查询服务器,作为为更新数据创建倒排索引的数据查询服务器。
分配子模块622,用于将更新数据分成数据分片、并将各数据分片分配给确定出的数据查询服务器。
创建子模块623,用于在有分配给本数据查询服务器的数据分片时,针对分配给本数据查询服务器的数据分片创建倒排索引,并索引本数据查询服务器的索引分片中。
进一步,第一接收模块61还用于接收所在集群中其他数据查询服务器分配的数据分片。上述分配给本数据查询服务器的数据分片,可以包括:分配子模块622分配的数据分片;或者,所在集群中其他数据查询服务器分配的数据分片;或者分配子模块622分配的数据分片和所在集群中其他数据查询服务器分配的数据分片。
进一步,发送模块63,用于在针对分配给本数据查询服务器的数据分片创建倒排索引失败时,如果创建失败的数据分片由本数据查询服务器分配,向插入创建失败的数据分片的数据装载服务器发送创建失败消息,如果创建失败的数据分片由所在集群中的其他数据查询服务器分配,向分配创建失败的数据分片的数据查询服务器发送创建失败消息上述创建失败消息中携带创建失败的数据分片的标识。相应的,第一接收模块61,还用于接收重新发送的创建失败的数据分片,并触发创建子模块623执行操作。
第二接收模块64,用于接收数据查询请求。
负载均衡模块65,用于根据所在集群中各个数据查询服务器的负载,将数据查询请求分配给所在集群中的数据查询服务器。
查询模块66,用于在有分配给本数据查询服务器的数据查询请求时,根据分配给本数据查询服务器的数据查询请求,查询本数据查询服务器及所在集群其他各数据查询服务器中的索引分片;根据查询结果应答分配给本数据查询服务器的数据查询请求。
作为一种可选的实施方式,上述数据查询服务器的数据处理装置也可以具有另一种结构,即包括处理器和存储器,其中存储器中存储有处理器可执行的指令,当处理器读取指令执行时,实现前文描述的数据处理装置的各项功能。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的流程及结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。