一种提供有序数据的系统和方法技术方案

技术编号:11903587 阅读:83 留言:0更新日期:2015-08-19 16:12
本发明专利技术涉及一种提供有序数据的系统和方法,该系统包括:客户端,用于生成带有排序要求的查询请求;多个数据源,所述多个数据源的每个根据相应的查询子请求产生排序的数据记录并传递到对应的连接;连接部分,用于管理和分配到各数据源的连接;排序机构,用于通过相应连接处理来自各数据源的局部排序的数据记录以向客户端提供全局排序的数据记录。排序机构利用与各连接对应的缓冲区的界限标志来控制内存的使用,并且通过反复对各连接做堆排序来完成数据的全局排序。

【技术实现步骤摘要】

本专利技术涉及从多数据源获取有序数据的系统和方法。
技术介绍
随着互联网的不断发展,互联网上的数据量在急剧增长,传统单机数据库在处理大规模数据时已经面临明显的瓶颈,各大互联网公司都着手研宄分布式数据库的实现方案。在分布式数据库的实现方案中包括两类,一类是客户端的解决方案,引入一个新的客户端,对数据进行分片处理,另一类是引入数据库中间件,对数据的分片处理由该中间件完成,应用程序只需要访问该数据库中间件即可,整个访问过程和访问原生的数据库几乎是一样的。在数据库中间件的解决方案中,针对MySQL的中间件的解决方案相对来说比较多,在实现MySQL中间件的时候需要解决的一个非常重要的问题就是从多个MySQL实例获取数据的时候如何对这些数据进行汇总排序。一些开源的数据库中间件如Cobar不支持涉及多个MySQL实例的数据排序。还有一些中间件支持排序,但是实现的时候是将所有涉及到的数据从各个MySQL实例上都获取到,然后将这些数据放在中间件所在机器的内存中或者是落到磁盘上,然后再对其进行排序,排完以后再发给客户端。中间件所在机器本身内存有限,在数据量大时就处理不了,如果需要将数据转到磁盘上则实现会比较复杂且性能会严重下降,而如果需要将数据专门汇总到另外的机器上,则会增加网络10,同样会降低性能。
技术实现思路
本专利技术的目的是提供从多数据源有效获取有序数据的系统和方法。根据本专利技术的一个方面,提供一种提供有序数据的系统,包括:客户端,用于生成带有排序要求的查询请求;多个数据源,所述多个数据源的每个根据相应的查询子请求产生排序的数据记录并传递到对应的连接;连接部分,用于管理和分配到各数据源的连接;排序机构,用于执行如下步骤:从客户端接收带有排序要求的查询请求,并解析所述查询请求以产生对应于各数据源的子查询请求;获取各数据源对应的连接,建立与各连接对应的缓冲区并清空且标记为未满,并且把产生的各子查询请求通过相应连接发送给相应的数据源,其中所述数据源通过相应连接返回有序的数据记录;按照预定的规则来轮询各连接以确定哪个连接有数据可读取,其中,当确定一连接有数据可读取并且该连接对应的内存缓冲区未满,则读取该连接中所有可读的数据记录并存储到该连接对应的内存缓冲区中,当该缓冲区中的数据量超过预定阈值时把该缓冲区标记为已满,并且当确定需要通过该连接读取的数据全部读取完毕时把该连接标记为读取结束;执行所有连接的堆排序;当堆顶的连接对应的内存缓冲区非空时,从该内存缓冲区中取出第一个记录发送给客户端,并且,重复所有连接的堆排序并把堆顶的连接对应的内存缓冲区中的第一个记录取出发送给客户端,直到堆顶的连接对应的内存缓冲区为空,其中在从堆顶对应的内存缓冲区中取出第一个记录发送给客户端之后要判断该内存缓冲区是否未满,当未满时,取消该内存缓冲区的已满标记;当堆顶的连接对应的内存缓冲区为空并且堆顶的该连接被标记读取结束,则标记该连接处理完毕,否则继续所述的轮询;当所有的连接都已经处理完毕,则把结束标志发送给客户端,否则继续所述轮询。其中,所述连接按照如下规则取值:如果该连接被标记为处理完毕,对升序排序该连接取值无限大,对降序排序该连接的取值无限小;如果该连接未被标记为处理完毕且该连接对应的缓冲区为空,对升序排序该连接的取值无限小,对降序排序该连接的取值无限大;如果不是上述两种情况,该连接的值是该连接对应的缓冲区中第一个记录的排序字段值。根据本专利技术的另一方面,提供一种提供有序数据的方法,包括步骤:从客户端接收带有排序要求的查询请求,并解析所述查询请求以产生对应于各数据源的子查询请求;获取各数据源对应的连接,建立与各连接对应的缓冲区并清空且标记为未满,并且把产生的各子查询请求通过相应连接发送给相应的数据源,其中所述数据源通过相应连接返回有序的数据记录;按照预定的规则来轮询各连接以确定哪个连接有数据可读取,其中,当确定一连接有数据可读取并且该连接对应的内存缓冲区未满,则读取该连接中所有可读的数据记录并存储到该连接对应的内存缓冲区中,当该缓冲区中的数据量超过预定阈值时把该缓冲区标记为已满,并且当确定需要通过该连接读取的数据全部读取完毕时把该连接标记为读取结束;执行所有连接的堆排序;当堆顶的连接对应的内存缓冲区非空时,从该内存缓冲区中取出第一个记录发送给客户端,并且,重复所有连接的堆排序并把堆顶的连接对应的内存缓冲区中的第一个记录取出发送给客户端,直到堆顶的连接对应的内存缓冲区为空,其中在从堆顶对应的内存缓冲区中取出第一个记录发送给客户端之后要判断该内存缓冲区是否未满,当未满时,取消该内存缓冲区的已满标记;当堆顶的连接对应的内存缓冲区为空并且堆顶的该连接被标记读取结束,则标记该连接处理完毕,否则继续所述的轮询;当所有的连接都已经处理完毕,则把结束标志发送给客户端,否则继续所述轮询。其中,所述连接按照如下规则取值:如果该连接被标记为处理完毕,对升序排序该连接取值无限大,对降序排序该连接的取值无限小;如果该连接未被标记为处理完毕且该连接对应的缓冲区为空,对升序排序该连接的取值无限小,对降序排序该连接的取值无限大;如果不是上述两种情况,该连接的值是该连接对应的缓冲区中第一个记录的排序字段值。【附图说明】下面将参考附图详细地描述本专利技术的实施例,其中:图1是本专利技术的基于多数据源提供有序数据的系统组成以及数据排序的示意图;图2是本专利技术的基于多数据源提供有序数据的方法的流程图。【具体实施方式】根据本专利技术的实施例,提供一种提供有序数据的系统,包括数据源部分、连接部分、排序机构部分及客户端。各数据源通过连接部分向排序机构提供局部有序的数据,经排序机构处理后,最终在客户端提供全局有序的数据。数据源部分的各数据源例如是MySQL实例。连接部分用于管理和分配到各数据源的连接,以实现排序机构对各数据源存取的管道,使得排序机构可从各数据源获取数据。排序机构从每个数据源获取的数据是按照规定顺序获取的,即各数据源提供的数据本身是局部有序的,例如都是递增顺序。排序机构需要对来自不同数据源的数据进行全局排序。排序机构例如是数据库中间件。该数据库中间件到一 MySQL之间有一条TCP连接。MySQL实例上的数据通过该连接不断发送给中间件。TCP连接的发送端和接收端各有一个缓冲区。MySQL实例在向TCP连接发送数据的时候,首先会将数据放到TCP连接的发送端的缓冲区中,然后发送到相对的接收端,接收端接收到数据以后会先将数据存放到该TCP连接的接收端的缓冲区中,这些操作都是由操作系统本身完成的。中间件通过TCP连接接收MySQL实例上的数据,就是中间件读取TCP连接上的接收端的缓冲区中的内容。当接收端的缓冲区未满,MySQL实例上的数据才能继续通过TCP连接发送过来,否则MySQL实例上的数据的发送将被阻塞。根据本专利技术的实施例,整个排序处理的示意图如图1所示,相应图上也有四个部分:MySQL 实例集 101;中间件与MySQL实例之间的TCP连接102 ;中间件排序机构103 ;以及客户端104。根据本专利技术的实施例,在图1中示出一种系统组成,其中数据源部分MySQL实例集101有六个MySQL实例。排序中间件103与每个MySQL实例有一条连接,共有六条连接A、B、C、D、E 和 F本文档来自技高网...
一种<a href="http://www.xjishu.com/zhuanli/55/CN104850618.html" title="一种提供有序数据的系统和方法原文来自X技术">提供有序数据的系统和方法</a>

