CN106547796B - 数据库的执行方法及装置 - Google Patents
数据库的执行方法及装置 Download PDFInfo
- Publication number
- CN106547796B CN106547796B CN201510612206.4A CN201510612206A CN106547796B CN 106547796 B CN106547796 B CN 106547796B CN 201510612206 A CN201510612206 A CN 201510612206A CN 106547796 B CN106547796 B CN 106547796B
- Authority
- CN
- China
- Prior art keywords
- execution
- database
- tree
- nodes
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据库的执行方法及装置,该方法包括:接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;依据接收的SQL请求生成对应的语法树;遍历生成的语法树的各个节点,并生成执行树;按照生成的执行树对一个或者多个数据库执行数据库操作。通过本发明,解决了相关技术中不支持跨数据库节点的关联数据查询的技术问题,进而达到了支持跨数据库节点的关联数据查询的技术效果。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种数据库的执行方法及装置。
背景技术
随着数据量不断膨胀,单机数据库越来越不能满足用户对大存储和高性能数据库的需求,由此,分布式数据库的应用逐渐广泛起来。
目前,主流分布式数据库基本上都是按照数据关联性对数据分类,并结合适当的数据冗余,将关联数据集中到一个数据库节点上,将数据库执行语句(如数据库检索查询语句等)下发到关联数据所在的数据库节点上执行。
例如,A,B,C三类数据,其中A和B没有关联性,A和C有关联性,B和C有关联性。在相关技术中对数据库设计部署时,会将A和C集中到数据库节点DB-1上;而将B和C集中到另一个数据库节点DB-2上;C数据在两个数据库节点DB-1和DB-2上保持一致。针对A和C的关联数据,会将数据库执行语句(如数据库检索查询语句等)下发到DB-1上执行;针对B和C的关联数据,会将数据库执行语句(如数据库检索查询语句等)下发到DB-2上执行。基于此,会出现跨数据库节点的关联数据。
具体的,出现跨数据库节点的关联数据的原因主要有两类:
(1)、刚开始设计部署数据库时,会将关联数据分布在同一数据库节点上,但是随着应用的扩展,逐渐打破关联数据分布在同一数据库节点上的限制。
延续上例,比如新增与A、B发生关联的D类数据,在不允许重新设计部署数据库的前提下,就会导致原本不在同一数据库节点上的A和B在与D成为关联数据后,必然引申出跨数据库节点的关联数据。
(2)、基于分布式设计,按照各种分发策略将数据分布到不同的DB节点上,比如A数据通过分发键HASH分布到DB-1、DB-2和DB-3,B数据通过分发键RANGE分布到DB-2、DB-3和DB-4,在查询关联数据A和B时,也必然导致跨数据库节点的关联数据查询。
现有的分布式数据库执行方案中,对于单表同一数据库节点的数据查询、单表跨数据库节点的数据查询、多表同一数据库节点的关联数据查询都有比较好的支持,但是对于多表跨数据库节点的关联数据查询,还没有相应的解决方案。
发明内容
本发明提供了一种数据库的执行方法及装置,以至少解决相关技术中不支持跨数据库节点的关联数据查询的技术问题。
根据本发明的一个方面,提供了一种数据库的执行方法,包括:接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;依据接收的上述SQL请求生成对应的语法树;遍历生成的上述语法树的各个节点,并生成执行树;按照生成的上述执行树对上述一个或者多个数据库执行数据库操作。
进一步地,遍历生成的上述语法树的各个节点,并生成执行树包括:获取生成的上述语法树上的所有数据表的分布属性;依据上述分布属性判断上述所有数据表是否分布在同一个数据库节点上;在判断结果为上述所有数据表分布在同一个数据库节点上的情况下,生成具有一个数据库节点的执行树。
进一步地,上述的方法还包括,在判断结果为上述所有数据表分布在多个不同数据库节点上的情况下,从生成的上述语法树的根节点开始,遍历上述根节点的子节点;在上述根节点的子节点存在子节点的情况下,继续遍历上述根节点的子节点的子节点,直到将各级子节点遍历完为止;依据遍历结果,生成具有多个数据库节点的中间状态的执行树。
进一步地,在依据遍历结果,生成具有多个数据库节点的中间状态的执行树之后,上述方法还包括:按照生成的上述中间状态的执行树,逐层向上合并该执行树的子节点与其父节点,直到合并到该执行树的根节点为止;依据合并结果,生成最终状态的执行树。
进一步地,按照生成的上述执行树对上述一个或者多个数据库执行数据库操作包括:遍历上述最终状态的执行树,查找所有没有依赖关系的叶节点;将查找到的上述叶节点对应的SQL语句下发到上述一个或者多个数据库中对应的数据库执行,并返回执行结果;依据返回的执行结果判断是否需要将与新增叶节点对应的SQL语句下发到上述一个或者多个数据库中对应的数据库执行;在判断结果为是的情况下,将对应的SQL语句下发到上述一个或者多个数据库中对应的数据库执行。
根据本发明的另一方面,提供了一种数据库的执行装置,包括:接收单元,用于接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;第一生成单元,用于依据接收的上述SQL请求生成对应的语法树;第二生成单元,用于遍历生成的上述语法树的各个节点,并生成执行树;执行单元,用于按照生成的上述执行树对上述一个或者多个数据库执行数据库操作。
进一步地,上述第二生成单元包括:获取模块,用于获取生成的上述语法树上的所有数据表的分布属性;第一判断模块,用于依据上述分布属性判断上述所有数据表是否分布在同一个数据库节点上;第一生成模块,用于在判断结果为上述所有数据表分布在同一个数据库节点上的情况下,生成具有一个数据库节点的执行树。
进一步地,上述第二生成单元还包括:遍历模块,用于在判断结果为上述所有数据表分布在多个不同数据库节点上的情况下,从生成的上述语法树的根节点开始,遍历上述根节点的子节点,在上述根节点的子节点存在子节点的情况下,继续遍历上述根节点的子节点的子节点,直到将各级子节点遍历完为止;第二生成模块,用于依据遍历结果,生成具有多个数据库节点的中间状态的执行树。
进一步地,上述第二生成单元还包括:合并模块,用于在依据遍历结果,生成具有多个数据库节点的中间状态的执行树之后,按照生成的上述中间状态的执行树,逐层向上合并该执行树的子节点与其父节点,直到合并到该执行树的根节点为止;第三生成模块,用于依据合并结果,生成最终状态的执行树。
进一步地,上述执行单元包括:查找模块,用于遍历上述最终状态的执行树,查找所有没有依赖关系的叶节点;第一下发模块,用于将查找到的上述叶节点对应的SQL语句下发到上述一个或者多个数据库中对应的数据库执行,并返回执行结果;第二判断模块,用于依据返回的执行结果判断是否需要将与新增叶节点对应的SQL语句下发到上述一个或者多个数据库中对应的数据库执行;第二下发模块,用于在判断结果为是的情况下,将对应的SQL语句下发到上述一个或者多个数据库中对应的数据库执行。
通过本发明,采用有效分解查询语句以及有序执行分解后的查询语句的方式,接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;依据接收的SQL请求生成对应的语法树;遍历生成的语法树的各个节点,并生成执行树;按照生成的执行树对一个或者多个数据库执行数据库操作。通过本发明,解决了相关技术中不支持跨数据库节点的关联数据查询的技术问题,进而达到了支持跨数据库节点的关联数据查询的技术效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的数据库的执行方法的流程图;
图2是根据本发明实施例的分布式数据库的执行方法的数据流图;
图3是根据本发明实施例的冠字号系统的分布式执行树的模型图;
图4是根据本发明实施例的分布式语法树的结构示意图;
图5是根据本发明实施例的分布式执行树的模型图;
图6是根据本发明实施例的数据库的执行装置的示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
在本实施例中提供了一种数据库的执行方法,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在本实施例中提供了一种数据库的执行方法,图1是根据本发明实施例的数据库的执行方法的流程图,如图1所示,该流程包括如下步骤:
步骤S102,接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;
步骤S104,依据接收的SQL请求生成对应的语法树;
步骤S106,遍历生成的语法树的各个节点,并生成执行树;
步骤S108,按照生成的执行树对一个或者多个数据库执行数据库操作。
其中,在接收SQL请求时,可以客户端或者外部系统发送的SQL请求。在生成语法树的过程中,需要对SQL请求所包含的SQL语句进行语法检查,并按照语义生成语法树。
由于实现跨数据库节点的关联数据查询的核心技术是生成分布式执行树,以及按照生成的执行树有序执行对应的SQL语句,因此,在数据库尤其是分布式数据库的执行过程中,通过有效分解SQL请求中的SQL语句(如SQL查询语句),以及有序执行分解后的SQL语句(如SQL查询语句),是实现执行分布式数据库的关键。
图2是根据本发明实施例的分布式数据库的执行方法的数据流图,本发明所提供的一种分布式数据库的执行系统主要包括以下几部分:DBPROXY,用于接收来自客户端和/或外部系统的分布式SQL请求,并对接收的SQL请求进行语法检查,按照语义生成语法树,进而基于语法树和数据分布特性生成优化执行树,进而调度并执行该执行树的各个执行节点,最后返回执行树的根节点的执行结果;数据库/数据库集群,是待查询数据实际存放、检索的数据库节点,可以是各种通用非分布式数据库系统。具体地,如图2所示,分布式数据库的执行方法的处理流程如下:DBPROXY接收来自客户端和/或外部系统的分布式SQL请求后,生成语法树,并基于该语法树和数据分布特性生成分布式优化执行树;DBPROXY将执行树可执行节点依执行顺序组织SQL请求,并下发到相关数据库/数据库集群执行;DBPROXY处理数据库/数据库集群返回的结果,完成数据汇总和处理后,将执行树根节点的执行结果返回给客户端/外部系统。
通过本发明实施例,实现了按照生成的执行树有序地对一个或者多个数据库执行对应的数据库操作的目的,解决了对分布式数据库进行数据查询,尤其是跨数据库节点进行关联数据查询时,容易出现数据查询冲突,进而导致不支持跨数据库节点的关联数据查询的技术问题,不仅可以支持单表同一数据库节点数据查询、单表跨数据库节点的数据查询、以及多表同一数据库节点的关联数据检索查询,而且还可以支持多表跨数据库节点的关联数据检索查询,不仅支持各种分布特性的同层JOIN/UNION的复杂关联数据查询,也支持多层嵌套WHERE/FROM子查询的复杂关联数据查询。
可选地,遍历生成的语法树的各个节点,并生成执行树包括:
S2,获取生成的语法树上的所有数据表的分布属性;
S4,依据分布属性判断所有数据表是否分布在同一个数据库节点上;
S6,在判断结果为所有数据表分布在同一个数据库节点上的情况下,生成具有一个数据库节点的执行树。
也即,从生成的语法树上取出其上的所有数据表,分析这些数据表中的数据分布属性,如果所有数据表中的数据都在分布在同一个数据库节点上,则生成只有一个数据库节点的执行树,此时,可以直接将SQL请求对应的SQL语句透传到数据库节点处。该数据库节点得到的SQL语句执行对应的数据库操作。
通过本发明实施例,可以实现最大检索条件下压,确保数据库节点返回的数据最小、执行树的子节点集最小、以及DBPROXY内部操作量最小。
可选地,上述方法还包括:
S8,在判断结果为所有数据表分布在多个不同数据库节点上的情况下,从生成的语法树的根节点开始,遍历根节点的子节点;
S10,在根节点的子节点存在子节点的情况下,继续遍历根节点的子节点的子节点,直到将各级子节点遍历完为止;
S12,依据遍历结果,生成具有多个数据库节点的中间状态的执行树。
由于在所有数据表分布在多个不同数据库节点上的情况下,对数据库操作时,需要跨数据库操作,此时,需要从语法树的顶层节点开始,遍历其子节点,为其子节点生成相应的执行树,如果其子节点也有自己的子节点,则需要进一步遍历这些子节点的子节点,并生成相应的执行树,这样一直递归下去,最后生成中间状态的执行树。之后,按照生成的中间状态的执行树对一个或者多个数据库执行数据库操作。
通过本发明实施例,可以避免直接将SQL语句透传到相应的数据库节点,而导致数据库操作相互冲突。
可选地,在依据遍历结果,生成具有多个数据库节点的中间状态的执行树之后,上述方法还包括:
S14,按照生成的中间状态的执行树,逐层向上合并该执行树的子节点与其父节点,直到合并到该执行树的根节点为止;
S16,依据合并结果,生成最终状态的执行树。
由于执行树的某些父节点的执行并不依赖于其子节点的执行结果,此时,可以将这些父节点与其对应的子节点进行合并处理。
实施时,在生成中间状态的执行树之后,开始将主节点(即父节点)与其子节点逐层向上合并。具体地,可以根据数据表的分布属性和where条件,判断主节点和其子节点是否可以合并,若可以,则将主、子节点合并为一个执行节点,并更新执行树,之后,继续逐层向上合并主节点(即父节点)与其子节点,直到合并到执行树的顶层节点为止,生成最终的执行树。在生成最终的执行树后,按照生成的最终的执行树对一个或者多个数据库执行数据库操作。
通过本发明实施例,在构造执行树时,可以基于整句合并性和局部语句合并性,最大程度的合并执行节点,使得执行树的执行节点最少,从而最大程度的将SQL语句合并下发,实现能整句下发则整句下发,不能整句下发则最大程度的下发局部语句。
可选地,按照生成的执行树对一个或者多个数据库执行数据库操作包括:
S18,遍历最终状态的执行树,查找所有没有依赖关系的叶节点;
S20,将查找到的叶节点对应的SQL语句下发到一个或者多个数据库中对应的数据库执行,并返回执行结果;
S22,依据返回的执行结果判断是否需要将与新增叶节点对应的SQL语句下发到一个或者多个数据库中对应的数据库执行;
S24,在判断结果为是的情况下,将对应的SQL语句下发到一个或者多个数据库中对应的数据库执行。
实施时,可以按照以下流程执行:
a)按照深度优先原则,遍历执行树,查找没有依赖关系的执行树叶节点,添并将其添加到初始待执行节点列表中;
b)对待执行节点列表以节点为单位,并发执行如下操作:
i.按照先进先出原则,从待执行节点列表中取出待执行节点作为当前执行节点;
ii.将当前执行节点对应的SQL语句下发到相关数据库节点执行,依赖子节点的SQL语句,直接利用子节点的结果集;
iii.将数据库节点返回结果存入当前执行节点;
iv.数据库节点的返回结果全部返回后,由当前执行节点汇总数据库节点的执行结果(如检索结果);
v.检测当前新增可执行节点;
vi.如果新增可执行节点不需要下发SQL语句到相关数据库节点执行,则新增可执行节点直接利用其子节点的返回结果集完成计算,并递归检测下一级新增可执行节点;
vii.如果新增可执行节点需要下发SQL语句到相关数据库节点执行,则将新增可执行节点加入到待执行节点列表。
在执行树上的执行节点全部执行完毕后,返回执行结果。
通过本发明实施例,可以将执行树中没有依赖关系的执行节点以最大并发度执行,并且对于同一执行节点,可以并行下发执行语句到相关的数据库节点中执行。
以下以几个具体实施例为例,详细阐述本发明:
(一)分布式集群数据库的冠字号系统
在该系统中,部门表DPT_TB用于记录部门ID和部门其它信息DETAIL;设备表DEV_TB用于记录设备ID和设备其它信息DETAIL;轨迹表TRAC_TB用于记录冠字号轨迹信息TRAC_INFO以及和该轨迹关联的部门DPT_ID、设备DEV_ID和操作员OPT_ID;操作员账号表OPT_TB用于记录操作员ID和操作员其它信息DETAIL。上述四张表都是分布表,遵循分发策略而分布在多个数据库集群节点中。查询轨迹详细信息需要通过轨迹信息中部门ID、设备ID及交易账号关联查询部门表、设备表和账号表的其它信息。
其中,在本方案的实现细节中,SQL请求传递给DBPROXY后,生成语法树和优化执行树。所生成的优化执行树将包含五个执行节点,其中,四个节点对应四个表的检索查询,作为子节点,根节点利用四个子节点的结果集作为JOIN操作的操作数。本方案的实施细节中,将部门ID作为部门表对应查询的排序字段,将设备ID作为设备表对应查询的排序字段,将账号ID作为账号表对应查询的排序字段,将部门ID、设备ID、账号ID作为轨迹表对应查询的排序字段,确保执行结果有序,提高JOIN操作的效率。在本方案实施细节中,SQL中出现的WHERE条件根据表进行拆分,直接随四张表的查询语句下发到响应的数据库集群节点。因为WHERE条件都已生效,根节点只需要做归并操作。DBPROXY执行完SQL操作后,完成数据的汇总和筛选,最后返回执行结果。本方案生成的语法树和执行树如图3所示,其中,(1)语法树为lex->unit->select_lex,只有一个select_lex节点,该节点存放SQL语句二进制信息;(2)执行树所涉及的关联查询表都是分布表,但分布策略不一样,语句不能合并下发到数据库节点上执行,生成图示执行树,其中,J1:Join属性执行节点,作为执行树根节点,其子节点为S1、S2、S3和S4;S1:需要下发SQL语句到数据库节点的执行节点,其父节点为J1;S2:需要下发SQL语句到数据库节点的执行节点,其父节点为J1;S4:需要下发SQL语句到数据库节点的执行节点,其父节点为J1;S4:需要下发SQL语句到数据库节点的执行节点,其父节点为J1;(3)执行树执行:初始时,S1、S2、S3和S4没有子节点,可以并行执行,其中:
S1:下发语句
SELECT TRAC_TB.TRAC_INFO,
TRAC_TB.DPT_ID,
TRAC_TB.DEV_ID,
TRAC_TB.OPT_ID
FROM TRAC_TB
WHERE……
ORDRE BY TRAC_TB.DPT_ID,
TRAC_TB.DEV_ID,
TRAC_TB.OPT_ID
需要说明的是,条件尽量下压在此处体现为where条件和为了join而增加的orderby。
S2:下发语句
SELECT DPT_TB.DETAIL,
DPT_TB.ID
FROM DPT_TB
WHERE……
ORDER BY DPT_TB.ID
需要说明的是,条件尽量下压在本处体现为因join而增加的order by。
S3:下发语句
SELECT DEV_TB.DETAIL,
DEV_TB.ID
FROM DEV_TB
WHERE……
ORDER BY DEV_TB.ID
需要说明的是,条件尽量下压在本处体现为因join而增加的order by。
S4:下发语句
SELECT OPT_TB.DETAIL,
OPT_TB.ID
FROM OPT_TB
WHERE……
ORDER BY OPT_TB.ID
需要说明的是,条件尽量下压在本处体现为因join而增加的order by。
S1、S2、S3和S4执行完后,触发J1利用S1、S2、S3、S4的结果集进行汇总JOIN操作,J1执行完后,整个执行树执行完毕,返回执行结果。
(二)分布式集群数据库的信用卡中心系统
在该系统中,一个表是关系表,用于记录卡号与帐号的对应关联关系,其中,一个卡号可以对应多一个或者多个帐号;另一个表是明细表,用于记录帐号的明细,里面只有帐号字段和明细,没有卡号。两表都是分布表,遵循分发策略而分布在多个数据库集群节点。查询某一卡号的账户明细时,涉及到两表的关联数据查询。在本方案的实现细节中,SQL请求传递给DBPROXY后,生成语法树和优化执行树。所生成的优化执行树将包含两个执行节点,其中一个节点检索查询符合条件的账号,另一个节点利用所查出的账号检索查询明细。DBPROXY执行完SQL操作后,完成数据的汇总和筛选,最后返回执行结果。
(三)分布式集群数据库的电子商城系统
在该系统中,客户表用于记录注册号、客户等级及其它明细信息;优惠表用于记录客户等级、优惠率及其它明细信息;商品表用于记录商品编号、商品类别编号、商品名称、商品单价及其它明细信息;商品类别表用于记录商品类别编号及商品类别名称;订单总表用于记录订单编号、注册号及其它明细信息;订单明细表用于记录订单编号、商品编号及其它明细信息。客户表、优惠表、商品表、商品类别表、订单总表及订单明细表都是分布表,遵循分布策略而分布在多个数据库集群节点中。客户表和优惠表通过客户等级发生关联;商品表和商品类别表通过商品类别编号发生关联;订单总表和订单明细表通过订单编号发生关联,订单总表通过注册号和客户发生关联。客户订单涉及客户表、优惠表、商品表、商品类别表、订单总表及订单明细表的关联查询。在本方案的实现细节中,订单输出的SQL请求传递给DBPROXY后,生成语法树和优化执行树。所生成的优化执行树将包含七个执行节点,其中六个节点对应六张表的检索查询,作为子节点,根节点利用六个子节点的结果集进行JOIN操作。本方案的实施细节中,关联字段作为六张子表对应查询的排序字段,确保执行结果有序,提高JOIN操作的效率。在本方案实施细节中,SQL语句中,WHERE条件客户编号和订单编号随相关表的查询语句下发到相应的数据库集群节点。因为WHERE条件都已生效,根节点只需要做归并操作。DBPROXY执行完SQL操作后,完成数据的汇总和筛选,最后返回执行结果。
(四)分布式集群数据库的在线股票交易系统
在该系统中,用户表用于记录用户ID和用户其它信息;沪市交易账号表用于记录账户ID、用户ID、证券ID和可用股数等持股明细;深市交易账号表用于记录账户ID、用户ID、证券ID和可用股数等持股明细。三张表都是分布表,遵循分发策略而分布在多个数据库集群节点中。查询用户持股明细需要通过用户ID关联查询沪市交易账号表、深市交易账号表,形成UNION结果后和用户表进行JOIN操作。在本方案的实现细节中,SQL请求传递给DBPROXY后,生成语法树和优化执行树。所生成的优化执行树将包含五个执行节点,其中三个节点对应三个表的检索查询,沪市交易账号表、深市交易账号表对应节点作为UNION属性执行节点的子节点,UNION属性的执行节点又和用户表对应节点作为执行树根节点的子节点。UNION属性节点利用沪市交易账号表和深市交易账号表对应节点的执行结果进行UNION操作;执行树根节点利用UNION属性节点的执行结果和用户表的执行结果进行JOIN操作。本方案的实施细节中,将用户ID作为用户表、沪市交易账号表和深市交易账号表对应查询的排序字段,UNION结果也按照用户ID进行排序,确保执行结果有序,提高JOIN操作的效率。在本方案实施细节中,SQL中出现的WHERE条件根据表进行拆分,直接随三张表的查询语句下发到响应的数据库集群节点。因为WHERE条件都已生效,根节点只需要做归并操作。DBPROXY执行完SQL操作后,完成数据的汇总和筛选,最后返回执行结果。
图4是根据本发明实施例的分布式语法树的结构示意图,如图2所示,检索查询语句的语法树顶级节点可以为LEX及向下的SELECT_LEX和SELECT_LEX_UNIT按层次关系组成,从上到下体现为主从关系(slave);从下到上体现为从主关系(master);从左到右,体现为兄弟关系(next,prev)。特别地,(1)上下两个SELECT_LEX之间如果是主从关系,主从关系SELECT_LEX节点之间通过SELECT_LEX_UNIT进行连接;(2)构成主从关系的节点,通过主节点的slave指针访问下层从节点,通过从节点的master指针访问主节点;(3)同一层次的节点之间通过next、prev、first和last实现相互访问;(4)语法树中最顶层SELECT节点是SELECT_LEX_UNIT类型的unit对象;(5)SELECT_LEX_UNIT的子节点SELECT_LEX之间构成UNION关系;(6)SELECT_LEX的子节点SELECT_LEX_UNIT,或者是SELECT_LEX的WHERE子查询,或者是SELECT的FROM子查询。
图5是根据本发明实施例的分布式执行树的模型图,每一个执行树节点都是一个可执行单位,具有公共属性:cld_number、master_list、next、prev、master、slave、first和last;专用属性:该节点执行操作、执行参数及执行结果;通过next、prev、first和last维护同层执行树节的关系;同层执行树首节点通过master指向执行树上层节点;每一个执行树节点通过slave执行下层执行树首节点;通过cld_number表示该节点未执行的子节点数;通过master_list指向该节点的父节点列表。执行树只有一个根节点,根节点的执行结果,就是整个分布式检索结果。由于父节点的执行依赖于子节点的执行,也就是说,此处所有子节点数为零的执行树节点,并发执行操作;执行树节点执行完毕,该节点master_list中所有父节点的cld_number减1;根节点执行完毕,结果返回。执行树节点有两类:需要下发SQL语句到数据库节点执行的执行树节点;dbproxy基于子节点执行结果进行汇总处理的节点。
如图5所示,此处,初始状态4-1、4-2、4-3、2-2作为可并行执行节点列表中的可并行执行节点;当4-1、4-2、4-3执行完毕,将新增3-1节点作为可并行执行节点;当3-1执行完毕,将新增节点2-1、2-3作为可并行执行节点;当2-1、2-2、2-3执行完毕,将新增节点1-1作为可并行执行节点;当1-1执行完毕,整个执行树执行完毕,返回执行结果。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
实施例2
在本实施例中还提供了一种数据库的执行装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是根据本发明实施例的数据库的执行装置的示意图,如图6所示,该装置包括:接收单元602,用于接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;第一生成单元604,用于依据接收的SQL请求生成对应的语法树;第二生成单元606,用于遍历生成的语法树的各个节点,并生成执行树;执行单元608,用于按照生成的执行树对一个或者多个数据库执行数据库操作。
其中,在接收SQL请求时,可以客户端或者外部系统发送的SQL请求。在生成语法树的过程中,需要对SQL请求所包含的SQL语句进行语法检查,并按照语义生成语法树。
由于实现跨数据库节点的关联数据查询的核心技术是生成分布式执行树,以及按照生成的执行树有序执行对应的SQL语句,因此,在数据库尤其是分布式数据库的执行过程中,通过有效分解SQL请求中的SQL语句(如SQL查询语句),以及有序执行分解后的SQL语句(如SQL查询语句),是实现执行分布式数据库的关键。
通过本发明实施例,实现了按照生成的执行树有序地对一个或者多个数据库执行对应的数据库操作的目的,解决了对分布式数据库进行数据查询,尤其是跨数据库节点进行关联数据查询时,容易出现数据查询冲突,进而导致不支持跨数据库节点的关联数据查询的技术问题,不仅可以支持单表同一数据库节点数据查询、单表跨数据库节点的数据查询、以及多表同一数据库节点的关联数据检索查询,而且还可以支持多表跨数据库节点的关联数据检索查询,不仅支持各种分布特性的同层JOIN/UNION的复杂关联数据查询,也支持多层嵌套WHERE/FROM子查询的复杂关联数据查询。
可选地,第二生成单元包括:获取模块,用于获取生成的语法树上的所有数据表的分布属性;第一判断模块,用于依据分布属性判断所有数据表是否分布在同一个数据库节点上;第一生成模块,用于在判断结果为所有数据表分布在同一个数据库节点上的情况下,生成具有一个数据库节点的执行树。
通过本发明实施例,可以实现最大检索条件下压,确保数据库节点返回的数据最小、执行树的子节点集最小、以及DBPROXY内部操作量最小。
可选地,第二生成单元还包括:遍历模块,用于在判断结果为所有数据表分布在多个不同数据库节点上的情况下,从生成的语法树的根节点开始,遍历根节点的子节点,在根节点的子节点存在子节点的情况下,继续遍历根节点的子节点的子节点,直到将各级子节点遍历完为止;第二生成模块,用于依据遍历结果,生成具有多个数据库节点的中间状态的执行树。
通过本发明实施例,可以避免直接将SQL语句透传到相应的数据库节点,而导致数据库操作相互冲突。
可选地,第二生成单元还包括:合并模块,用于在依据遍历结果,生成具有多个数据库节点的中间状态的执行树之后,按照生成的中间状态的执行树,逐层向上合并该执行树的子节点与其父节点,直到合并到该执行树的根节点为止;第三生成模块,用于依据合并结果,生成最终状态的执行树。
通过本发明实施例,在构造执行树时,可以基于整句合并性和局部语句合并性,最大程度的合并执行节点,使得执行树的执行节点最少,从而最大程度的将SQL语句合并下发,实现能整句下发则整句下发,不能整句下发则最大程度的下发局部语句。
可选地,执行单元包括:查找模块,用于遍历最终状态的执行树,查找所有没有依赖关系的叶节点;第一下发模块,用于将查找到的叶节点对应的SQL语句下发到一个或者多个数据库中对应的数据库执行,并返回执行结果;第二判断模块,用于依据返回的执行结果判断是否需要将与新增叶节点对应的SQL语句下发到一个或者多个数据库中对应的数据库执行;第二下发模块,用于在判断结果为是的情况下,将对应的SQL语句下发到一个或者多个数据库中对应的数据库执行。
需要说明的是,装置实施例与方法实施例相对应,方法实施例部分的可选实施方式也适应于装置部分的可选实施方式,在此不再赘述。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述模块分别位于多个处理器中。
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
S26,接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;
S28,依据接收的SQL请求生成对应的语法树;
S30,遍历生成的语法树的各个节点,并生成执行树;
S32,按照生成的执行树对一个或者多个数据库执行数据库操作。
可选地,存储介质还被设置为存储用于执行实施例1中其他实施方式的步骤的程序代码,在此不再一一赘述。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行:
S26,接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;
S28,依据接收的SQL请求生成对应的语法树;
S30,遍历生成的语法树的各个节点,并生成执行树;
S32,按照生成的执行树对一个或者多个数据库执行数据库操作。
可选地,在本实施例中,处理器根据存储介质中已存储的实施例1中其他实施方式的程序代码执相应的步骤,在此不再一一赘述。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种数据库的执行方法,其特征在于,包括:
接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;
依据接收的所述SQL请求生成对应的语法树;
遍历生成的所述语法树的各个节点,并生成执行树;
按照生成的所述执行树对所述一个或者多个数据库执行数据库操作;
所述遍历生成的所述语法树的各个节点,并生成执行树包括:
获取生成的所述语法树上的所有数据表的分布属性;
依据所述分布属性判断所述所有数据表是否分布在同一个数据库节点上;
在判断结果为所述所有数据表分布在多个不同数据库节点上的情况下,从生成的所述语法树的根节点开始,遍历所述根节点的子节点;
在所述根节点的子节点存在子节点的情况下,继续遍历所述根节点的子节点的子节点,直到将各级子节点遍历完为止;
依据遍历结果,生成具有多个数据库节点的中间状态的执行树。
2.根据权利要求1所述的方法,其特征在于,所述依据所述分布属性判断所述所有数据表是否分布在同一个数据库节点上之后包括:
在判断结果为所述所有数据表分布在同一个数据库节点上的情况下,生成具有一个数据库节点的执行树。
3.根据权利要求1所述的方法,其特征在于,在依据遍历结果,生成具有多个数据库节点的中间状态的执行树之后,所述方法还包括:
按照生成的所述中间状态的执行树,逐层向上合并该执行树的子节点与其父节点,直到合并到该执行树的根节点为止;
依据合并结果,生成最终状态的执行树。
4.根据权利要求3所述的方法,其特征在于,按照生成的所述执行树对所述一个或者多个数据库执行数据库操作包括:
遍历所述最终状态的执行树,查找所有没有依赖关系的叶节点;
将查找到的所述叶节点对应的SQL语句下发到所述一个或者多个数据库中对应的数据库执行,并返回执行结果;
依据返回的执行结果判断是否需要将与新增叶节点对应的SQL语句下发到所述一个或者多个数据库中对应的数据库执行;
在判断结果为是的情况下,将对应的SQL语句下发到所述一个或者多个数据库中对应的数据库执行。
5.一种数据库的执行装置,其特征在于,包括:
接收单元,用于接收用于对一个或者多个数据库执行数据库操作的结构化查询SQL请求;
第一生成单元,用于依据接收的所述SQL请求生成对应的语法树;
第二生成单元,用于遍历生成的所述语法树的各个节点,并生成执行树;
执行单元,用于按照生成的所述执行树对所述一个或者多个数据库执行数据库操作;
所述第二生成单元包括:
获取模块,用于获取生成的所述语法树上的所有数据表的分布属性;
第一判断模块,用于依据所述分布属性判断所述所有数据表是否分布在同一个数据库节点上;
遍历模块,用于在判断结果为所述所有数据表分布在多个不同数据库节点上的情况下,从生成的所述语法树的根节点开始,遍历所述根节点的子节点,在所述根节点的子节点存在子节点的情况下,继续遍历所述根节点的子节点的子节点,直到将各级子节点遍历完为止;
第二生成模块,用于依据遍历结果,生成具有多个数据库节点的中间状态的执行树。
6.根据权利要求5所述的装置,其特征在于,所述第二生成单元还包括:
第一生成模块,用于在判断结果为所述所有数据表分布在同一个数据库节点上的情况下,生成具有一个数据库节点的执行树。
7.根据权利要求5所述的装置,其特征在于,所述第二生成单元还包括:
合并模块,用于在依据遍历结果,生成具有多个数据库节点的中间状态的执行树之后,按照生成的所述中间状态的执行树,逐层向上合并该执行树的子节点与其父节点,直到合并到该执行树的根节点为止;
第三生成模块,用于依据合并结果,生成最终状态的执行树。
8.根据权利要求7所述的装置,其特征在于,所述执行单元包括:
查找模块,用于遍历所述最终状态的执行树,查找所有没有依赖关系的叶节点;
第一下发模块,用于将查找到的所述叶节点对应的SQL语句下发到所述一个或者多个数据库中对应的数据库执行,并返回执行结果;
第二判断模块,用于依据返回的执行结果判断是否需要将与新增叶节点对应的SQL语句下发到所述一个或者多个数据库中对应的数据库执行;
第二下发模块,用于在判断结果为是的情况下,将对应的SQL语句下发到所述一个或者多个数据库中对应的数据库执行。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510612206.4A CN106547796B (zh) | 2015-09-23 | 2015-09-23 | 数据库的执行方法及装置 |
PCT/CN2016/081892 WO2017049913A1 (zh) | 2015-09-23 | 2016-05-12 | 数据库的执行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510612206.4A CN106547796B (zh) | 2015-09-23 | 2015-09-23 | 数据库的执行方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106547796A CN106547796A (zh) | 2017-03-29 |
CN106547796B true CN106547796B (zh) | 2022-01-25 |
Family
ID=58365506
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510612206.4A Active CN106547796B (zh) | 2015-09-23 | 2015-09-23 | 数据库的执行方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106547796B (zh) |
WO (1) | WO2017049913A1 (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107391537B (zh) * | 2017-04-25 | 2020-09-15 | 阿里巴巴集团控股有限公司 | 数据关系模型的生成方法、装置及设备 |
CN110147396B (zh) * | 2017-11-08 | 2021-08-31 | 中移(苏州)软件技术有限公司 | 一种映射关系生成方法及装置 |
CN110309171B (zh) * | 2018-02-26 | 2021-08-20 | 华为技术有限公司 | 数据库查询方法、服务器和系统 |
CN108806797A (zh) * | 2018-06-27 | 2018-11-13 | 思派(北京)网络科技有限公司 | 一种医疗数据的处理方法及系统 |
CN111339132B (zh) * | 2018-12-18 | 2023-05-26 | 金篆信科有限责任公司 | 一种数据查询的方法及数据库代理 |
CN109753520B (zh) * | 2019-01-28 | 2021-01-26 | 上海达梦数据库有限公司 | 半连接查询方法、装置、服务器及存储介质 |
CN111666321B (zh) * | 2019-03-05 | 2024-01-05 | 百度在线网络技术(北京)有限公司 | 多数据源的操作方法及其装置 |
CN110096513B (zh) * | 2019-04-10 | 2024-05-28 | 创新先进技术有限公司 | 一种数据查询、资金核对方法及装置 |
CN110096709A (zh) * | 2019-05-07 | 2019-08-06 | 百度在线网络技术(北京)有限公司 | 指令处理方法及装置、服务器及计算机可读介质 |
CN110196854A (zh) * | 2019-06-11 | 2019-09-03 | 中国科学院寒区旱区环境与工程研究所 | 数据处理方法及装置 |
CN112650561B (zh) * | 2019-10-11 | 2023-04-11 | 金篆信科有限责任公司 | 事务管理方法、系统、网络设备和可读存储介质 |
CN111046065B (zh) * | 2019-10-28 | 2022-06-17 | 北京大学 | 可扩展的高性能分布式查询处理方法及装置 |
CN112749189A (zh) * | 2019-10-29 | 2021-05-04 | 北京国双科技有限公司 | 数据查询方法及装置 |
CN110990420B (zh) * | 2019-11-27 | 2024-06-04 | 腾讯科技(深圳)有限公司 | 数据查询方法、装置 |
CN111190918B (zh) * | 2019-12-25 | 2020-12-08 | 中科驭数(北京)科技有限公司 | 基于计算流图的数据库访问方法及装置 |
CN111209295B (zh) * | 2019-12-25 | 2021-02-26 | 中科驭数(北京)科技有限公司 | 计算流图优化方法、数据库访问方法及装置 |
CN111190886B (zh) * | 2019-12-25 | 2020-12-15 | 中科驭数(北京)科技有限公司 | 面向数据库访问的计算流图构建方法、访问方法及装置 |
CN112052255B (zh) * | 2020-09-02 | 2022-05-03 | 福建天晴在线互动科技有限公司 | 一种自上而下拆分多表慢查询的sql解释方法及其装置 |
CN112860692B (zh) * | 2021-01-29 | 2023-07-25 | 城云科技(中国)有限公司 | 一种数据库表结构转换方法、装置及其电子设备 |
TWI781071B (zh) * | 2021-07-27 | 2022-10-11 | 玉山綜合證券股份有限公司 | 證券下單驗證方法 |
TWI769028B (zh) * | 2021-07-27 | 2022-06-21 | 玉山綜合證券股份有限公司 | 證券下單驗證方法 |
CN116126865B (zh) * | 2023-02-17 | 2023-09-08 | 安芯网盾(北京)科技有限公司 | 一种多种数据库混合使用的代理方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103310011A (zh) * | 2013-07-02 | 2013-09-18 | 曙光信息产业(北京)有限公司 | 集群数据库系统环境下的数据查询解析方法 |
CN104123374A (zh) * | 2014-07-28 | 2014-10-29 | 北京京东尚科信息技术有限公司 | 分布式数据库中聚合查询的方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7844608B2 (en) * | 2006-12-15 | 2010-11-30 | Yahoo! Inc. | Clustered query support for a database query engine |
CN100573524C (zh) * | 2007-07-31 | 2009-12-23 | 武汉大学 | 一种高效、透明的分布式空间数据库查询方法 |
US20100250589A1 (en) * | 2009-03-26 | 2010-09-30 | Grasstell Networks Llc | Tree structured P2P overlay database system |
US20130060667A1 (en) * | 2011-09-01 | 2013-03-07 | Robert James Burke | Energy management modeling language |
US9135300B1 (en) * | 2012-12-20 | 2015-09-15 | Emc Corporation | Efficient sampling with replacement |
-
2015
- 2015-09-23 CN CN201510612206.4A patent/CN106547796B/zh active Active
-
2016
- 2016-05-12 WO PCT/CN2016/081892 patent/WO2017049913A1/zh active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103310011A (zh) * | 2013-07-02 | 2013-09-18 | 曙光信息产业(北京)有限公司 | 集群数据库系统环境下的数据查询解析方法 |
CN104123374A (zh) * | 2014-07-28 | 2014-10-29 | 北京京东尚科信息技术有限公司 | 分布式数据库中聚合查询的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2017049913A1 (zh) | 2017-03-30 |
CN106547796A (zh) | 2017-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106547796B (zh) | 数据库的执行方法及装置 | |
US11176132B2 (en) | Processing database queries using format conversion | |
US10133778B2 (en) | Query optimization using join cardinality | |
CN105608086B (zh) | 分布式数据库系统的事务处理方法及装置 | |
US9798772B2 (en) | Using persistent data samples and query-time statistics for query optimization | |
Nguyen et al. | Join processing for graph patterns: An old dog with new tricks | |
CN107291947A (zh) | 一种半结构化数据查询的方法和分布式NewSQL数据库系统 | |
CN107038207A (zh) | 一种数据查询方法、数据处理方法及装置 | |
CN111382226A (zh) | 一种数据库查询检索方法、装置和电子设备 | |
US20110035368A1 (en) | System And Method For Processing Database Queries | |
CN106294695A (zh) | 一种面向实时大数据搜索引擎的实现方法 | |
AU2005239366A1 (en) | Partial query caching | |
CN114461603A (zh) | 多源异构数据融合方法及装置 | |
US9734177B2 (en) | Index merge ordering | |
WO2019228015A1 (zh) | 基于移动端NoSQL数据库的索引创建方法及装置 | |
CN106484694A (zh) | 基于分布式数据库的全文搜索方法及系统 | |
CN112417225A (zh) | 一种多源异构数据的联合查询方法与系统 | |
KR101955376B1 (ko) | 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
US9135302B2 (en) | Query rewrite with a nested materialized view | |
CN106339432A (zh) | 一种按查询内容进行负载均衡的系统及其方法 | |
Dvoretskyi et al. | Data Utility Assessment while Optimizing the Structure and Minimizing the Volume of a Distributed Database Node. | |
Bellatreche et al. | Horizontal partitioning of very-large data warehouses under dynamically-changing query workloads via incremental algorithms | |
CN103870497B (zh) | 用于基于列的数据库的列智能机制 | |
Zhu et al. | Hydb: Access optimization for data-intensive service | |
WO2017131753A1 (en) | Text search of database with one-pass indexing including filtering |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |