CN115495528A - 分布式数据库语句执行方法、装置、设备及存储介质 - Google Patents

分布式数据库语句执行方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN115495528A
CN115495528A CN202211292579.4A CN202211292579A CN115495528A CN 115495528 A CN115495528 A CN 115495528A CN 202211292579 A CN202211292579 A CN 202211292579A CN 115495528 A CN115495528 A CN 115495528A
Authority
CN
China
Prior art keywords
statement
primary key
sql statement
global variable
data
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.)
Pending
Application number
CN202211292579.4A
Other languages
English (en)
Inventor
吴宇松
王海军
张军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jinzhuan Xinke Co Ltd
Original Assignee
Jinzhuan Xinke Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jinzhuan Xinke Co Ltd filed Critical Jinzhuan Xinke Co Ltd
Priority to CN202211292579.4A priority Critical patent/CN115495528A/zh
Publication of CN115495528A publication Critical patent/CN115495528A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种分布式数据库语句执行方法、装置、设备及存储介质,涉及数据库领域。该方法包括:响应于接收到待执行的SQL语句,判断所述SQL语句是否包含主键信息;在所述SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,对所述SQL语句进行更新;基于更新后的SQL语句,生成与数据库对应的目标SQL语句并下发至数据库。本发明实施例的技术方案,可以使得分布式数据库支持主键缺省情况下的数据存储。

Description