【技术保护点】
一种提供有序数据的方法,包括步骤:从客户端接收带有排序要求的查询请求,并解析所述查询请求以产生对应于各数据源的子查询请求;获取各数据源对应的连接,建立与各连接对应的缓冲区并清空且标记为未满,并且把产生的各子查询请求通过相应连接发送给相应的数据源,其中所述数据源通过相应连接返回有序的数据记录;按照预定的规则来轮询各连接以确定哪个连接有数据可读取,其中,当确定一连接有数据可读取并且该连接对应的内存缓冲区未满,则读取该连接中所有可读的数据记录并存储到该连接对应的内存缓冲区中,当该缓冲区中的数据量超过预定阈值时把该缓冲区标记为已满,并且当确定需要通过该连接读取的数据全部读取完毕时把该连接标记为读取结束;执行所有连接的堆排序;当堆顶的连接对应的内存缓冲区非空时,从该内存缓冲区中取出第一个记录发送给客户端,并且,重复所有连接的堆排序并把堆顶的连接对应的内存缓冲区中的第一个记录取出发送给客户端,直到堆顶的连接对应的内存缓冲区为空,其中在从堆顶对应的内存缓冲区中取出第一个记录发送给客户端之后要判断该内存缓冲区是否未满,当未满时,取消该内存缓冲区的已满标记;当堆顶的连接对应的内存缓冲区为空并且堆顶的该连接被标记读取结束,则标记该连接处理完毕,否则继续所述的轮询;当所有的连接都已经处理完毕,则把结束标志发送给客户端,否则继续所述轮询,其中,所述连接按照如下规则取值:如果该连接被标记为处理完毕,对升序排序该连接取值无限大,对降序排序该连接的取值无限小;如果该连接未被标记为处理完毕且该连接对应的缓冲区为空,对升序排序该连接的取值无限小,对降序排序该连接的取值无限大;如果不是上述两种情况,该连接的值是该连接对应的缓冲区中第一个记录的排序字段值。...

【技术特征摘要】

【专利技术属性】
技术研发人员:张成远田琪季锡强
申请(专利权)人:北京京东尚科信息技术有限公司北京京东世纪贸易有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1