分布式缓存阵列及其数据查询方法

文档序号:6431982阅读:109来源:国知局
专利名称:分布式缓存阵列及其数据查询方法
技术领域
本发明涉及数据处理技术,特别涉及一种分布式缓存阵列及其数据查询方法。
背景技术
随着科技的进步,用于描述信息的数据量也在不断增加,而且数据涉及的范围越来越广泛,数据之间的关系也变得更为复杂。为了提高数据处理的工作效率,对数据处理技术也提出了更高的要求。目前主要使用的数据处理技术,首先是将数据存入缓存阵列,然后对缓存阵列中的数据进行操作。缓存阵列也可以说是数据的集合。随着数据量的增加,单一存储器已经无法满足高并发的数据处理业务请求,因而出现了以异地存储为基础的分布式缓存阵列。现有的分布式缓存阵列的架构如图1所示,包括通过支持广播的高速通讯网络互相连接的集群式的存储实例。当外部访问缓存阵列,进行相关数据操作时,例如从缓存阵列查询数据, 或者对缓存阵列内的数据进行更新,都以分布式处理的方式在多个实例中进行。现有的分布式缓存阵列在进行数据处理时存在如下问题,应用服务器的负载能力有限,在面对大数据量密集型的数据查询请求时,响应缓慢并且容易出现多重对数据的锁操作,这些锁会造成后续的请求堆积,而服务器本身的处理能力此时又得不到充分利用。

发明内容
本发明解决的问题是提供一种分布式缓存阵列及其数据查询方法,提高数据查询效率,缩短数据查询的响应时间,降低服务器负载。本发明提供的分布式缓存阵列,包括通过支持广播方式的高速互连网络互相连接的若干存储实例;所述存储实例包括目录服务器、查询引擎以及存储单元;所述目录服务器通过高速互连网络侦听各存储实例的负载情况,并响应外部应用反馈低负载的存储实例列表以及向其他存储实例发送数据查询请求,并汇总返回查询结果;所述查询引擎用于接收所述数据查询请求,对本存储实例的存储单元进行数据查询。可选的,所述存储单元包括至少两台存储相同数据的服务实例,其中一台作为主节点用于负责更新数据,其他用于通过互连网络内存复制技术保持与主节点间的数据同步,并作为只读实例接受查询引擎的查询。本发明还提供了采用上述分布式缓存阵列的数据查询方法,包括从外部应用接收数据查询请求,选取负载轻的存储实例作为代理实例,执行代理查询操作;所述代理查询操作包括代理实例向其他存储实例发送查询请求,并汇总自身以及其他存储实例的查询结果反馈给外部应用。可选的,所述缓存阵列从外部接收数据查询请求后,向各目录服务器转发,所述外部应用从最先响应的目录服务器获取一组存储实例列表;所述列表是该目录服务器根据当前侦听统计结果,依据负载情况生成的负载相对较轻的存储实例列表;所述外部应用从列表中随机选择一个存储实例作为代理实例。
可选的,所述代理实例向其他存储实例发送查询请求包括代理实例中的目录服务器将所述数据查询请求发送至本实例的查询引擎,并同时在高速互连网络内广播,向其他存储实例的目录服务器广播所述数据查询请求。可选的,所述其他存储实例的目录服务器在接收到广播的数据查询请求后,各存储实例的查询引擎查询本存储实例内的数据,并向代理实例返回查询结果。可选的,所述查询引擎根据数据查询请求所包含待查询数据信息,直接提取主键, 或者先执行区间检索操作在数据字段索引上查询到对应所述查询请求的数据的主键列表; 利用所述主键查询相应的数据集合,然后将本地检索的数据或数据集合作为查询结果返回给代理实例。可选的,所述代理实例的目录服务器,从其他存储实例获取查询结果,并与本实例的查询结果合并形成查询结果集,将所述查询结果集返回外部应用。可选的,所述代理实例在广播请求一定间隔后,针对仍未返回查询结果的存储实例再次发送查询请求。与现有技术相比,本发明具有以下优点选取一个特定的存储实例作为查询主体, 执行代理查询操作,通过缓存阵列内部的高速通讯网络广播查询请求给各个数据存储实例,并行执行查询操作,从而平衡负载从而提高总体的查询效率以及速度。


