一种基于结构化查询语言的查询数据库的方法和装置与流程

文档序号:18191516发布日期:2019-07-17 05:36阅读:186来源:国知局
本发明涉及计算机
技术领域
:,尤其涉及一种基于结构化查询语言的查询数据库的方法、装置、电子设备和计算机可读介质。
背景技术
::随着大数据技术的广泛应用,对海量数据的分析统计需求日益增加,用户对系统的时效性和数据跨系统分析要求不断提高,传统的关系型数据库的查询处理逐渐无法满足大数据的存储和查询需求,目前主流的大数据框架对数据的查询时效性仍然不高,无法达到对海量数据的秒级响应。针对大数据的存储和查询需求,不同的存储技术都有对应的解决方案,对应mysql(一种关系型数据库管理系统,使用sql结构化查询语言进行数据访问),为了提升系统的吞吐量,可以采用分库分表的方式达到目的。hdfs是一种基于hadoop分布式系统架构的能够运行在通用硬件上的分布式文件系统,数据存储在硬盘上,能提供高吞吐量的数据访问。presto是一种分布式mysql查询引擎,它被设计为用来专门进行高速、实时的数据分析,其所有的数据处理都是在内存中进行。在实现本发明过程中,发明人发现现有技术中至少存在如下问题:目前关系型数据库mysql难以支撑大规模数据的存储和快速查询功能,对应高吞吐量的hdfs分布式文件存储系统,能实现大数据存储和查询,但其响应时间较长,不能满足实时查询的需求。技术实现要素:有鉴于此,本发明实施例提供一种基于结构化查询语言的查询数据库的方法和装置,能够在有限范围内提高数据库查询访问速度,缩短响应时间,改善用户体验。为实现上述目的,根据本发明实施例的一个方面,提供了一种基于结构化查询语言的查询数据库的方法。所述方法包括:解析用户提交的查询命令,其中所述查询命令中包括:条件表达式以及所述条件表达式之间的逻辑关系,所述逻辑关系包括“与逻辑关系”和/或“或逻辑关系”;将每个所述条件表达式替换成预设的该条件表达式对应的预定义值的二进制串,将所述二进制串按照所述逻辑关系进行逻辑运算得到运算结果;遍历所述结果的每一位,对每个位的值符合预定义值的位,获取所述表的预定义值对应的数据并组合后返回。可选地,所述预设的条件表达式的二进制串的位数大于或等于所述表的行数,所述二进制串的位的值对应所述预定义值。可选地,所述预设的条件表达式的二进制串存储于缓存中,所述缓存采用redis实现。可选地,当数据库被更新时,根据更新的数据库重新产生所述二进制串。为实现上述目的,根据本发明实施例的另一个方面,提供了一种基于结构化查询语言的查询数据库的装置,包括:解析模块,用于解析用户提交的查询命令,其中所述查询命令中包括:条件表达式以及所述条件表达式之间的逻辑关系,所述逻辑关系包括“与逻辑关系”和/或“或逻辑关系”;替换模块,用于将每个所述条件表达式替换成预设的该条件表达式对应的预定义值的二进制串,将所述二进制串按照所述逻辑关系进行逻辑运算得到运算结果;查询模块,用于遍历所述结果的每一位,对每个位的值符合预定义值的位,获取所述表的预定义值对应的数据并组合后返回。可选地,其特征在于,所述预设的条件表达式的二进制串的位数大于或等于所述表的行数,所述二进制串的位的值对应所述预定义值。可选地,所述装置还包括:缓存模块,用于储存所述预设的条件表达式的二进制串,所述缓存模块采用redis实现。可选地,当数据库被更新时,根据更新的数据库重新产生所述二进制串。为实现上述目的,根据本发明实施例的再一个方面,提供了一种基于结构化查询语言的查询数据库的电子设备,其特征在于,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现一种基于结构化查询语言的查询数据库的方法。为实现上述目的,根据本发明实施例的再一个方面,提供了一种基于结构化查询语言的查询数据库的计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现一种基于结构化查询语言的查询数据库的方法中任一所述的方法。上述发明中的一个实施例具有如下优点或有益效果:因为采用将查询命令中的每个条件表达式替换成预设的该条件表达式对应的二进制串,并得到逻辑运算结果,遍历所述结果的每一位,对每个位的值符合预定义值的位,获取所述查询命令中的表的列中对应的数据并返回,所以克服了大数据存储和查询响应时间较长,不能满足实时查询需求的技术问题,进而达到能够在有限范围内提高数据库查询访问速度,缩短响应时间,改善用户体验的技术效果。上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。附图说明附图用于更好地理解本发明,不构成对本发明的不当限定。其中:图1是根据本发明实施例的一种基于结构化查询语言的查询数据库的主要步骤的示意图;图2是根据本发明实施例的一种基于结构化查询语言的查询数据库的装置的主要部分的示意图;图3是本发明实施例可以应用于其中的示例性系统架构图;图4是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。具体实施方式以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。图1是根据本发明实施例的根据本发明实施例的一种基于结构化查询语言的查询数据库的方法的主要步骤的示意图,如图1所示:步骤s101表示解析用户提交的查询命令,其中所述查询命令中包括:条件表达式以及所述条件表达式之间的逻辑关系,所述逻辑关系包括“与逻辑关系”和/或“或逻辑关系”;此步骤用于提取查询条件,提高访问速度。所述预设的条件表达式的二进制串的位数大于或等于所述表的行数,所述二进制串的位的值对应所述预定义值。当数据库被更新时,根据更新的数据库重新产生所述二进制串。例如,数据库的表具有n行,n是正整数,sql查询命令中的from部分为查询的表名,select部分为查询的列名,解析查询命令以得到where部分的条件表达式,每个条件表达式的形式是“列名=预定义值”,其中预定义值的范围是可枚举范围;对所述可枚举范围中的每个预定义值,预先产生该预定义值的n位二进制串,其中该二进制串的第n位对应所述表的该列的第n行,当相应列取值为预定义值时,该二进制串中对应的位是1,否则是0。如果二进制串的位数大于n,不与预定义值对应的位的取值可用于作为其他操作的设置。如果该表更新为m(m为正整数)行时,相应的,每个预定义值的二进制串至少也要有m位。例如,有如下数据库表(表1.1),表名为“table”,共有6行数据。表1.1序号姓名年龄城市婚姻状况职业薪水1张三30北京已婚教师120002李丽25上海未婚教师90003李四36广州已婚it150004马六35上海已婚it150005王五28广州未婚教师110006陈红22北京未婚it11000选取列名“城市”、“婚姻状况”和“职业”作为预定义值,其范围是可枚举范围。对于表1.1的示例性例子,列名“城市”的可枚举值范围是{北京、上海、广州};列名“婚姻状况”的可枚举取值范围是{未婚、已婚};列名“职业”的可枚举取值范围是{教师、it}。对上述可枚举范围中每个具体数值定义如下二进制串(表1.2、表1.3和表1.4)。其中,在表1.2中,用“1”表示“已婚”,“0”表示未婚,则根据表1.1中的“婚姻状况”列可知,该列的第一行为“已婚”,对应的二进制串的第一位为“1”,该列的第三行和第四行为“已婚”,对应的二进制串的第三位和第四位为“1”,该列的其他行为“未婚”,对应的二进制串的位均为“0”。以此类推,得到其他可枚举的预定义值的二进制串。表1.2婚姻状况/位123456已婚101100未婚010011表1.3城市/位123456北京100001上海010100广州001010表1.4职业/位123456it001101教师110010例如,有用户提交的查询命令为:select姓名,年龄,薪水fromtablewhere省份=‘北京’and婚姻状况=‘已婚’and职业=‘教师’。在步骤s101中解析该查询命令以提取select列部分、from表部分和where条件表达式部分。select列部分为列名为{姓名,年龄,薪水}。from表部分为table(即表1.1)。where条件表达式部分为“省份=‘北京’and婚姻状况=‘已婚’and职业=‘教师’”。以及条件表达式之间的逻辑关系为“与逻辑关系”(and)。其中,所述预设的条件表达式的二进制串可存储于缓存中,所述缓存可采用redis(redis是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api)来构建。此步骤可以进一步提高访问时效,并对大数据的处理有较高的兼容性。步骤s102表示将每个所述条件表达式替换成预设的该条件表达式对应的预定义值的二进制串,将所述二进制串按照所述逻辑关系进行逻辑运算得到运算结果;此步骤用于将原条件表达式替换为二进制串,并计算结果,提高查询效率。表1.5城市:北京100001婚姻状况:已婚101100职业:教师110010逻辑运算结果100000根据表1.2-1.4替换条件表达式“省份=‘北京’and婚姻状况=‘已婚’and职业=‘教师’”并将三个条件表达式的二进制串进行与逻辑运算得到表1.5。步骤s103表示遍历所述结果的每一位,对每个位的值符合预定义值的位,获取所述表的预定义值对应的数据并组合后返回。此步骤用于获取对应数据返回查询结果,提高查询时效。根据上述实施例,遍历所述结果二进制串“100000”的每一位,对每个值为1的位,分别获取表1.1中“城市”“婚姻状况”“教师”对应的二进制串的第一位均为1的数据,获取到的数据内容如表1.6。根据查询命令的列名组合后返回的数据如表1.7。表1.6序号姓名年龄城市婚姻状况职业薪水1张三30北京已婚教师12000表1.7姓名年龄薪水张三3012000图2是根据本发明实施例的一种基于结构化查询语言的查询数据库的装置200的主要部分的示意图。解析模块201用于解析用户提交的查询命令,其中所述查询命令中包括:条件表达式以及所述条件表达式之间的逻辑关系,所述逻辑关系包括“与逻辑关系”和/或“或逻辑关系”;此模块用于提取查询条件,提高访问速度。所述预设的条件表达式的二进制串的位数大于或等于所述表的行数,所述二进制串的位的值对应所述预定义值。当数据库被更新时,根据更新的数据库重新产生所述二进制串。例如,数据库的表具有n行,n是正整数,sql查询命令中的from部分为查询的表名,select部分为查询的列名,解析查询命令以得到where部分的条件表达式,每个条件表达式的形式是“列名=预定义值”,其中预定义值的范围是可枚举范围;对所述可枚举范围中的每个预定义值,预先产生该预定义值的n位二进制串,其中该二进制串的第n位对应所述表的该列的第n行,当相应列取值为预定义值时,该二进制串中对应的位是1,否则是0。如果二进制串的位数大于n,不与预定义值对应的位的取值可用于作为其他操作的设置。如果该表更新为m(m为正整数)行时,相应的,每个预定义值的二进制串至少也要有m位。例如,有如下数据库表(表2.1),表名为“table”,共有6行数据。表2.1序号姓名年龄城市婚姻状况职业薪水1张三30北京已婚教师120002李丽25上海未婚教师90003李四36广州已婚it150004马六35上海已婚it150005王五28广州未婚教师110006陈红22北京未婚it11000选取列名“城市”、“婚姻状况”和“职业”作为预定义值,其范围是可枚举范围。对于表2.1的示例性例子,列名“城市”的可枚举值范围是{北京、上海、广州};列名“婚姻状况”的可枚举取值范围是{未婚、已婚};列名“职业”的可枚举取值范围是{教师、it}。对上述可枚举范围中每个具体数值定义如下二进制串(表2.2、表2.3和表2.4)。其中,在表2.2中,用“1”表示“已婚”,“0”表示未婚,则根据表2.1中的“婚姻状况”列可知,该列的第一行为“已婚”,对应的二进制串的第一位为“1”,该列的第三行和第四行为“已婚”,对应的二进制串的第三位和第四位为“1”,该列的其他行为“未婚”,对应的二进制串的位均为“0”。以此类推,得到其他可枚举的预定义值的二进制串。表2.2婚姻状况/位123456已婚101100未婚010011表2.3城市/位123456北京100001上海010100广州001010表2.4职业/位123456it001101教师110010例如,有用户提交的查询命令为:select姓名,年龄,薪水fromtablewhere省份=‘北京’and婚姻状况=‘已婚’and职业=‘教师’。解析该查询命令以提取select列部分、from表部分和where条件表达式部分。select列部分为列名为{姓名,年龄,薪水}。from表部分为table(表2.1)。where条件表达式部分为“省份=‘北京’and婚姻状况=‘已婚’and职业=‘教师’”。以及条件表达式之间的逻辑关系为“与逻辑关系”(and)。其中,所述预设的条件表达式的二进制串可存储于缓存模块204中,所述缓存模块204可采用redis(redis是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api)来构建。此模块可以进一步提高访问时效,并对大数据的处理有较高的兼容性。替换模块203用于将每个所述条件表达式替换成预设的该条件表达式对应的预定义值的二进制串,将所述二进制串按照所述逻辑关系进行逻辑运算得到运算结果。此模块用于将原条件表达式替换为二进制串,并计算结果,提高查询效率。表2.5城市:北京100001婚姻状况:已婚101100职业:教师110010逻辑运算结果100000根据表2.2-2.4替换条件表达式“省份=‘北京’and婚姻状况=‘已婚’and职业=‘教师’”并将三个条件表达式的二进制串进行与逻辑运算得到表2.5。查询模块203用于遍历所述结果的每一位,对每个位的值符合预定义值的位,获取所述表的预定义值对应的数据并组合后返回。此模块用于获取对应数据返回查询结果,提高查询时效。根据上述实施例,遍历所述结果二进制串“100000”的每一位,对每个值为1的位,分别获取表2.1中“城市”“婚姻状况”“教师”对应的二进制串的第一位均为1的数据,获取到的数据内容如表2.6。根据查询命令的列名组合后返回的数据如表2.7。表2.6序号姓名年龄城市婚姻状况职业薪水1张三30北京已婚教师12000表2.7姓名年龄薪水张三3012000图3示出了可以应用本发明实施例的一种在给定数据库表上的受限sql查询的处理方法或装置的示例性系统架构300。如图3所示,系统架构300可以包括终端设备301、302、303,网络304和服务器305。网络304用以在终端设备301、302、303和服务器305之间提供通信链路的介质。网络304可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。用户可以使用终端设备301、302、303通过网络304与服务器305交互,以接收或发送消息等。终端设备301、302、303上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。终端设备301、302、303可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。服务器305可以是提供各种服务的服务器,例如对用户利用终端设备301、302、303所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。需要说明的是,本发明实施例所提供的一种基于结构化查询语言的查询数据库的方法一般由服务器305执行,相应地,一种基于结构化查询语言的查询数据库的装置一般设置于服务器305中。应该理解,图3中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。图4所示为适于用来实现本发明实施例的终端设备的计算机系统400的结构示意图。图4所示的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图4所示,计算机系统400包括中央处理单元(cpu)401,其可以根据存储在只读存储器(rom)402中的程序或者从存储部分408加载到随机访问存储器(ram)403中的程序而执行各种适当的动作和处理。在ram403中,还存储有系统400操作所需的各种程序和数据。cpu401、rom402以及ram403通过总线404彼此相连。输入/输出(i/o)接口405也连接至总线404。以下部件连接至i/o接口405:包括键盘、鼠标等的输入部分406;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分407;包括硬盘等的存储部分408;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分409。通信部分409经由诸如因特网的网络执行通信处理。驱动器410也根据需要连接至i/o接口405。可拆卸介质411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器410上,以便于从其上读出的计算机程序根据需要被安装入存储部分408。特别地,根据本发明公开的实施例,上文示意图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行步骤示意图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分409从网络上被下载和安装,和/或从可拆卸介质411被安装。在该计算机程序被中央处理单元(cpu)401执行时,执行本发明的系统中限定的上述功能。需要说明的是,本发明所示的计算机可读介质包括计算机可读信号介质或计算机可读存储介质,或者是上述两者的任意组合。计算机可读存储介质包括但不限于电、磁、光、电磁、红外线、半导体的系统、装置或器件,或者上述内容的任意组合。计算机可读存储介质具体包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述内容的任意组合。在本发明中,计算机可读存储介质包括任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用;计算机可读的信号介质包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码,这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述信号的任意组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等,或者上述介质的任意组合。附图中的流程图或框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以并行地执行,有时也可以按相反的顺序执行,其执行顺序依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框以及其组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。描述于本发明实施例中所涉及到的“模块”可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的“模块”也可以设置在处理器中,例如,可以描述为:一种处理器包括解析模块、替换模块和查询模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,解析模块还可以被描述为“用于解析用户提交的查询命令的模块”。另一方面,本发明实施例还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:解析用户提交的查询命令,其中所述查询命令中包括:条件表达式以及所述条件表达式之间的逻辑关系,所述逻辑关系包括“与逻辑关系”和/或“或逻辑关系”;将每个所述条件表达式替换成预设的该条件表达式对应的预定义值的二进制串,将所述二进制串按照所述逻辑关系进行逻辑运算得到运算结果;遍历所述结果的每一位,对每个位的值符合预定义值的位,获取所述表的预定义值对应的数据并组合后返回。根据本发明实施例的技术方案,能够在有限范围内提高数据库查询访问速度,缩短响应时间,改善用户体验。上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1