一种基于分布式数据库的sql语句处理方法与流程

文档序号:13760454阅读:252来源:国知局
一种基于分布式数据库的sql语句处理方法与流程
本发明涉及一种基于分布式数据库的sql语句处理方法,属于线上数据处理和后期数据处理的存储和计算
技术领域
,线上数据处理具有高并发和大量数据的特征,后期数据处理包括线上数据同步到数据仓库,数据分析挖掘,机器学习。
背景技术
:随着现实应用中数据的存储和计算量越来越大,需要将独立的数据库进行水平的扩展,按照某种策略将数据存储在多个数据库节点中,现有技术中的分表思想实现了数据的扩展。分表的架构下,同时带来了计算上的麻烦,即必须跨机器,跨不同数据库实例,某些特定的应用场景如连接,子查询很难实现;后期数据处理,将数据从线上数据处理的系统中通过ETL(数据抽取、转换和装载)过程同步到数据仓库中,而线上数据系统和数据仓库系统通常为不同的存储架构,数据结构发生了变化,导致无法快速的完成数据同步,例如更新记录和删除记录很难快速的同步到数据仓库中,同时也限制了后期数据处理的速度。技术实现要素:本发明的目的在于解决现有技术存在的上述问题,避免线上数据同步到数据仓库(例如hadoop或者异构数据库)的麻烦;后期数据处理,包括数据分析,数据挖掘,机器学习;在线上数据处理和后期数据处理中都会遇到的跨节点连接,夸节点子查询等问题。本发明通过以下技术方案实现:一种基于分布式数据库的sql语句处理方法,其特征在于,包括客户端、主控机、元数据库节点和数据库节点:所述客户端,负责提交sql,从主控机获取元数据,进行sql分析,安排执行,并接受执行结果;所述主控机,负责管理和监控客户端、元数据库节点和数据库节点;所述元数据库节点,负责存储表的结构信息和数据分布信息,作为生成执行计划的依据;所述数据库节点,负责存储数据的节点,也负责执行本节点上的sql语句;该方法基于分布式数据库,表是存储在多个数据库节点中,输入sql语句,包含增、删、改和查的操作,输出是sql执行的结果。作为优选,所述的增、删和改的操作如下:当插入数据的时候,根据分表的策略将记录插入到对应的数据库节点中;当更新数据的时候,根据分表的策略判断数据的源数据库节点和目标数据库节点是否变化,如果没有变化,直接更新,如果有变化,在源数据库节点中删除老数据,在目标数据库节点中插入新数据;当删除数据的时候,根据分表的策略在相应的数据库节点中删除。作为优选,所述的分表的策略,是根据表的均衡字段和分表算法将数据规律的放到数据库节点上。作为优选,所述的均衡字段为表的一个或几个字段,用于将记录按照分的表策略插入到对应的节点中。作为优选,所述的分表算法包含list,hash,range中的一种或几种的结合。作为优选,所述的查的操作如下:将输入的sql语句经过语义分析,结合表的结构信息和数据分布信息,生成包含多个阶段的执行计划;阶段之间具有依赖关系,形成一棵多输入单输出的树形结构。作为优选,所述的执行计划的每个阶段包括三个操作:map、shuffle和reduce;map执行mapsql,需要执行map的数据库节点称为map节点;shuffle执行洗牌,将map的输出中洗牌字段相同的数据放到同一个reduce中;reduce执行reducesql,需要执行reduce的数据库节点称为reduce节点。作为优选,同一个阶段中,多个reduce节点是有关系的,具体而言:当查操作包含排序和聚合操作,reduce节点具有大小关系,排序和聚合字段小的reduce节点小,这样每个reduce节点执行完成之后,依据reduce节点的大小关系,就可以得到整体的结果;当查操作包含非等值join,reduce节点具有大小关系,排序字段小的reduce节点小,reduce节点之间需要进行join,不同reduce节点之间的大小关系决定了join结果是否是匹配的,相同的reduce节点之间需要执行同样的sql来返回匹配的结果;当查操作包含表达式计算的等值join,map节点的输出数据中可以依据join表达式添加辅助字段,把辅助字段作为洗牌字段进行shuffle操作,这样每个reduce节点执行完成之后,就完成了包含表达式计算的等值join;不包含排序和聚合的单表操作,不包含表达式计算的等值join,reduce节点之间可以没有关系。作为优选,所述的洗牌字段,是依据具体的查询语句得到,如果是聚合操作,那么洗牌字段就是聚合字段,如果是排序操作,那么洗牌字段就是排序字段,如果是连接操作,那么洗牌字段就是连接字段,如果查询包含了多种操作,那么就需要分成多个步骤,每个步骤有相应的洗牌字段。与现有技术相比,具有以下优点,本发明可应用于:1、应用于线上数据处理的插入,更新,删除和查询。2、应用于大数据量的情况下跨节点连接,夸节点子查询等复杂逻辑:由于数据进行了分表处理,这些复杂的逻辑就需要处理所涉及的所有节点上的数据,并且在计算的模型上比单节点要复杂,需要一个统一的计算模型来实现,具体参见权利要求说明书。3、应用于后期数据处理:由于后期数据处理本质上可以转换为一步或者多步sql语句,每个sql语句可以产生包含多个阶段的执行计划,所以对于后期的数据处理中数据分析挖掘,机器学习可以将需要转为一个或者多个sql来实现。对于流式计算,客户端需要长期运行,不断监控装置中数据的变化,执行相应的计算,或者每隔一段时间来执行相应的计算;在后期的数据处理上,保持了和线上数据库一致的结构和功能,例如表具有索引,数据库具有缓存机制,数据库本身具有排序,分组,连接等各种功能,这些结构和功能能很好的提高后期的数据处理的速度。4、应用于线上数据同步到数据仓库,通过数据库节点的同步机制达到线上数据同步到数据仓库的目的,即线上数据处理和后期数据处理使用两套数据库节点,用于后期数据处理的map节点与用于线上数据处理的map节点保持同步,这种同步功能在很多数据库系统中已经实现。5、无论应用于线上数据处理和后期数据处理:都是将需求转换成的sql来执行,统一了对外接口,同时也减轻了开发的成本。6、对于从大量数据中只查询少量数据的情况,优于目前的hadoop方案。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是基于本发明处理方法实施例的系统结构示意图。图2是本发明实施例中sql执行步骤图。图3是本发明实施例中阶段树的示意图。图4是本发明实施例中阶段的执行示意图。具体实施方式以下结合具体实施例来说明本发明,下列实施例仅用于说明本发明的技术方案,并不限定本发明的保护范围。实施例:假设系统中有2张表,用户表tab_user_info和用户登录表tab_login_info。用户表tab_user_info如下:字段字段描述字段类型u_id用户idint类型u_name用户姓名varcharu_reg_dt用户注册时间timestampu_age用户年龄int用户登录表tab_login_info的结构如下:字段字段描述字段类型u_id用户idintlogin_ip登录ipintlogin_dt登录时间timestamplogin_product登录到哪个产品中varchar表的记录示例如下:假如节点数为num_node,u_id为均衡字段,u_id的最大值为max_value-1(0<=u_id<max_value),如果采用取模的hash算法,那么u_id为value的记录会被插入到value%num_node+1号节点中;如果采用range算法,那么u_id为value的记录会被插入到value/(max_value/num_node)+1号节点中;如果采用range结合取模的hash算法,并且每个范围大小为num_one_range,那么u_id为value的记录会被插入到(value/num_one_range)%num_node+1号节点中;实际中一条sql语句可能会插入多条记录,那么每条记录都要按照u_id插入到对应节点中;sql中的更新和删除语句也同样需要按照上面的规则进行操作,特别要注意更新的时候,新的数据和老的数据如果节点发生了变化的时候,需要在源节点中删除老数据,在目标节点中插入新数据。对于sql中的select查询,按照常用的一些语法,分成几类:条件过滤,包括等值条件,范围,like,匹配,与和或,以如下sql为例:生成的执行计划一种可能为:在所有map节点上执行select*fromtab_user_infotwhereu_reg_dt>=?andu_reg_dt<=?,执行完成之后,这种情况下对shuffle没有特殊的要求,甚至不需要进行shuffle和reduce,直接返回结果到客户端即可。排序,以如下sql为例:生成的执行计划一种可能为:在所有map节点上执行,执行完成之后,这种情况下由于需要按照u_id进行数据洗牌,所以各个map节点上需要按照u_id进行划分,例如有N个reduce节点,那么按照(最大u_id-最小u_id)/N平均划分,将不同map节点上的同一范围的u_id,划分到同一个reduce节点上即可。分组聚合,以如下sql为例:生成的执行计划一种可能为:在所有map节点上执行,执行完成之后,这种情况下由于需要按照u_age进行数据洗牌,考虑到u_age的唯一值比较少,所以数据洗牌可以将所有的记录拷贝到同一个reduce节点上,然后在reduce节点上执行如下的合并操作selectu_age,sum(v)fromtwheregroupbyu_age取唯一值,即distinct,以如下sql为例:生成的执行计划一种可能为:在所有map节点上执行selectdistinctu_idfromtab_login_infotwherelogin_dt>=?andlogin_dt<=?,执行完成之后,需要按照u_id进行数据洗牌,然后在reduce节点上执行如下的取唯一操作selectdistinctu_idfromt连接,包括内连接,左连接,右连接,半连接,外连接,以如下sql为例:生成的执行计划一种可能为:由于是join,所有的表都要进行查询操作,并且为每张表打上自己的标签,具体实施的时候可以加个表名字字段,在所有map节点上执行,执行完成之后,需要按照u_id进行数据洗牌,然后在reduce节点上执行如下操作非等值,包含表达式计算的连接,以如下sql为例:生成的执行计划一种可能为:由于是join,所有的表都要进行查询操作,并且为每张表打上自己的标签,具体实施的时候可以加个表名字字段,在所有map节点上执行,执行完成之后,这种情况下由于具有表达式计算,所以洗牌字段不在是u_id,而是以表达式计算的结果,shuffle完成之后,由于是非等值的join,reduce节点之间需要进行join,如果tab_user_info大的reduce节点和tab_login_info小的reduce节点之间的join记录是匹配最终结果的,如果tab_user_info小的reduce节点和tab_login_info大的reduce节点之间的join记录是不匹配最终结果的,如果两者相等,需要reduce节点上执行如下操作来返回匹配的结果合并,包union和unionall,以如下sql为例:生成的执行计划一种可能为:由于是union,所有的表都要进行查询操作,可以为每张表打上自己的标签,但这不是必须的,具体实施的时候可以加个表名字字段,在所有map节点上执行,执行完成之后,需要按照u_id进行数据洗牌,然后在reduce节点上执行如下操作子查询,由于子查询可以分解成具有依赖关系的不包含子查询的sql,所以生成的执行计划,就是多个sql的执行计划按照一定的依赖关系进行依次执行。此外,需要说明的是,本说明书中所描述的具体实施例。凡依本发明专利构思所述的构造、特征及原理所做的等效或简单变化,均包括于本发明专利的保护范围内。本发明所属
技术领域
的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,只要不偏离本发明的结构或者超越本权利要求书所定义的范围,均应属于本发明的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1