CN111459968A - 数据查询方法、数据查询系统及计算机存储介质 - Google Patents
数据查询方法、数据查询系统及计算机存储介质 Download PDFInfo
- Publication number
- CN111459968A CN111459968A CN202010230421.9A CN202010230421A CN111459968A CN 111459968 A CN111459968 A CN 111459968A CN 202010230421 A CN202010230421 A CN 202010230421A CN 111459968 A CN111459968 A CN 111459968A
- Authority
- CN
- China
- Prior art keywords
- statement
- data
- standard
- synonymous
- query
- 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
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/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种数据查询方法、数据查询系统及计算机存储介质,用于解决多个同义SQL语句需要进行多次查询而导致系统资源浪费的技术问题。本申请实施例方法包括:数据查询系统接收若干个同义SQL语句,并对该若干个同义SQL语句进行解析,该若干个同义SQL语句的查询结果相同。之后,数据查询系统可以根据预设排序规则对同义SQL语句中的多个选取字段进行排序,若同义SQL语句有多个,则多个同义SQL语句经过调整选取字段顺序之后,可得到相同的标准SQL语句,因此,数据查询系统只需查询一个标准SQL语句中的多个选取字段所对应的目标数据,即可得到多个同义SQL语句的同一查询结果,而无需根据多个同义SQL语句进行多次查询,节省了系统的处理资源。
Description
技术领域
本申请实施例涉及数据处理领域,具体涉及一种数据查询方法、数据查询系统及计算机存储介质。
背景技术
用户需要对应用系统的数据库所存储的数据进行查询、存取或者更新时,可以通过界面配置或者手工书写生成结构化查询语言(structured query language、SQL)语句,应用系统接收到用户输入的SQL语句之后,根据该SQL语句在数据库中查询该SQL语句对应的数据,并将查询到的数据反馈给用户。
由于SQL语句生成规则的差异、用户手工书写SQL语句的习惯不同等原因,使得生成的SQL语句在查询字段顺序、where条件顺序等方面表现出差异。例如,以下是基于同一数据表A的两个SQL语句,语句1为select id,name from A where id=5and name='person',语句2为select name,id from A where name='person'and id=5,可以看出,语句1的查询字段select id,name与语句2的查询字段select name,id在顺序上是不同的,同时,语句1的where条件和语句2的where条件在顺序上也不相同。但是,两个SQL语句查询到的结果是一致的,获取到的数据是一致的。多个有上述差异但查询结果相同的SQL语句可以互称为同义SQL语句。
虽然多个同义SQL语句的查询结果相同,但是应用系统仍会将多个同义SQL语句判断为不同的SQL语句,并根据每个同义SQL语句分别进行查询,得到相同的查询结果。由于应用系统需要多次查询,这在一定程度上占用了系统的处理资源。
发明内容
本申请实施例提供了一种数据查询方法、数据查询系统及计算机存储介质,用于解决多个同义SQL语句需要进行多次查询而导致系统资源浪费的技术问题。
本申请实施例第一方面提供了一种数据查询方法,所述方法应用于数据查询系统,所述方法包括:
接收若干个同义结构化查询语言SQL语句,并对所述若干个同义SQL语句进行解析,所述同义SQL语句包括多个选取字段,所述若干个同义SQL语句的查询结果相同;
根据预设排序规则对所述同义SQL语句中的多个选取字段进行排序,得到标准SQL语句;
在数据库中查询所述标准SQL语句中的多个选取字段所对应的目标数据。
优选的,所述得到标准SQL语句之后,所述方法还包括:
接收客户端发送的实时SQL语句,并对所述实时SQL语句进行解析,所述实时SQL语句包括多个选取字段;
根据所述预设排序规则对所述实时SQL语句中的多个选取字段进行排序;
判断排序后的所述实时SQL语句与所述标准SQL语句是否相同;
若相同,则向所述客户端发送所述目标数据;
若不相同,则在数据库中查询排序后的所述实时SQL语句中的多个选取字段所对应的数据,并向所述客户端发送所述数据。
优选的,所述在数据库中查询所述标准SQL语句中的多个选取字段所对应的目标数据之后,所述方法还包括:
将所述目标数据与所述标准SQL语句关联存储到缓存中;
若排序后的所述实时SQL语句与所述标准SQL语句相同,则所述向所述客户端发送所述目标数据,包括:
在所述缓存中获取所述标准SQL语句对应的所述目标数据,并向所述客户端发送所述目标数据。
优选的,所述将所述目标数据与所述标准SQL语句关联存储到缓存中,包括:
将所述标准SQL语句作为键、所述目标数据作为值,形成键值对数据;
将所述键值对数据存储到所述缓存中。
优选的,所述将所述标准SQL语句作为键、所述目标数据作为值,包括:
对所述标准SQL语句进行哈希,得到所述标准SQL语句对应的哈希值;
将所述标准SQL语句对应的哈希值作为键、所述目标数据作为值,形成所述键值对数据。
优选的,所述目标数据包括多个子数据,每个所述子数据分别对应所述标准SQL语句中的选取字段;
若排序后的所述实时SQL语句与所述标准SQL语句相同,则所述向所述客户端发送所述目标数据,包括:
将所述多个子数据的排列顺序调整为对应于所述实时SQL语句中的多个选取字段的排列顺序;
向所述客户端发送调整后的所述目标数据。
优选的,所述同义SQL语句中的多个选取字段包括查询字段和/或过滤字段;
所述根据预设排序规则对所述同义SQL语句中的多个选取字段进行排序,包括:
根据所述预设排序规则对所述同义SQL语句中的多个查询字段进行排序;
根据所述预设排序规则对所述同义SQL语句中的多个过滤字段进行排序,得到所述标准SQL语句。
优选的,所述方法还包括:
根据数据库执行性能对接收到的SQL语句中的多个选取字段的排列顺序进行优化。
优选的,所述解析工具为Apache calcite、JSqlParser或JavaCC中的一种或多种。
本申请实施例第二方面提供了一种数据查询系统,包括:
解析单元,用于接收若干个同义结构化查询语言SQL语句,并对所述若干个同义SQL语句进行解析,所述同义SQL语句包括多个选取字段,所述若干个同义SQL语句的查询结果相同;
排序单元,用于根据预设排序规则对所述同义SQL语句中的多个选取字段进行排序,得到标准SQL语句;
查询单元,用于在数据库中查询所述标准SQL语句中的多个选取字段所对应的目标数据。
优选的,所述解析单元还用于接收客户端发送的实时SQL语句,并对所述实时SQL语句进行解析,所述实时SQL语句包括多个选取字段;
所述排序单元还用于根据所述预设排序规则对所述实时SQL语句中的多个选取字段进行排序;
所述数据查询系统还包括:
判断单元,用于判断排序后的所述实时SQL语句与所述标准SQL语句是否相同;
发送单元,用于当排序后的所述实时SQL语句与所述标准SQL语句相同时,向所述客户端发送所述目标数据;
所述查询单元还用于当排序后的所述实时SQL语句与所述标准SQL语句不相同时,在数据库中查询排序后的所述实时SQL语句中的多个选取字段所对应的数据,并向所述客户端发送所述数据。
优选的,所述数据查询系统还包括:
存储单元,用于将所述目标数据与所述标准SQL语句关联存储到缓存中;
所述发送单元具体用于在所述缓存中获取所述标准SQL语句对应的所述目标数据,并向所述客户端发送所述目标数据。
优选的,所述存储单元具体用于将所述标准SQL语句作为键、所述目标数据作为值,形成键值对数据,将所述键值对数据存储到所述缓存中。
优选的,所述存储单元具体用于对所述标准SQL语句进行哈希,得到所述标准SQL语句对应的哈希值,将所述标准SQL语句对应的哈希值作为键、所述目标数据作为值,形成所述键值对数据。
优选的,所述目标数据包括多个子数据,每个所述子数据分别对应所述标准SQL语句中的选取字段;
所述发送单元具体用于将所述多个子数据的排列顺序调整为对应于所述实时SQL语句中的多个选取字段的排列顺序,向所述客户端发送调整后的所述目标数据。
优选的,所述同义SQL语句中的多个选取字段包括查询字段和/或过滤字段;
所述排序单元具体用于根据所述预设排序规则对所述同义SQL语句中的多个查询字段进行排序,根据所述预设排序规则对所述同义SQL语句中的多个过滤字段进行排序,得到所述标准SQL语句。
优选的,所述数据查询系统还包括:
优化单元,用于根据数据库执行性能对接收到的SQL语句中的多个选取字段的排列顺序进行优化。
优选的,所述解析工具为Apache calcite、JSqlParser或JavaCC中的一种或多种。
本申请实施例第三方面提供了一种数据查询系统,包括:
处理器、存储器、输入输出设备;
所述处理器与所述存储器、输入输出设备相连;
所述输入输出设备用于接收若干个同义结构化查询语言SQL语句,所述处理器用于对所述若干个同义SQL语句进行解析,所述同义SQL语句包括多个选取字段,所述若干个同义SQL语句的查询结果相同;
所述处理器还用于根据预设排序规则对所述同义SQL语句中的多个选取字段进行排序,得到标准SQL语句,在数据库中查询所述标准SQL语句中的多个选取字段所对应的目标数据。
本申请实施例第四方面提供了一种计算机存储介质,计算机存储介质中存储有指令,该指令在计算机上执行时,使得计算机执行前述第一方面的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请实施例中,数据查询系统接收若干个同义SQL语句,并对该若干个同义SQL语句进行解析,其中,同义SQL语句包括多个选取字段,该若干个同义SQL语句的查询结果相同。之后,数据查询系统可以根据预设排序规则对同义SQL语句中的多个选取字段进行排序,若同义SQL语句有多个,则多个同义SQL语句经过调整选取字段顺序之后,可得到相同的标准SQL语句,因此,数据查询系统只需查询一个标准SQL语句中的多个选取字段所对应的目标数据,即可得到多个同义SQL语句的同一查询结果,而无需根据多个同义SQL语句进行多次查询,节省了系统的处理资源。
附图说明
图1为本申请实施例中数据查询方法一个流程示意图;
图2为本申请实施例中数据查询方法另一流程示意图;
图3为本申请实施例中数据查询系统一个结构示意图;
图4为本申请实施例中数据查询系统另一结构示意图;
图5为本申请实施例中数据查询系统另一结构示意图。
具体实施方式
本申请实施例提供了一种数据查询方法、数据查询系统及计算机存储介质,用于解决多个同义SQL语句需要进行多次查询而导致系统资源浪费的技术问题。
请参阅图1,本申请实施例中数据查询方法一个实施例包括:
101、接收若干个同义结构化查询语言SQL语句,并对若干个同义SQL语句进行解析;
当客户端需要对数据库存储的数据进行查询时,客户端可以在用户界面上输入结构化查询语言(structured query language、SQL)语句。客户端输入的若干个SQL语句中,可能存在同义SQL语句。本实施例中,每个SQL语句包括多个选取字段,选取字段是指用于表示选取某一数据的字段。同义SQL语句是指查询到的结果相同的多个SQL语句,同义SQL语句可能在选取字段的排列顺序上、是否包括空格等方面表现出差异,但多个同义SQL语句之间的查询结果是相同的。
例如,以下是基于同一数据表A的两个SQL语句,语句1为select id,name from Awhere id=5and name='person',语句2为select name,id from A where name='person'and id=5,可以看出,语句1和语句2均有选取字段,语句1的选取字段是selectid,name及where id=5and name='person',语句2的选取字段是select name,id及wherename='person'and id=5,语句1的选取字段select id,name与语句2的选取字段selectname,id在顺序上是不同的,同时,语句1的where条件和语句2的where条件在顺序上也不相同。但是,两个SQL语句查询到的结果是一致的,获取到的数据是一致的。
数据查询系统接收到客户端输入的若干个同义SQL语句,并对该若干个同义SQL语句进行解析,对SQL语句进行解析的目的是便于数据查询系统可以理解该若干个同义SQL语句的语法,即便于数据查询系统获知SQL语句所要查询的数据。
本实施例中,数据查询系统可以是数据库或者数据库系统,也可以是其他设置有数据库的数据处理系统,如ERP系统、CRM系统等,数据查询系统的具体类型不作限定。
102、根据预设排序规则对同义SQL语句中的多个选取字段进行排序,得到标准SQL语句;
数据查询系统对若干个同义SQL语句进行解析之后,根据预设的排序规则对同义SQL语句中的多个选取字段进行排序,若同义SQL语句有多个,则对每一个同义SQL语句中的多个选取字段进行排序;若同义SQL语句仅有一个,则对该一个同义SQL语句中的多个选取字段进行排序,得到排序后的同义SQL语句,即按照预设的排序规则对同义SQL语句中的多个选取字段进行重新排序。为便于区分和描述,本实施例将该排序后的同义SQL语句称为标准SQL语句。
本实施例中,预设的排序规则可以是由操作人员任意设定的,例如,对于一个数据表A,该数据表A有5列,每一列的数据均对应一个元数据,5个元数据“序列号NO.”、“姓名name”、“年龄age”、“地址address”、“身份证号码ID”按照顺序依次排列,则操作人员可以将排序规则预设为“同义SQL语句中的多个选取字段按照该数据表的5个元数据的排列顺序依次排列”。若数据处理系统接收到一个同义SQL语句,该同义SQL语句的语法被解析为selectname,id,age from A,则数据查询系统将该同义SQL语句进行排序,将其包括的多个选取字段的排列顺序调整为select name,age,id from A。同理,若一个同义SQL语句表示为select id,name,age,NO.from A,则该同义SQL语句中的多个选取字段应当被调整为select NO.,name,age,id from A。以此类推,数据查询系统按照预设的排序规则对接收到的每一个同义SQL语句中的多个选取字段的排列顺序进行调整,从而得到所述的标准SQL语句。
当然,排序规则也可以被预设为“同义SQL语句中的多个选取字段按照该数据表的5个元数据的排列顺序依次倒序排列”,则同义SQL语句select name,id,age from A应当被重新调整为select id,age,name from A。
本实施例中,排序规则的具体内容不作限定,排序规则可以根据实际情况进行确定,或者由操作人员任意设定。
103、在数据库中查询标准SQL语句中的多个选取字段所对应的目标数据;
数据查询系统对每个同义SQL语句进行选取字段的重排序之后,得到标准SQL语句。由于每个同义SQL语句均按照相同的排序规则进行重排序,得到的标准SQL语句在选取字段的字段名称及排列顺序等方面均是相同的。若多个标准SQL语句在选取字段的字段名称及排列顺序等方面均相同,则数据查询系统可以确定该多个标准SQL语句是相同的SQL语句,则数据查询系统只需对一个标准SQL语句进行查询即可,而无需对多个相同的标准SQL语句进行查询。
数据查询系统在数据库中查询标准SQL语句中的多个选取字段所对应的目标数据。沿用步骤102中的例子,若一个标准SQL语句表示为select name,age,id from A,则数据查询系统在数据库中查找数据表A中元数据为姓名name、年龄age及身份证号码ID所分别对应的列数据,并可以将查找到的目标数据返回给客户端。
本实施例中,数据查询系统只需查询一个标准SQL语句中的多个选取字段所对应的目标数据,即可得到多个同义SQL语句的同一查询结果,而无需根据多个同义SQL语句进行多次查询,节省了系统的处理资源。
下面将在前述图1所示实施例的基础上,进一步地详细描述本申请实施例。请参阅图2,本申请实施例中数据查询方法另一实施例包括:
201、接收若干个同义结构化查询语言SQL语句,并对若干个同义SQL语句进行解析;
本步骤所执行的操作与前述图1所示实施例中的步骤101所执行的操作类似。本实施例中,数据查询系统可以使用解析工具对同义SQL语句进行解析,数据查询系统所使用的解析工具可以是Apache calcite、JSqlParser或JavaCC中的一种或多种,只要是能够解析SQL语句以使SQL语句能被系统所理解的解析工具即可,具体的类型不作限定。
202、根据预设排序规则对同义SQL语句中的多个选取字段进行排序,得到标准SQL语句;
本步骤所执行的操作与前述图1所示实施例中的步骤102所执行的操作类似。
本实施例中,同义SQL语句中的多个选取字段可以包括有查询字段和过滤字段,也可以仅包括查询字段,其中,查询字段用于表示选取某一列的列数据的字段,过滤字段用于表示从选取的某一列数据中选取特定的数据,或者从选取的某一列数据中过滤掉一些特定的数据,例如过滤字段可以是SQL语句中的where条件字段。
例如,对于一个数据表A,该数据表A有5列,每一列的数据均对应一个元数据,5个元数据“序列号NO.”、“姓名name”、“年龄age”、“地址address”、“身份证号码ID”按照顺序依次排列,则操作人员可以将排序规则预设为“同义SQL语句中的多个选取字段按照该数据表的5个元数据的排列顺序依次排列”。
若数据处理系统接收到一个同义SQL语句,该同义SQL语句表示为select name,age from A where name='person'and age=25,该同义SQL语句表示了要从元数据为姓名name的列数据中获取姓名为“person”的数据,以及从元数据为年龄age的列数据中获取年龄为“25”的数据,则该同义SQL语句的查询字段为select name,age,过滤字段为wherename='person'and age=25。
若同义SQL语句中的多个选取字段包括查询字段和过滤字段,则数据查询系统可以按照预设的排序规则分别对查询字段及过滤字段进行排序,预设的排序规则规定了查询字段的排列顺序和过滤字段的排列顺序。数据查询系统按照预设的排序规则分别对查询字段及过滤字段进行排序之后,可得到标准SQL语句。
本实施例中,数据查询系统可以先执行查询字段的排序,后执行过滤字段的排序;也可以先执行过滤字段的排序,后执行查询字段的排序,过滤字段的排序与查询字段的排序两者在执行顺序上无先后之分,本实施例对此不作限定。
沿用本步骤的前述例子,操作人员可以将排序规则预设为同义SQL语句中的多个查询字段按照该数据表的5个元数据的排列顺序依次排列,并且同义SQL语句中的多个过滤字段同样按照该数据表的5个元数据的排列顺序依次排列。若数据处理系统接收到一个同义SQL语句,该同义SQL语句表示为select age,name from A where age=25and name='person',则数据查询系统根据预设的排序规则对该同义SQL语句进行排序,将其包括的多个选取字段的排列顺序重新调整为select name,age from A where name='person'andage=25。以此类推,数据查询系统按照预设的排序规则对接收到的每一个同义SQL语句中的查询字段及过滤字段的排列顺序进行调整,从而得到所述的标准SQL语句。
本实施例中,预设的排序规则可以由操作人员根据实际情况或者数据表的具体内容自由设定,本实施例对排序规则的具体内容不作限定。
203、在数据库中查询标准SQL语句中的多个选取字段所对应的目标数据;
本步骤所执行的操作与前述图1所示实施例中的步骤103所执行的操作类似,此处不再赘述。
204、将目标数据与标准SQL语句关联存储到缓存中;
数据查询系统根据标准SQL语句查询到对应的目标数据之后,为了减少数据查询系统进行数据查询的计算量,数据查询系统可以将标准SQL语句与该标准SQL语句对应的目标数据建立关联,并将两者关联存储到缓存中,这也方便了数据查询系统获取目标数据。
本实施例中,数据查询系统的缓存可以是Memcached缓存或者是Redis缓存,缓存的具体类型不作限定。
目标数据与标准SQL语句关联存储到缓存中的具体方式可以是,将标准SQL语句作为键(key),并将目标数据作为值(value),从而形成键值对数据,再将该键值对数据存储到缓存中。则数据查询系统在获取目标数据的时候,可以根据键获取到对应的值,即根据标准SQL语句获取到对应的目标数据。
目标数据与标准SQL语句关联存储的具体方式还可以是,将标准SQL语句在缓存中的存储地址与目标数据在缓存中的存储地址建立关联,则数据查询系统也可根据标准SQL语句的存储地址查找到目标数据的存储地址,从而获取到目标数据。本实施例中,目标数据与标准SQL语句关联存储的具体方式不作限定。
本实施例中,数据查询系统除了可以将标准SQL语句作为键,也可以将标准SQL语句对应的哈希值作为键。具体方式是,对标准SQL语句进行哈希,得到标准SQL语句对应的哈希值,再将标准SQL语句对应的哈希值作为键、目标数据作为值,形成键值对数据,并将该键值对数据存储到缓存中。以标准SQL语句对应的哈希值作为键的有益效果在于,标准SQL语句经过哈希之后得到的哈希值的数据量远小于标准SQL语句的数据量,因此可以节约缓存的存储空间。
205、接收客户端发送的实时SQL语句,并对实时SQL语句进行解析;
本实施例中,数据查询系统接收客户端发送的实时SQL语句,实时SQL语句是指客户端在任意时间发送的SQL语句,因此,同样的,该实时SQL语句也包括多个选取字段。数据查询系统接收到实时SQL语句之后,对该实时SQL语句进行解析,以便于理解实时SQL语句的语法。
其中,数据查询系统对实时SQL语句进行解析的过程与前述步骤201对同义SQL语句进行解析的过程类似,此处不再赘述。
206、根据预设排序规则对实时SQL语句中的多个选取字段进行排序;
数据查询系统对实时SQL语句解析之后,根据步骤202所述的预设排序规则对实时SQL语句中的多个选取字段进行排序。对实时SQL语句进行排序的具体过程与步骤202中对同义SQL语句进行排序的具体过程类似,此处不再赘述。
207、判断排序后的实时SQL语句与标准SQL语句是否相同,若相同,则执行步骤208,若不相同,则执行步骤209;
在实时SQL语句中的多个选取字段经过重排序之后,数据查询系统可以判断排序后的实时SQL语句与标准SQL语句是否相同,判断实时SQL语句的选取字段与标准SQL语句的选取字段是否相同。
例如,对于一个数据表A,该数据表A有5列,每一列的数据均对应一个元数据,5个元数据“序列号NO.”、“姓名name”、“年龄age”、“地址address”、“身份证号码ID”按照顺序依次排列,并且数据查询系统设定的排序规则为“SQL语句中的多个查询字段按照该数据表的5个元数据的排列顺序依次排列,且SQL语句中的多个过滤字段同样按照该数据表的5个元数据的排列顺序依次排列”。若数据查询系统已保存的标准SQL语句中有一个标准SQL语句表示为select name,age from A where name='person'and age=25,当数据查询系统接收到的实时SQL语句表示为select age,name from A where age=25and name='person',数据查询系统首先对该实时SQL语句的选取字段进行重排序,得到排序后的实时SQL语句为select name,age from A where name='person'and age=25。之后,数据查询系统判断排序后的实时SQL语句与标准SQL语句是否相同,由于排序后的实时SQL语句中的多个选取字段的字段名称与标准SQL语句中的多个选取字段的字段名称均可以一一对应,并且选取字段的排列顺序也相同,因此,数据查询系统可以确定两个SQL语句相同。
反之,若数据查询系统接收到的实时SQL语句表示为select name,NO.from Awhere NO.=5and name='person',则数据查询系统首先对该实时SQL语句的选取字段进行重排序,得到排序后的实时SQL语句为select NO.,name from A where NO.=5and name='person',显然,该实时SQL语句并没有要求获取年龄的数据,而是要求获取序列号的数据,因此,该实时SQL语句与标准SQL语句不相同,所要求获取的数据不同,数据查询系统确定该实时SQL语句不同于标准SQL语句。
若排序后的实时SQL语句与标准SQL语句相同,则数据查询系统继续执行步骤208;若不相同,则执行步骤209。
208、向客户端发送目标数据;
当数据查询系统确定排序后的实时SQL语句与标准SQL语句相同,表明实时SQL语句所要求获取的数据与标准SQL语句所要求获取的数据相同,因此,数据查询系统可以向客户端发送标准SQL语句对应的目标数据。相比于以往需要根据实时SQL语句来查询对应的数据,数据查询系统直接将目标数据发送给客户端,可以无需执行数据查询的操作,大大节省了系统的处理资源。
本实施例中,若标准SQL语句对应的目标数据已被存储在缓存中,数据查询系统还可以直接从缓存中获取标准SQL语句对应的目标数据,并向客户端发送目标数据。其中,标准SQL语句与目标数据是关联存储在缓存中的,因此,数据查询系统可以根据标准SQL语句在缓存中查找到对应的目标数据。数据查询系统直接从缓存中提取目标数据,可以加快系统的响应速度,提升用户体验。
本实施例中,标准SQL语句中的选取字段可以用于表示选取某个数据,则标准SQL语句的多个选取字段表示了选取多个数据,该多个数据即构成了本实施例所述的目标数据,目标数据也就是标准SQL语句所要获取的数据。构成目标数据的该多个数据可以被称为目标数据的子数据。因此,每个子数据分别对应了标准SQL语句中的选取字段。
例如,沿用步骤207中的例子,一个标准SQL语句为select name,age from Awhere name='person'and age=25,当数据查询系统接收到实时SQL语句select name,age from A where age=25and name='person',该实时SQL语句与标准SQL语句两者的查询结果相同,该查询结果也就是目标数据,目标数据包括了姓名为“person”的子数据及年龄为“25”的子数据。姓名为“person”的子数据对应了查询字段select name及过滤字段where name='person',年龄为“25”的子数据对应了查询字段select age及过滤字段where age=25。
本实施例中,根据实时SQL语句查询到的多个子数据的排列顺序可能与目标数据中的多个子数据的排列顺序不同。例如,实时SQL语句为select age,name from A whereage=25and name='person',该实时SQL语句中,与年龄数据对应的选取字段在前,与姓名数据对应的选取字段在后,表示了该实时SQL语句所要求的数据的排列顺序为年龄数据在前,姓名数据在后。而标准SQL语句为select name,age from A where name='person'andage=25,则目标数据的子数据的排列顺序为姓名数据在前,年龄数据在后。因此,在这种情况下,根据实时SQL语句查询到的多个子数据的排列顺序与目标数据中的多个子数据的排列顺序不同。此时,目标数据中,姓名为“person”的子数据在前,年龄为“25”的子数据在后,若将此目标数据返回给客户端,则客户端收到的数据将显示年龄为person,姓名为25,这显然与客户端的要求不符。
因此,为确保返回给客户端的数据准确无误,数据可以准确地对应客户端的要求,数据查询系统可以对目标数据的子数据的排序进行调整,将多个子数据的排列顺序调整为对应于实时SQL语句中的多个选取字段的排列顺序,即对应于实时SQL语句所要求的数据的排列顺序,并向客户端发送调整后的目标数据。
例如,在上述例子中,实时SQL语句要求的数据的排列顺序为年龄数据在前,姓名数据在后,则数据查询系统根据该实时SQL语句的要求,对目标数据进行调整,将姓名为“person”的子数据置于后面,将年龄为“25”的子数据置于前面,并将调整后的目标数据发送至客户端,则客户端收到的数据将会显示年龄为25,姓名为person,符合了客户端对数据的要求。
209、在数据库中查询排序后的实时SQL语句中的多个选取字段所对应的数据,并向客户端发送数据;
当排序后的实时SQL语句与标准SQL语句不相同时,表明实时SQL语句所要求获取的数据与标准SQL语句所要求获取的数据不同,此时,数据查询系统需要从数据库中查询排序后的实时SQL语句中的多个选取字段所对应的数据,并向客户端发送数据。根据实时SQL语句查询对应的数据的过程与前述根据标准SQL语句查询目标数据的过程类似,此处不再赘述。
本实施例中,不同的数据库在数据查询的执行性能上可能会有所差异,数据库可能对某一句式的SQL语句的执行性能更好,而对另一句式的SQL语句的执行性能较差。例如,数据表A有5列,每一列的数据均对应一个元数据,5个元数据“序列号NO.”、“姓名name”、“年龄age”、“地址address”、“身份证号码ID”按照顺序依次排列。数据库可能对select age,id,name from A这一句式的SQL语句的执行性能更好,数据查询的计算速度更快。若接收到的SQL语句为select id,name,age from A,则该接收到的SQL语句也可以被强制调整为select age,id,name from A。根据数据库执行性能对SQL语句中的多个选取字段的排列顺序进行优化,可以适应数据库的执行性能,使SQL语句能够被更好地执行。
上面对本申请实施例中的数据查询方法进行了描述,下面对本申请实施例中的数据查询系统进行描述,请参阅图3,本申请实施例中数据查询系统一个实施例包括:
解析单元301,用于接收若干个同义结构化查询语言SQL语句,并对若干个同义SQL语句进行解析,同义SQL语句包括多个选取字段,若干个同义SQL语句的查询结果相同;
排序单元302,用于根据预设排序规则对同义SQL语句中的多个选取字段进行排序,得到标准SQL语句;
查询单元303,用于在数据库中查询标准SQL语句中的多个选取字段所对应的目标数据。
本实施例中,数据查询系统中各单元所执行的操作与前述图1所示实施例中描述的类似,此处不再赘述。
本实施例中,解析单元301接收若干个同义SQL语句,并对该若干个同义SQL语句进行解析,其中,同义SQL语句包括多个选取字段,该若干个同义SQL语句的查询结果相同。之后,排序单元302可以根据预设排序规则对同义SQL语句中的多个选取字段进行排序,若同义SQL语句有多个,则多个同义SQL语句经过调整选取字段顺序之后,可得到相同的标准SQL语句,因此,查询单元303只需查询一个标准SQL语句中的多个选取字段所对应的目标数据,即可得到多个同义SQL语句的同一查询结果,而无需根据多个同义SQL语句进行多次查询,节省了系统的处理资源。
请参阅图4,本申请实施例中数据查询系统一个实施例包括:
解析单元401,用于接收若干个同义结构化查询语言SQL语句,并对若干个同义SQL语句进行解析,同义SQL语句包括多个选取字段,若干个同义SQL语句的查询结果相同;
排序单元402,用于根据预设排序规则对同义SQL语句中的多个选取字段进行排序,得到标准SQL语句;
查询单元403,用于在数据库中查询标准SQL语句中的多个选取字段所对应的目标数据。
本实施例的一种实施方式中,解析单元401还用于接收客户端发送的实时SQL语句,并对实时SQL语句进行解析,实时SQL语句包括多个选取字段;
排序单元402还用于根据预设排序规则对实时SQL语句中的多个选取字段进行排序;
数据查询系统还包括:
判断单元404,用于判断排序后的实时SQL语句与标准SQL语句是否相同;
发送单元405,用于当排序后的实时SQL语句与标准SQL语句相同时,向客户端发送目标数据;
查询单元403还用于当排序后的实时SQL语句与标准SQL语句不相同时,在数据库中查询排序后的实时SQL语句中的多个选取字段所对应的数据,并向客户端发送数据。
本实施例的另一种实施方式中,数据查询系统还包括:
存储单元406,用于将目标数据与标准SQL语句关联存储到缓存中;
发送单元405具体用于在缓存中获取标准SQL语句对应的目标数据,并向客户端发送目标数据。
本实施例的另一种实施方式中,存储单元406具体用于将标准SQL语句作为键、目标数据作为值,形成键值对数据,将键值对数据存储到缓存中。
本实施例的另一种实施方式中,存储单元406具体用于对标准SQL语句进行哈希,得到标准SQL语句对应的哈希值,将标准SQL语句对应的哈希值作为键、目标数据作为值,形成键值对数据。
本实施例的另一种实施方式中,目标数据包括多个子数据,每个子数据分别对应标准SQL语句中的选取字段;
发送单元405具体用于将多个子数据的排列顺序调整为对应于实时SQL语句中的多个选取字段的排列顺序,向客户端发送调整后的目标数据。
本实施例的另一种实施方式中,同义SQL语句中的多个选取字段包括查询字段和/或过滤字段;
排序单元402具体用于根据预设排序规则对同义SQL语句中的多个查询字段进行排序,根据预设排序规则对同义SQL语句中的多个过滤字段进行排序,得到标准SQL语句。
本实施例的另一种实施方式中,数据查询系统还包括:
优化单元407,用于根据数据库执行性能对接收到的SQL语句中的多个选取字段的排列顺序进行优化。
本实施例中,解析工具可以是Apache calcite、JSqlParser或JavaCC中的一种或多种。
本实施例中,数据查询系统中各单元所执行的操作与前述图2所示实施例中描述的类似,此处不再赘述。
下面对本申请实施例中的数据查询系统进行描述,请参阅图5,本申请实施例中数据查询系统一个实施例包括:
该数据查询系统500可以包括一个或一个以上中央处理器(central processingunits,CPU)501和存储器505,该存储器505中存储有一个或一个以上的应用程序或数据。
其中,存储器505可以是易失性存储或持久存储。存储在存储器505的程序可以包括一个或一个以上模块,每个模块可以包括对数据查询系统中的一系列指令操作。更进一步地,中央处理器501可以设置为与存储器505通信,在数据查询系统500上执行存储器505中的一系列指令操作。
数据查询系统500还可以包括一个或一个以上电源502,一个或一个以上有线或无线网络接口503,一个或一个以上输入输出接口504,和/或,一个或一个以上操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等。
该中央处理器501可以执行前述图1至图2所示实施例中数据查询系统所执行的操作,具体此处不再赘述。
本申请实施例还提供了一种计算机存储介质,其中一个实施例包括:该计算机存储介质中存储有指令,该指令在计算机上执行时,使得该计算机执行前述图1至图2所示实施例中数据查询系统所执行的操作。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,read-onlymemory)、随机存取存储器(RAM,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (10)
1.一种数据查询方法,其特征在于,所述方法应用于数据查询系统,所述方法包括:
接收若干个同义结构化查询语言SQL语句,并对所述若干个同义SQL语句进行解析,所述同义SQL语句包括多个选取字段,所述若干个同义SQL语句的查询结果相同;
根据预设排序规则对所述同义SQL语句中的多个选取字段进行排序,得到标准SQL语句;
在数据库中查询所述标准SQL语句中的多个选取字段所对应的目标数据。
2.根据权利要求1所述的数据查询方法,其特征在于,所述得到标准SQL语句之后,所述方法还包括:
接收客户端发送的实时SQL语句,并对所述实时SQL语句进行解析,所述实时SQL语句包括多个选取字段;
根据所述预设排序规则对所述实时SQL语句中的多个选取字段进行排序;
判断排序后的所述实时SQL语句与所述标准SQL语句是否相同;
若相同,则向所述客户端发送所述目标数据;
若不相同,则在数据库中查询排序后的所述实时SQL语句中的多个选取字段所对应的数据,并向所述客户端发送所述数据。
3.根据权利要求2所述的数据查询方法,其特征在于,所述在数据库中查询所述标准SQL语句中的多个选取字段所对应的目标数据之后,所述方法还包括:
将所述目标数据与所述标准SQL语句关联存储到缓存中;
若排序后的所述实时SQL语句与所述标准SQL语句相同,则所述向所述客户端发送所述目标数据,包括:
在所述缓存中获取所述标准SQL语句对应的所述目标数据,并向所述客户端发送所述目标数据。
4.根据权利要求3所述的数据查询方法,其特征在于,所述将所述目标数据与所述标准SQL语句关联存储到缓存中,包括:
将所述标准SQL语句作为键、所述目标数据作为值,形成键值对数据;
将所述键值对数据存储到所述缓存中。
5.根据权利要求4所述的数据查询方法,其特征在于,所述将所述标准SQL语句作为键、所述目标数据作为值,包括:
对所述标准SQL语句进行哈希,得到所述标准SQL语句对应的哈希值;
将所述标准SQL语句对应的哈希值作为键、所述目标数据作为值,形成所述键值对数据。
6.根据权利要求2所述的数据查询方法,其特征在于,所述目标数据包括多个子数据,每个所述子数据分别对应所述标准SQL语句中的选取字段;
若排序后的所述实时SQL语句与所述标准SQL语句相同,则所述向所述客户端发送所述目标数据,包括:
将所述多个子数据的排列顺序调整为对应于所述实时SQL语句中的多个选取字段的排列顺序;
向所述客户端发送调整后的所述目标数据。
7.根据权利要求1至6任一项所述的数据查询方法,其特征在于,所述同义SQL语句中的多个选取字段包括查询字段和/或过滤字段;
所述根据预设排序规则对所述同义SQL语句中的多个选取字段进行排序,包括:
根据所述预设排序规则对所述同义SQL语句中的多个查询字段进行排序;
根据所述预设排序规则对所述同义SQL语句中的多个过滤字段进行排序,得到所述标准SQL语句。
8.根据权利要求1至6任一项所述的数据查询方法,其特征在于,所述方法还包括:
根据数据库执行性能对接收到的SQL语句中的多个选取字段的排列顺序进行优化。
9.一种数据查询系统,其特征在于,所述数据查询系统包括:
解析单元,用于接收若干个同义结构化查询语言SQL语句,并对所述若干个同义SQL语句进行解析,所述同义SQL语句包括多个选取字段,所述若干个同义SQL语句的查询结果相同;
排序单元,用于根据预设排序规则对所述同义SQL语句中的多个选取字段进行排序,得到标准SQL语句;
查询单元,用于在数据库中查询所述标准SQL语句中的多个选取字段所对应的目标数据。
10.一种计算机存储介质,其特征在于,所述计算机存储介质中存储有指令,所述指令在计算机上执行时,使得所述计算机执行如权利要求1至8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010230421.9A CN111459968A (zh) | 2020-03-27 | 2020-03-27 | 数据查询方法、数据查询系统及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010230421.9A CN111459968A (zh) | 2020-03-27 | 2020-03-27 | 数据查询方法、数据查询系统及计算机存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111459968A true CN111459968A (zh) | 2020-07-28 |
Family
ID=71679794
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010230421.9A Pending CN111459968A (zh) | 2020-03-27 | 2020-03-27 | 数据查询方法、数据查询系统及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111459968A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112749215A (zh) * | 2020-12-31 | 2021-05-04 | 成都泛微网络科技有限公司 | 一种数据展示方法及相关设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572979A (zh) * | 2014-12-31 | 2015-04-29 | 北京锐安科技有限公司 | 一种处理结构化查询语言sql的方法及装置 |
WO2015184762A1 (zh) * | 2014-11-06 | 2015-12-10 | 中兴通讯股份有限公司 | 数据库查询方法及装置 |
CN108536853A (zh) * | 2018-04-11 | 2018-09-14 | 上海驰骛信息科技有限公司 | 一种基于查询资源与精确度的自动路由数据库查询系统及方法 |
CN109947770A (zh) * | 2018-08-14 | 2019-06-28 | 武汉斗鱼网络科技有限公司 | 一种数据库查询方法、终端设备及存储介质 |
US20190220535A1 (en) * | 2018-01-18 | 2019-07-18 | Electronics And Telecommunications Research Instit Ute | Database system based on jit compilation, query processing method thereof, and stored procedure optimization method thereof |
-
2020
- 2020-03-27 CN CN202010230421.9A patent/CN111459968A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015184762A1 (zh) * | 2014-11-06 | 2015-12-10 | 中兴通讯股份有限公司 | 数据库查询方法及装置 |
CN104572979A (zh) * | 2014-12-31 | 2015-04-29 | 北京锐安科技有限公司 | 一种处理结构化查询语言sql的方法及装置 |
US20190220535A1 (en) * | 2018-01-18 | 2019-07-18 | Electronics And Telecommunications Research Instit Ute | Database system based on jit compilation, query processing method thereof, and stored procedure optimization method thereof |
CN108536853A (zh) * | 2018-04-11 | 2018-09-14 | 上海驰骛信息科技有限公司 | 一种基于查询资源与精确度的自动路由数据库查询系统及方法 |
CN109947770A (zh) * | 2018-08-14 | 2019-06-28 | 武汉斗鱼网络科技有限公司 | 一种数据库查询方法、终端设备及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112749215A (zh) * | 2020-12-31 | 2021-05-04 | 成都泛微网络科技有限公司 | 一种数据展示方法及相关设备 |
CN112749215B (zh) * | 2020-12-31 | 2023-03-17 | 成都泛微网络科技有限公司 | 一种数据展示方法及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109299110B (zh) | 数据查询方法、装置、存储介质和电子设备 | |
US10866971B2 (en) | Hash collision tables for relational operations | |
US10726016B2 (en) | In-memory column-level multi-versioned global dictionary for in-memory databases | |
US20160147837A1 (en) | Multisource semantic partitioning | |
US11169994B2 (en) | Query method and query device | |
CN110399389B (zh) | 数据分页查询方法、装置、设备及存储介质 | |
CN109933617B (zh) | 一种数据处理方法、装置以及相关设备和介质 | |
US9870394B2 (en) | Query routing method, query routing server performing the same and storage medium storing the same | |
CN108920607B (zh) | 字段发现方法、装置及电子设备 | |
CN108733790B (zh) | 数据排序方法、装置、服务器和存储介质 | |
CN113553339B (zh) | 数据查询方法、中间件、电子装置和存储介质 | |
CN111459968A (zh) | 数据查询方法、数据查询系统及计算机存储介质 | |
CN113918605A (zh) | 数据查询方法、装置、设备以及计算机存储介质 | |
CN112364014A (zh) | 数据查询方法、装置、服务器及存储介质 | |
CN111107042A (zh) | 报文解析方法、装置、计算机设备和存储介质 | |
CA3148489A1 (en) | Method of and device for assessing data query time consumption, computer equipment and storage medium | |
CN116126864A (zh) | 索引构建方法、数据查询方法及相关设备 | |
CN110069489B (zh) | 一种信息处理方法、装置、设备及计算机可读存储介质 | |
CN110928900B (zh) | 多表数据的查询方法、装置、终端以及计算机存储介质 | |
CN114218263A (zh) | 物化视图的自动创建方法及基于物化视图的快速查询方法 | |
CN116955538B (zh) | 医疗字典数据匹配方法及装置、电子设备及存储介质 | |
CN113688161A (zh) | 缓存数据查询方法、装置、设备及存储介质 | |
CN111797095B (zh) | 索引构建方法和json数据查询方法 | |
CN112667632B (zh) | 一种元数据处理方法及装置 | |
CN114780589A (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 |