分布式数据库语句执行方法、装置、设备及存储介质
技术领域
本发明涉及数据库领域,尤其涉及一种分布式数据库语句执行方法、装置、设备及存储介质。
背景技术
主关键字(primary key)简称主键,是数据库表中的一个或多个字段,用于唯一的标识表中的某一条记录,数据库可以依据主键对数据库表执行相应的数据新增、删除、修改和查询操作。
在很多情况下,数据库还要对一些缺省主键的表进行操作。在单机数据库场景下,以创建数据库表为例,现有技术经常采用下述两种方式创建缺省主键的表:1)判断数据库表中是否存在非空唯一索引,若是,则将第一非空唯一索引作为主键;若否,则单机数据库生成一个不可见字段作为主键,该字段可以是自增字段,字段值随着每条数据***而自增。
在分布式数据库需要对缺省主键的表进行操作时,当相同的数据下压到多个数据库时,若仍然由每个数据库单独生成一个字段作为主键的方式来创建表或者***数据,则各数据库针对同一条数据生成的主键可能存在冲突,影响数据正常存储。
发明内容
本发明提供了一种分布式数据库语句执行方法、装置、设备及存储介质,以解决分布式数据库不支持主键缺省情况下进行数据存储的问题。
根据本发明的一方面,提供了一种分布式数据库语句执行方法,包括:
响应于接收到待执行的SQL语句,判断所述SQL语句是否包含主键信息;
在所述SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,对所述SQL语句进行更新;
基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库。
根据本发明的另一方面,提供了一种分布式数据库语句执行装置,包括:
主键判断模块,用于响应于接收到待执行的SQL语句,判断所述SQL语句是否包含主键信息;
语句更新模块,用于在所述SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,对所述SQL语句进行更新;
语句下发模块,用于基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库。
根据本发明的另一方面,提供了一种电子设备,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的分布式数据库语句执行方法。
根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的分布式数据库语句执行方法。
本发明实施例的技术方案,响应于接收到待执行的SQL语句,判断SQL语句是否包含主键信息,在SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,对SQL语句进行更新,最终基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库,解决了分布式数据库不支持主键缺省情况下进行数据存储的问题,提高了分布式数据库语句执行的灵活性,扩大分布式数据库的适用范围,满足更多的业务场景。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例提供的一种分布式数据库语句执行方法的流程图;
图2是根据本发明实施例提供的一种分布式数据库语句执行方法的流程图;
图3是根据本发明实施例提供的一种分布式数据库语句执行方法的流程图;
图4是根据本发明实施例提供的执行表创建语句的时序图;
图5是根据本发明实施例提供的执行数据***语句的时序图;
图6是根据本发明实施例提供的一种分布式数据库语句执行装置的结构示意图;
图7是实现本发明实施例的分布式数据库语句执行方法的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
图1为本发明实施例提供的一种分布式数据库语句执行方法的流程图,本实施例可适用于分布式数据库在无主键时执行SQL语句的情况,该方法可以由分布式数据库语句执行装置来执行,该分布式数据库语句执行装置可以采用硬件和/或软件的形式实现,该分布式数据库语句执行装置可配置于各种通用计算设备中,例如,通过计算设备可以是分布式计算引擎。如图1所示,该方法包括:
S110、响应于接收到待执行的SQL语句,判断SQL语句是否包含主键信息。
待执行的结构化查询语言(Structured Query Language,简称SQL)语句是用户端发送的用于指示分布式数据库执行相应操作的语句,待执行的SQL语句可以是表创建语句、数据***语句或者数据查询语句等。主键信息是指与表的主键关联的信息,示例性的,主键信息可以是主键字段或者主键值。
本发明实施例中,分布式计算引擎在接收到用户端发送的待执行的SQL语句时,首先判断该SQL语句是否包含主键信息。具体的,分布式计算引擎接收到SQL语句后,通过提取SQL语句中的关键字确定SQL语句的类型,例如,在SQL语句中提取到“CREAT”关键字,则确定当前SQL语句是表创建语句,在SQL语句中提取到“INSERT”关键字,则确定当前SQL语句是数据***语句。进一步的,判断该SQL语句中是否包含主键信息,例如,判断表创建语句中的待创建表是否包含主键字段,或者判断数据***语句中的待***数据是否包含主键值。
在一个具体的例子中,用户端发送的SQL语句是“CREAT TABLE fruit(id INTPRIMARY KEY,name VARCHAR(30),price VARCHAR(10))”,通过获取SQL语句中的关键字“CREAT TABLE”可以确定该SQL语句是表创建语句,用户创建一个表名为“fruit”的数据表,该数据表中包含3列数据,第一列是id,类型为整型数据(INT),第二列数据是name,类型为30字节的字符数据,第三列数据是price,类型为10字节的字符数据。另外,通过SQL语句中的“PRIMARY KEY”关键字即可确定该SQL语句中指定了id作为待创建表的主键字段,当不存在“PRIMARY KEY”关键字时,可以确定当前SQL语句未指定待创建表的主键字段。
在另一个具体的例子中,用户端发送的SQL语句是“INSERT INTO fruit(id,name,price)VALUES(0,apple,5)”,通过获取SQL语句中的关键字“INSERT”可以确定该SQL语句是数据***语句,用户在表fruit中***一条数据,id为0,name为apple,price为5。另外,在表fruit中已经指定主键是字段是id,且当前数据***语句中包含id值,即SQL语句中包含主键信息时。
S120、在SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,对SQL语句进行更新。
序列服务端能够以自增的方式产生全局变量,可以由部署分布式数据库的服务器作为序列服务端来产生全局变量,当然,也可以由专门的服务器作为序列服务端来产生全局变量。分布式计算引擎与序列服务端之间需要建立通信连接,在判断当前SQL语句不包含主键信息的情况下,分布式计算引擎可以向序列服务端请求全局变量,从而依据序列服务端反馈的全局变量补充SQL语句中缺失的主键信息。
为了防止单点故障,提高产生全局变量的可靠性,可以设置多个序列服务端,每个序列服务端维护不同的全局变量表。当请求全局变量时,第一个序列服务端产生故障,无法提供全局变量时,可以继续向第二个序列服务端请求全局变量。示例性的,当前设置有3个序列服务端,第一个序列服务端维护的全局变量表为从1开始,每次加3,即第一个序列服务端维护的全局变量是1,4,7,10,…。第二个序列服务端维护的全局变量为从2开始,每次加3,即第二个序列服务端维护的全局变量是2,5,8,11,…。第三个序列服务端维护的全局变量为从3开始,每次加3,即第三个序列服务端维护的全局变量是3,6,9,12,…。通过上述方式,可以在保证序列服务端可靠性的同时,保证全局变量的唯一性。
本发明实施例中,在判断SQL语句不包含主键信息的情况下,可以向序列服务端发送全局变量请求,并在接收到序列服务端反馈的全局变量后,对SQL语句进行更新。具体的,当判断表创建语句中的待创建表不包含主键字段的情况下,向序列服务端发送全局变量请求,并接收序列服务端反馈的全局变量。进而依据全局变量,生成主键字段,并将主键字段添加至SQL语句中,得到更新后的SQL语句。
同理,当判断数据***语句中的待***数据不包含主键值的情况下,向序列服务端发送全局变量请求,并接收序列服务端反馈的全局变量。进而直接将全局变量作为主键值添加至SQL语句中,得到更新后的SQL语句。
在一个具体的例子中,待执行的SQL语句是表创建语句“CREAT TABLE fruit(nameVARCHAR(30),price VARCHAR(10))”,其中不包含主键字段。此时,可以向序列服务端发送全局变量获取请求,并获取到序列服务端反馈的全局变量是100。进而可以依据该全局变量,构建一个主键字段,名为“id_100”。最终可以将生成的主键字段添加至上述SQL语句中,得到更新后的SQL语句为“CREAT TABLE fruit(name VARCHAR(30),price VARCHAR(10),id_100INT PRIMARY KEY)”。
在另一个具体的例子中,待执行的SQL语句是数据***语句“INSERT INTO fruit(name,price)VALUES(apple,5)”,其中不包含主键字段对应的主键值。此时,可以向序列服务端发送全局变量获取请求,并获取到序列服务端反馈的全局变量是101。进而可以依据该全局变量,生成与待***数据匹配的主键值,例如,可以直接将上述全局变量101作为该条数据的主键值。最终可以将生成的主键值添加至上述SQL语句中,得到更新后的SQL语句为“INSERT INTO fruit(name,price,id_100)VALUES(apple,5,101)”。
另外,在SQL语句不包含主键信息的情况下,还可以先判断SQL语句关联的数据表中是否包含非空唯一索引字段,若包含,可以直接将该非空唯一索引字段作为当前数据表的主键。
S130、基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库。
分布式数据库可以理解为由多个彼此通过网络互联的单机数据库组成的数据库。在一些情况下,用户进行数据***操作时,需要将同一个SQL语句下压到多个单机数据库。当该条语句不包含主键信息时,各单机数据库会各自生成一个主键值进行存储,可能出现同一条数据在不同单机数据库的主键值不同的情况,无法保证主键值的全局唯一性。
示例性的,用户进行数据***并需要对***数据进行多节点备份时,下发一条数据***语句,该数据***语句会被多个单机数据库执行,也即数据会同时***到多个单机数据库内。当数据***语句不包含主键值时,在第一个单机数据库中,针对待***数据,生成一个主键值为“100”,在第二个单机数据库中,针对待***数据,生成一个主键值为“70”。显然,此时不同单机数据库针对同一条数据,生成了不同的主键值,无法保证主键值的全局唯一性,影响数据正常存储。
本发明实施例中,在用户发送的SQL语句中增加主键信息,得到更新后的SQL语句后,进一步基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库。具体的,确定用户端发送的SQL语句所关联的单机数据库,进而在得到更新后的SQL语句后,将更新后的SQL语句发送至对应的单机数据库,使得单机数据库通过运行SQL语句完成表创建或者数据***操作。在需要将用户发送的SQL语句下压至多个单机数据库的情况下,先对待执行的SQL语句进行更新,增加了主键信息,进而将增加了主键信息的SQL语句再下发至各单机数据库,无需各单机数据库单独生成主键信息,使得分布式数据库包含的各单机数据库中的主键信息一致,保证了主键的全局一致性。
在一个具体的例子中,确定用户发送的待执行的SQL语句所关联的数据库,基于更新后的SQL语句和关联的数据库,生成语法执行树。进一步的,依据语法执行数,将更新后的SQL语句拆分为针对分布式数据库包含的至少一个数据库的目标SQL语句。最终将目标SQL语句发送至相应的数据库。
本发明实施例的技术方案,响应于接收到待执行的SQL语句,判断SQL语句是否包含主键信息,在SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,对SQL语句进行更新,最终基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库,解决了分布式数据库不支持主键缺省情况下进行数据存储的问题,提高了分布式数据库语句执行的灵活性,扩大分布式数据库的适用范围,满足更多的业务场景。
图2为本发明实施例提供的一种分布式数据库语句执行方法的流程图,本实施例在上述实施例的基础上进一步细化,提供了响应于接收到待执行的SQL语句,判断SQL语句是否包含主键信息的具体步骤,以及在SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,对SQL语句进行更新的具体步骤。如图2所示,该方法包括:
S210、响应于接收到待执行的表创建语句,判断表创建语句中的待创建表是否包含主键字段。
主键字段用于唯一的标识数据表中的一条记录,主键字段可以由数据库表中包含的一个或者多个字段构成。示例性的,在学生成绩表中,包括学号、姓名和成绩3个字段,其中,学号是用来唯一标识学生的字段,可以作为该数据表的主键字段。
本发明实施例中,分布式计算引擎在接收到用户端发送的待执行的表创建语句后,判断表创建语句中的待创建表是否包含主键字段。具体的,分布式计算引擎接收到待执行的表创建语句后,首先提取表创建语句中的关键字,进而依据关键字判断表创建语句中是否包含主键字段。
在一个具体的例子中,用户端发送的表创建语句是“CREAT TABLE fruit(id INTPRIMARY KEY,name VARCHAR(30),price VARCHAR(10))”,通过提取表创建语句中的关键字“PRIMARY KEY”,可以确定表创建语句已经指定了待创建表的主键字段,即表创建语句中包含主键信息。反之,若在表创建语句中未提取到关键字“PRIMARY KEY”,即可确定表创建语句中不包含主键字段。
S220、在待创建表不包含主键字段的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,生成待创建表的主键字段。
本发明实施例中,在待创建表不包含主键字段的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,生成待创建表的主键字段。具体的,表创建语句中未指定待创建表的主键字段时,可以向序列服务端发送全局变量获取请求。序列服务端依据预先设定的自增规则,确定一个唯一的全局变量并反馈至分布式计算引擎。分布式计算引擎在接收到全局变量后,依据全局变量,为待创建表构建一个主键字段。例如,将全局变量直接作为待创建表的主键字段,或者依据预先设定的命名规则,为待创建表构建主键字段,该主键字段中可以包括上述全局变量。
在一个具体的例子中,用户端发送的表创建语句是“CREAT TABLE fruit(nameVARCHAR(30),price VARCHAR(10))”,通过提取表创建语句中的关键字,可以确定表创建语句未指定待创建表的主键字段,即表创建语句中不包含主键信息。此时可以向序列服务端发送全局变量获取请求,并获取到序列服务端反馈的全局变量是“100”。进而可以依据该全局变量,为待创建表构建一个主键字段,例如,名为“id_100”。
S230、将主键字段添加至表创建语句,作为更新后的SQL语句。
本发明实施例中,在构建主键字段后,将主键字段添加至表创建语句中,得到更新后的SQL语句。在一个具体的例子中,最终可以将生成的主键字段添加至上述表创建语句中,得到更新后的表创建语句为“CREAT TABLE fruit(name VARCHAR(30),price VARCHAR(10),id_100INT PRIMARY KEY)”。
S240、基于更新后的SQL语句,生成语法执行树。
本发明实施例中,在将主键字段添加至表创建语句,得到更新后的SQL语句后,进一步对更新后的SQL语句进行词法语法分析,从而生成语法执行树。其中,语法执行树的原子节点可以包括SQL语句关键字,关系或属性的名字,常数,括号,运算符,以及SQL语句的其他成分等。
S250、依据语法执行树,将更新后的SQL语句拆分为针对分布式数据库包含的至少一个数据库的目标SQL语句,并将目标SQL语句发送至对应的数据库。
本发明实施例中,在生成语法执行树后,进一步依据语法执行树,将更新后的SQL语句拆分为针对分布式数据库包含的至少一个数据库的目标SQL语句,并将目标SQL语句发送至对应的数据库。示例性的,用户端发送的表创建语句与分布式数据库中的3个数据库关联,则可以根据语法执行树,将更新后的SQL语句拆分为针对各数据库的目标SQL语句,并分别发送至各数据库,以使各数据库能够执行表创建操作,且使用的主键值统一。
可选的,本实施例的技术方案,还包括:
响应于接收到待执行的数据查询语句,将数据查询语句发送至对应数据库;
获取数据库反馈的查询结果,并对查询结果中的主键值进行过滤。
本可选的实施例中,在不包含主键信息的情况下,创建数据表并***数据后,如果分布式计算引擎接收到待执行的数据查询语句,将数据查询语句发送至对应数据库。进一步的,获取数据库反馈的查询结果,此时查询结果中包含了数据***时生成得到主键值,但该主键值对于用户来说并无实际意义,因此,需要对查询结果中的主键值进行过滤,将过滤主键值后的查询结果反馈至用户端,避免用户端得到无实际意义的数据。
可选的,如果分布式计算引擎接收到待执行的更新(update)和删除(delete)语句的情况下,依然要进行主键值的过滤。
可选的,在进行数据导入和导出时,需要将隐藏的主键值与其他数据同时进行导入和导出。
本发明实施例的技术方案,在接收到待执行的表创建语句后,如果表创建语句中的待创建表不包含主键字段,则向序列服务端请求全局变量,依据全局变量生成待创建表的主键字段并加入至表创建语句,最终基于更新后的表创建语句向分布式数据库包含的至少一个数据库发送对应的SQL语句,可以保证分布式数据库包含的各数据库中主键字段的全局一致性。
图3为本发明实施例提供的一种分布式数据库语句执行方法的流程图,本实施例在上述实施例的基础上进一步细化,提供了响应于接收到待执行的SQL语句,判断SQL语句是否包含主键信息的具体步骤,以及在SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,对SQL语句进行更新的具体步骤。如图3所示,该方法包括:
S310、响应于接收到待执行的数据***语句,判断数据***语句中的待***数据是否包含主键值。
本发明实施例中,分布式计算引擎在接收到用户端发送的待执行的数据***语句后,判断数据***语句中的待***数据是否包含主键字段。具体的,分布式计算引擎接收到待执行的数据***语句后,首先提取数据***语句中的关键字,进而依据关键字判断数据***语句中是否包含主键值。其中,主键值是唯一标识一行数据的字段值。
在一个具体的例子中,数据表fruit的主键字段是“id_100”,用户端发送的数据***语句“INSERT INTO fruit(name,price)VALUES(apple,5)”,其中不包含主键字段“id_100”对应的主键值。
S320、在待***数据不包含主键值的情况下,判断数据***语句中是否包含待查询表。
本发明实施例中,在待***数据不包含主键值的情况下,需要进一步确认当前数据***语句中是否包含待查询表,即从待查询表中查询数据,并将查询到的数据***至当前待***语句所指定的数据表中。在包含待查询表的情况下,需要进一步考虑待查询表是否包含主键,以确定通过何种方式来确定待***数据的主键值。
在一个具体的例子中,接收到的数据***语句是“INSERT INTO fruit(name,price)SELECT(name,price)FROM table2”,即需要从数据包table2中查询name和price两个字段的数据值,进而将查询到的数据值***至数据表fruit中。此时,数据***语句中显然不包含主键值,需要进一步判断是否包含待查询表。显然,此时的数据***语句中包含待查询表table2。
S330、在待***数据不包含主键值且数据***语句中不包含待查询表的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,生成待***数据的主键值。
本发明实施例中,在待***数据不包含主键值且数据***语句中不包含待查询表的情况下,可以向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,生成待***数据的主键值。
在一个具体的例子中,数据表fruit的主键字段是“id_100”,用户端发送的是数据***语句“INSERT INTO fruit(name,price)VALUES(apple,5)”,其中不包含主键字段“id_100”对应的主键值,也不包含待查询表。此时,可以向序列服务端发送全局变量获取请求,并获取到序列服务端反馈的全局变量是101。进而可以依据该全局变量,生成与待***数据匹配的主键值,例如,可以直接将上述全局变量101作为该条数据的主键值。
S340、将主键值添加至数据***语句,作为更新后的SQL语句。
本发明实施例中,在根据序列服务端反馈的全局变量,生成主键值后,将主键值添加至数据***语句中,得到更新后的SQL语句。示例性的,接收到的数据***语句“INSERTINTO fruit(name,price)VALUES(apple,5)”,序列服务端反馈的全局变量是101。最终可以将101作为主键值添加至上述SQL语句中,得到更新后的SQL语句为“INSERT INTO fruit(name,price,id_100)VALUES(apple,5,101)”。
可选的,在待***数据不包含主键值且数据***语句中包含待查询表的情况下,判断所述待查询表中是否包含主键值;
在待查询表中不包含主键值的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,生成待***数据的主键值;
将主键值添加至数据***语句。
本可选的实施例中,在待***数据不包含主键值且数据***语句中包含待查询表的情况下,进一步判断待查询表中是否包含主键值。在待查询表中不包含主键值的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,生成待***数据的主键值,并将主键值添加至数据***语句。具体的SQL语句更新方式与上述不包含待查询表的情况相同,此处不再赘述。
可选的,在待***数据不包含主键值且数据***语句中的待查询表包含主键值的情况下,将待查询表中的主键值添加至数据***语句。
本可选的实施例中,在待***数据不包含主键值且数据***语句中的待查询表包含主键值的情况下,可以直接将待查询表中的主键值添加至数据***语句,作为当前***数据在新的数据表中的主键值。
S350、基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库。
本发明实施例的技术方案,在接收到待执行的数据***语句后,如果数据***语句中的待***数据不包含主键值,则向序列服务端请求全局变量,依据全局变量生成待***数据的主键值并加入至数据***语句,最终基于更新后的数据***语句向分布式数据库包含的至少一个数据库发送对应的SQL语句,可以保证分布式数据库包含的各数据库中主键值的全局一致性。
图4是执行表创建语句的时序图。如图4所示,表创建语句执行过程包括:
S410、用户端向分布式计算引擎发送表创建语句。
S420、分布式计算引擎判断表创建语句中是否包含主键字段,若是,则执行S460,若否,则执行S430。
S430、分布式计算引擎向序列服务端请求全局自增变量。
S440、序列服务端向分布式计算引擎反馈全局变量。
S450、分布式计算引擎将接收到的全局变量作为主键字段添加至表创建语句中,得到更新的表创建语句。
S460、分布式计算引擎依据表创建语句生成语法执行树。
S470、分布式计算引擎根据语法执行树,向分布式数据库关联的至少一个数据库中下发对应SQL语句。
S480、数据库向分布式计算引擎反馈SQL语句的执行结果。
S490、分布式计算引擎将执行结果反馈至用户端。
本发明实施例的技术方案,在接收到待执行的表创建语句后,如果表创建语句中的待创建表不包含主键字段,则向序列服务端请求全局变量,依据全局变量生成待创建表的主键字段并加入至表创建语句,最终基于更新后的表创建语句向分布式数据库包含的至少一个数据库发送对应的SQL语句,可以保证分布式数据库包含的各数据库中主键字段的全局一致性。
图5是执行数据***语句的时序图。如图5所示,数据***语句执行过程包括:
S510、用户端向分布式计算引擎发送数据***语句。
S520、分布式计算引擎判断数据***语句中是否包含主键值,若是,则执行S590,若否,则执行S530。
S530、分布式计算引擎判断数据***语句中是否包含待查询表,若是,则执行S540,若否,则执行S550。
S540、分布式计算引擎判断待查询表是否包含主键值,若否,则执行S550,若是,则执行S580。
S550、分布式计算引擎向序列服务端请求全局自增变量。
S560、序列服务端向分布式计算引擎反馈全局变量。
S570、分布式计算引擎将接收到的全局变量作为主键值添加至数据***语句中,得到更新的数据***语句。
S580、分布式计算引擎将待查询表中的主键值添加至数据***语句中,得到更新后的数据***语句。
S590、分布式计算引擎依据数据***语句生成语法执行树。
S591、分布式计算引擎根据语法执行树,向分布式数据库关联的至少一个数据库中下发对应SQL语句。
S592、数据库向分布式计算引擎反馈SQL语句的执行结果。
S593、分布式计算引擎将执行结果反馈至用户端。
本发明实施例的技术方案,在接收到待执行的数据***语句后,如果数据***语句中的待***数据不包含主键值,则向序列服务端请求全局变量,依据全局变量生成待***数据的主键值并加入至数据***语句,最终基于更新后的数据***语句向分布式数据库包含的至少一个数据库发送对应的SQL语句,可以保证分布式数据库包含的各数据库中主键值的全局一致性。
图6为本发明实施例提供的一种分布式数据库语句执行装置的结构示意图。如图6所示,该装置包括:
主键判断模块610,用于响应于接收到待执行的SQL语句,判断所述SQL语句是否包含主键信息;
语句更新模块620,用于在所述SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,对所述SQL语句进行更新;
语句下发模块630,用于基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库。
本发明实施例的技术方案,响应于接收到待执行的SQL语句,判断SQL语句是否包含主键信息,在SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据序列服务端反馈的全局变量,对SQL语句进行更新,最终基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库,解决了分布式数据库不支持主键缺省情况下进行数据存储的问题,提高了分布式数据库语句执行的灵活性,扩大分布式数据库的适用范围,满足更多的业务场景。
可选的,主键判断模块610,具体用于:
响应于接收到待执行的表创建语句,判断所述表创建语句中的待创建表是否包含主键字段;
语句更新模块620,具体用于:
在所述待创建表不包含主键字段的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,生成所述待创建表的主键字段;
将所述主键字段添加至所述表创建语句。
可选的,主键判断模块610,还用于:
响应于接收到待执行的数据***语句,判断所述数据***语句中的待***数据是否包含主键值;
语句更新模块620,还用于:
在所述待***数据不包含主键值的情况下,判断所述数据***语句中是否包含待查询表;
在所述待***数据不包含主键值且所述数据***语句中不包含待查询表的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,生成所述待***数据的主键值;
将所述主键值添加至所述数据***语句。
可选的,语句更新模块620,还用于:
在所述待***数据不包含主键值且所述数据***语句中包含待查询表的情况下,判断所述待查询表中是否包含主键值;
在所述待查询表中不包含主键值的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,生成所述待***数据的主键值;
将所述主键值添加至所述数据***语句。
可选的,分布式数据库语句执行装置,还包括:
主键***模块,用于在所述待***数据不包含主键值且所述数据***语句中的待查询表包含主键值的情况下,将待查询表中的主键值添加至所述数据***语句。
可选的,分布式数据库语句执行装置,还包括:
语句发送模块,用于响应于接收到待执行的数据查询语句,将所述数据查询语句发送至对应数据库;
主键值过滤模块,用于获取数据库反馈的查询结果,并对所述查询结果中的主键值进行过滤。
可选的,语句下发模块630,具体用于:
基于更新后的SQL语句,生成语法执行树;
依据所述语法执行树,将更新后的SQL语句拆分为针对分布式数据库包含的至少一个数据库的目标SQL语句,并将所述目标SQL语句发送至对应的数据库。
本发明实施例所提供的分布式数据库语句执行装置可执行本发明任意实施例所提供的分布式数据库语句执行方法,具备执行方法相应的功能模块和有益效果。
图7示出了可以用来实施本发明的实施例的电子设备10的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图7所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
电子设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如分布式数据库语句执行方法。
在一些实施例中,分布式数据库语句执行方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的分布式数据库语句执行方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行分布式数据库语句执行方法。
本文中以上描述的***和技术的各种实施方式可以在数字电子电路***、集成电路***、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上***的***(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程***上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储***、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储***、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在电子设备上实施此处描述的***和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的***和技术实施在包括后台部件的计算***(例如,作为数据服务器)、或者包括中间件部件的计算***(例如,应用服务器)、或者包括前端部件的计算***(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的***和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算***中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将***的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算***可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种分布式数据库语句执行方法,其特征在于,包括:
响应于接收到待执行的结构化查询语言SQL语句,判断所述SQL语句是否包含主键信息;
在所述SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,对所述SQL语句进行更新;
基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库。
2.根据权利要求1所述的方法,其特征在于,响应于接收到待执行的SQL语句,判断所述SQL语句是否包含主键信息,包括:
响应于接收到待执行的表创建语句,判断所述表创建语句中的待创建表是否包含主键字段;
在所述SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,对所述SQL语句进行更新,包括:
在所述待创建表不包含主键字段的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,生成所述待创建表的主键字段;
将所述主键字段添加至所述表创建语句。
3.根据权利要求1所述的方法,其特征在于,响应于接收到待执行的SQL语句,判断所述SQL语句是否包含主键信息,包括:
响应于接收到待执行的数据***语句,判断所述数据***语句中的待***数据是否包含主键值;
在所述SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,对所述SQL语句进行更新,包括:
在所述待***数据不包含主键值的情况下,判断所述数据***语句中是否包含待查询表;
在所述待***数据不包含主键值且所述数据***语句中不包含待查询表的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,生成所述待***数据的主键值;
将所述主键值添加至所述数据***语句。
4.根据权利要求3所述的方法,其特征在于,在所述SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,对所述SQL语句进行更新,还包括:
在所述待***数据不包含主键值且所述数据***语句中包含待查询表的情况下,判断所述待查询表中是否包含主键值;
在所述待查询表中不包含主键值的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,生成所述待***数据的主键值;
将所述主键值添加至所述数据***语句。
5.根据权利要求4所述的方法,其特征在于,还包括:
在所述待***数据不包含主键值且所述数据***语句中的待查询表包含主键值的情况下,将待查询表中的主键值添加至所述数据***语句。
6.根据权利要求1所述的方法,其特征在于,还包括:
响应于接收到待执行的数据查询语句,将所述数据查询语句发送至对应数据库;
获取数据库反馈的查询结果,并对所述查询结果中的主键值进行过滤。
7.根据权利要求1-6任一所述的方法,其特征在于,基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库,包括:
基于更新后的SQL语句,生成语法执行树;
依据所述语法执行树,将更新后的SQL语句拆分为针对分布式数据库包含的至少一个数据库的目标SQL语句,并将所述目标SQL语句发送至对应的数据库。
8.一种分布式数据库语句执行装置,其特征在于,包括:
主键判断模块,用于响应于接收到待执行的SQL语句,判断所述SQL语句是否包含主键信息;
语句更新模块,用于在所述SQL语句不包含主键信息的情况下,向序列服务端发送全局变量获取请求,并依据所述序列服务端反馈的全局变量,对所述SQL语句进行更新;
语句下发模块,用于基于更新后的SQL语句,生成与分布式数据库对应的目标SQL语句并下发至分布式数据库。
9.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的分布式数据库语句执行方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-7中任一项所述的分布式数据库语句执行方法。
CN202211292579.4A 2022-10-21 2022-10-21 分布式数据库语句执行方法、装置、设备及存储介质 Pending CN115495528A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211292579.4A CN115495528A (zh) 2022-10-21 2022-10-21 分布式数据库语句执行方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211292579.4A CN115495528A (zh) 2022-10-21 2022-10-21 分布式数据库语句执行方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN115495528A true CN115495528A (zh) 2022-12-20

Family

ID=84474926

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211292579.4A Pending CN115495528A (zh) 2022-10-21 2022-10-21 分布式数据库语句执行方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN115495528A (zh)

Similar Documents

Publication Publication Date Title
CN111339171B (zh) 数据查询的方法、装置及设备
CN111858760B (zh) 一种异构数据库的数据处理方法及装置
CN114579104A (zh) 数据分析场景的生成方法、装置、设备及存储介质
CN114676678B (zh) 结构化查询语言数据的解析方法、装置和电子设备
CN116611411A (zh) 一种业务***报表生成方法、装置、设备及存储介质
CN113220710B (zh) 数据查询方法、装置、电子设备以及存储介质
CN114816578A (zh) 基于配置表的程序配置文件生成方法、装置及设备
CN114218266A (zh) 一种数据查询方法、装置、电子设备和存储介质
CN116955856A (zh) 信息展示方法、装置、电子设备以及存储介质
CN116028517A (zh) 一种融合数据库***及电子设备
CN115525659A (zh) 数据查询方法、装置、电子设备及存储介质
CN115905322A (zh) 业务处理方法、装置、电子设备及存储介质
CN115328898A (zh) 一种数据处理方法、装置、电子设备及介质
CN115329150A (zh) 生成搜索条件树的方法、装置、电子设备及存储介质
CN115495528A (zh) 分布式数据库语句执行方法、装置、设备及存储介质
CN113239054B (zh) 信息生成方法及相关装置
CN112887426B (zh) 信息流的推送方法、装置、电子设备以及存储介质
CN115169316A (zh) 数据处理模板生成方法、装置、电子设备及存储介质
CN114968950A (zh) 任务的处理方法、装置、电子设备和介质
CN113569144B (zh) 推广内容的检索方法、装置、设备、存储介质及程序产品
CN113377922B (zh) 用于匹配信息的方法、装置、电子设备以及介质
JP7212714B2 (ja) 関係ネットワーク生成方法、装置、電子設備、記憶媒体、及びプログラム
CN114428891A (zh) 一种网络资源的处理方法、装置、***、设备及存储介质
CN116431764A (zh) 一种数据匹配方法、装置、设备以及存储介质
CN117931805A (zh) 一种数据处理方法、装置、电子设备和存储介质

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