图1是现有的分布式缓存阵列的架构示意图;图2是本发明所述分布式缓存阵列的架构示意图;图3是本发明实施例的数据查询方法的步骤流程图。
具体实施例方式为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合本发明的分布式缓存阵列及数据查询方法的具体实施方式
做详细的说明。现有分布式缓存阵列的数据查询方法受到单台服务器的负载能力限制,遇到海量数据访问请求时,难以继续扩展数据通讯量以及处理能力,导致应用响应速度缓慢,效率低下。本发明则提供了一种数据查询方法,应用于可水平扩展数据存储的分布式缓存阵列,将执行数据查询的主体分散于多个分布式存储实例中,并确保分布式查询操作对应用程序透明,且可以并行执行,以提高查询响应速度和数据查询的效率。具体的,本发明所述的分布式缓存阵列的数据查询方法,包括从外部接收数据查询请求,选取负载轻的存储实例作为代理实例,执行代理查询操作;所述执行代理查询操作包括代理实例将所述数据查询请求向分布式缓存阵列内的各存储实例广播,汇总对本存储实例中数据的查询结果以及其他存储实例中数据的查询结果形成查询结果集,将所述查询结果集返回外部应用。其中,缓存阵列从外部获取数据查询请求时,通过一定的选择机制,从存储实例中选取负载较轻的存储实例作为代理实例,执行代理查询操作,使得负载在整个集群阵列中均勻分布。所述执行代理查询的存储实例将数据查询请求向分布式缓存阵列内其他的存储实例广播时,各存储实例依据数据查询请求自行查询本存储实例内的数据,然后将各自查询结果返回执行代理查询的存储实例,由其汇总。由于与现有的数据查询方法相比,本发明数据查询方法执行数据查询的主体已经变成各存储实例自身,因此缓存阵列的架构也相应发生了变化。图2为本发明所述分布式缓存阵列的架构示意图。
如图2所示,在应用本发明数据查询方法的分布式缓存阵列中,集群式的存储实例之间通过支持广播方式的高速互连网络(例如采用Infiniband等高速网络连接技术的互连网络)相互连接。所述各存储实例内具有目录服务器、查询引擎以及存储单元。所述目录服务器通过监听所述互连网络中的广播,记录各存储实例的目录服务器的负载情况,同时在本存储实例执行代理查询操作时,代理整个集群的存储实例接收来自外部应用的初次的数据查询请求,然后将所述数据查询请求向其他存储实例广播。所述查询引擎用于接收所述数据查询请求,对本存储实例的存储单元进行数据查询。所述存储单元包括至少两台存储相同数据的服务实例,其中一台作为主节点用于负责更新数据,其他用于通过互连网络内存复制技术保持与主节点间的数据同步,并作为只读实例接受查询引擎的查询,从而分担主节点的查询负载。当某个客户端或外部应用服务器(统称为外部应用,Client)初次访问分布式缓存阵列进行数据查询时,缓存阵列将其数据查询请求向各目录服务器转发,使得Client访问最先响应的目录服务器,所述目录服务器将统计信息中负载较轻的若干个存储实例列表并返回给此Client,由其获取后自行缓存。Client后续的查询操作将会随机从这几台在列表中缓存的存储实例中选取负载较轻的一个发送数据查询请求,该存储实例即进行代理数据查询操作。缓存的时间可以根据整个集群的大小和负载的情况进行调节,确保目录服务器不会承受过高的压力,同时Client也可以得到相对即时的服务实例负载较轻的集合,发送数据查询请求。此机制是确保整个集群可以均衡负载,同时又避免单个目录服务器故障导致Client无法访问集群中依旧可用存储实例的关键策略。下面对本发明数据查询方法的一个具体实施例作详细介绍,图3是本发明实施例数据查询方法的具体步骤流程图。结合图2以及图3所示,假设缓存阵列的存储实例集群中包括多个存储实例。各存储实例通过支持广播的高速互连网络连接起来,包括与之相应的目录服务器、查询引擎以及存储单元。需要注意的是,目录服务器仅仅在逻辑上从属于某个存储实例;但为了便于说明,图3所示逻辑架构图中将目录服务器单独列出,以展示目录服务器通过高速互连网络对整个存储实例集群的广播以及侦听作用。当外部应用向缓存阵列发起数据查询请求, 数据库执行如下操作步骤S101、接收所述来自外部的数据查询请求,从多个存储实例中选取负载较轻的存储实例作为代理实例;当外部应用向缓存阵列发起数据查询请求时,将经由缓存阵列的应用服务器访问最先响应该数据查询请求的目录服务器。具体的,所述外部的数据查询请求首先由应用服务器接收,所述应用服务器将上述数据查询请求通过缓存阵列的互连网络,向各目录服务器广播,并使得外部应用与最先响应的目录服务器建立连接,该目录服务器将向所述外部应用反馈一组存储实例列表。所述列表是根据当前监听统计结果,依据负载情况生成的负载相对较轻的存储实例列表,因为在同一时刻,缓存阵列并不仅仅响应一个外部数据请求, 因此各个存储实例总是处于活跃的状态,负载情况也各不相同。这里的负载指的是硬件负载,即各存储单元以及查询引擎的数据流对硬件的压力。每个目录服务器均可以通过高速互连网络侦听各存储实例的实时数据吞吐量判断其负载大小,并通过预设负载值,将低于该负载值的存储实例列出,从而生成上述负载相对较轻的存储实例列表。外部应用从存储实例列表中随机选取一个作为代理实例,以便利用其目录服务器进行后续的数据查询操作。步骤S102、所述代理实例将来自外部查询者的数据查询请求向其他存储实例广播; 具体的,代理实例中的目录服务器将再次接收所述数据查询请求,将其发送至本实例的查询引擎,并同时在高速互连网络内广播,向其他存储实例的目录服务器广播所述数据查询请求。为了在缓存阵列内广泛地查询数据,数据查询的对象并不可能是指定的存储实例,应当包括代理实例自身以及其他所有的存储实例。步骤103、收到广播的数据查询请求后,各存储实例的查询引擎查询本存储实例内的数据,并向代理实例返回查询结果。具体的,各存储实例的查询引擎收到所述数据查询请求后,所述查询引擎根据数据查询请求所包含待查询数据信息,直接提取待查询数据的主键;或者当查询数据为多个数据构成的集合时,先执行区间检索操作在数据字段索引(所述数据字段索引是多个数据构成集合所必须的,待查询数据信息中应当包含)获取各待查询数据的主键列表;利用所述主键列表查询相应的数据集合。将本存储实例检索的数据或数据集合作为查询结果返回给代理实例。由于大部分的检索是对索引字段的范围检索,而查询引擎所基于的主键查询算法可以最快速的确定本地没有此范围内的数据,因而即使向没有存储所需查询数据的存储实例广播数据查询请求,也不会给这些存储实例造成很大的负载。步骤104、所述代理实例的目录服务器从其他存储实例获取查询结果,并与本实例内的查询结果合并形成查询结果集;具体的,代理实例在查询本存储实例内数据后产生查询结果,所述查询结果仅包括对本实例数据内容的查询。完整的查询结果需要汇总其他存储实例上查询操作的结果后,在代理实例中进一步处理获得(例如排序,求平均值和计数值等等聚合函数操作)。代理实例通过向其他存储实例广播分发数据查询请求,由各个存储实例分布式并行执行数据查询操作,因此可以降低各实例的响应时间,同时由于每个存储实例内均包括2 个或以上相互复制,保持数据同步的服务实例,它们也可以很好地分担查询的负载,确保快速响应。这种模式将会比现有模式下单服务器处理获得更快的响应速度,也能够应对海量请求下按需扩展数据存储的容量及查询处理能力的要求。由于分布式处理中不可避免的会有节点查询失败或故障发生。为避免某个节点未能即时响应拖慢单个请求返回时间影响性能,代理实例在广播请求一定间隔后(一般将某个有查询到数据的存储实例开始返回结果作为所述间隔的起始时间,经过该时间间隔后作为结束时间)针对仍未返回查询结果的存储实例再次发送查询请求。如果经过另一个间隔依然无法获取查询结果,则放弃对该存储实例的查询,并视为在该存储实例中未搜索到所需查询的数据。 此外在某个存储实例中的一个服务实例开始返回结果后,该存储实例的查询引擎将取消在其他仍未响应的服务实例内进行查询,以避免不必要计算资源浪费。上述机制既避免漏掉完整的数据查询结果集,又可以提前发起补偿查询操作避免单个存储实例的延误或失效导致的较长时延,保障系统的冗余性及提高可靠度。步骤105、所述代理实例将查询结果集返回给外部应用。具体的,本实施例中所述代理实例的目录服务器汇总形成查询结果集后,经由应用服务器返回给外部应用,完成本发明所述数据查询流程。本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
权利要求
1.一种分布式缓存阵列,其特征在于,包括通过支持广播方式的高速互连网络互相连接的若干存储实例;所述存储实例包括目录服务器、查询引擎以及存储单元;所述目录服务器通过高速互连网络侦听各存储实例的负载情况,并响应外部应用反馈低负载的存储实例列表以及向其他存储实例发送数据查询请求,并汇总返回查询结果;所述查询引擎用于接收所述数据查询请求,对本存储实例的存储单元进行数据查询。
2.如权利要求1所述的分布式缓存阵列,其特征在于,所述存储单元包括至少两台存储相同数据的服务实例,其中一台作为主节点用于负责更新数据,其他用于通过互连网络内存复制技术保持与主节点间的数据同步,并作为只读实例接受查询引擎的查询。
3.一种采用权利要求1所述的分布式缓存阵列的数据查询方法,其特征在于,包括从外部应用接收数据查询请求,选取负载轻的存储实例作为代理实例,执行代理查询操作;所述代理查询操作包括代理实例向其他存储实例发送查询请求,并汇总自身以及其他存储实例的查询结果反馈给外部应用。
4.如权利要求3所述的数据查询方法,其特征在于,所述缓存阵列从外部接收数据查询请求后,向各目录服务器转发,所述外部应用从最先响应的目录服务器获取一组存储实例列表;所述列表是该目录服务器根据当前侦听统计结果,依据负载情况生成的负载相对较轻的存储实例列表;所述外部应用从列表中随机选择一个存储实例作为代理实例。
5.如权利要求3所述的数据查询方法,其特征在于,所述代理实例向其他存储实例发送查询请求包括代理实例中的目录服务器将所述数据查询请求发送至本实例的查询引擎,并同时在高速互连网络内广播,向其他存储实例的目录服务器广播所述数据查询请求。
6.如权利要求5所述的数据查询方法,其特征在于,所述其他存储实例的目录服务器在接收到广播的数据查询请求后,各存储实例的查询引擎查询本存储实例内的数据,并向代理实例返回查询结果。
7.如权利要求6所述的数据查询方法,其特征在于,所述查询引擎根据数据查询请求所包含待查询数据信息,直接提取主键,或者先执行区间检索操作在数据字段索引上查询到对应所述查询请求的数据的主键列表;利用所述主键查询相应的数据集合,然后将本地检索的数据或数据集合作为查询结果返回给代理实例。
8.如权利要求6所述的数据查询方法,其特征在于,所述代理实例的目录服务器,从其他存储实例获取查询结果,并与本实例的查询结果合并形成查询结果集,将所述查询结果集返回外部应用。
9.如权利要求8所述的数据查询方法,其特征在于,所述代理实例在广播请求一定间隔后,针对仍未返回查询结果的存储实例再次发送查询请求。
全文摘要
本发明提供了一种分布式缓存阵列及其数据查询方法,其中所述数据查询方法包括从外部接收数据查询请求,选取负载轻的存储实例作为代理实例,执行代理查询操作;所述执行代理查询操作包括代理实例将所述数据查询请求向分布式缓存阵列内的各存储实例广播,汇总对本存储实例中数据的查询结果以及其他存储实例中数据的查询结果形成查询结果集,将所述查询结果集返回外部应用。本发明能够提高数据查询效率,缩短数据查询的响应时间,降低服务器负载。
文档编号G06F17/30GK102289508SQ201110254259
公开日2011年12月21日 申请日期2011年8月31日 优先权日2011年8月31日
发明者虞钢 申请人:上海西本网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1