数据处理方法及装置、数据缓存方法、存储介质、系统
技术领域
本申请涉及数据库缓存领域,具体而言,涉及一种数据处理方法及装置、数据缓存方法、存储介质、系统。
背景技术
现有技术中,SQL语句输入到MySQL服务器后,一般要经过以下执行过程:词法语法解析(parse),优化(optimize),生成执行计划(plan)和执行(execute)的过程。这个过程的主要输出是语句的执行计划(plan),当语句比较复杂时,该过程消耗的时间会比较长,并且当需要执行的SQL语句大量重复出现时,会使生成执行计划(plan)的过程消耗更多的时间,从而导致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语句的执行效率低的技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1示出了一种用于实现数据处理方法的计算机终端(或移动设备)的硬件结构框图;
图2是根据本申请实施例的一种数据处理方法的流程图;
图3是根据本申请实施例的一种查找SQL访问语句对应的配置信息的方法的流程图;
图4是根据本申请实施例的一种确定SQL语句对应的缓存分区的方法的流程图;
图5是根据本申请实施例的一种数据缓存方法的流程图;
图6是根据本申请实施例的一种数据处理装置的结构图;
图7是根据本申请实施例的一种系统的结构图;
图8是根据本申请实施例的一种计算机终端的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
SQL语句:结构化查询语言(Structured Query Language,SQL),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
MySQL:一种关系型数据库管理系统,关系型数据库管理系统将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
Plan:执行计划,数据库执行器实际执行SQL语句的逻辑操作的集合。
实施例1
根据本申请实施例,还提供了一种数据处理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1示出了一种用于实现数据处理方法的计算机终端(或移动设备)的硬件结构框图。如图1所示,计算机终端10(或移动设备10)可以包括一个或多个(图中采用102a、102b,……,102n来示出)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器102和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端10(或移动设备)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器104可用于存储应用软件的软件程序以及模块,如本申请实施例中的数据处理方法对应的程序指令/数据存储装置,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的漏洞检测方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端10(或移动设备)的用户界面进行交互。
在上述运行环境下,本申请提供了如图2所示的数据处理方法。图2是根据本申请实施例的一种数据处理方法的流程图,如图2所示,该方法包括以下步骤:
步骤S202,接收SQL访问语句。
在本申请的一些可选的实施例中,通过图形用户界面接收至少一条SQL访问语句。
步骤S204,从预设缓存中查找与SQL访问语句对应的配置信息,其中,配置信息为从历史记录的执行计划中提取的,该执行计划用于指示数据库中执行的逻辑操作的集合。
在本申请的一些可选的实施例中,步骤S204可以通过以下方法实现:确定SQL语句对应的缓存分区,其中,该缓存分区为对预设缓存进行分区处理之后得到的分区;从缓存分区中读取执行计划配置信息。图3是根据本申请实施例的一种查找SQL访问语句对应的配置信息的方法的流程图,如图3所示,该方法包括以下步骤:
步骤S302,确定SQL语句对应的缓存分区,其中,该缓存分区为对预设缓存进行分区处理之后得到的分区。
在本申请的一些可选的实施例中,SQL语句输入到MySQL服务器后,一般要经过以下执行过程:词法语法解析(parse),优化(optimize),生成执行计划(plan)和执行(execute)的过程,这个过程的主要输出是语句的执行计划(plan),当语句比较复杂时,该过程消耗的时间会比较长,并且当需要执行的SQL语句大量重复出现时,会使生成执行计划(plan)的过程消耗更多的时间,因此在SQL语句执行时会将该SQL语句的执行计划缓存(plan cache),当相似的语句再次被执行时,可以使用已经缓存的执行计划,直接跳过生成执行计划阶段,可以提高SQL语句的执行速度。其中,SQL语句的执行计划存储在预设缓存上。
根据本申请的一个可选的实施例,提供了以下三种数据结构对预设缓存进行管理:
Excute_plan_cache_manager,对整个预设缓存进行管理,负责提供接口供服务器调用。Excute_plan_cache_manager是一个组件,负责初始化整个预设缓存,也会监控预设缓存的全局信息,比如总共有多少条执行计划进行了缓存,预设缓存中存储的执行计划被输入到MySQL服务器中的SQL语句选中的命中率等信息。
Excute_plan_cache_partition,对预设缓存进行分区处理,为了减少“锁”对整个缓存的增删改操作引发性能方面的影响,将预设缓存划分为多个缓存分区,不同SQL语句的执行计划被分别存储在多个缓存分区中,对存储SQL语句的执行计划的缓存分区上“锁”,“锁”是用来控制并发查询的一种机制,通常是利用操作系统的互斥锁来实现。由于关系型数据库(Relational Database Service,RDS)执行计划缓存目前只支持SELECT查询语句,以后可能会支持所有数据操作语句(Data Manipulation Language,简称DML)。也就是说,只有符合一定条件的SQL语句的配置信息才能被存入预设缓存。
根据本申请的一个可选的实施例,满足以下条件的SQL语句的配置信息能被缓存:1.SELECT query 2.Wi th only one table 3.No Explain 4.No Union 5.No subquery6.No view or derived table 7.No NO_PLAN_CACHE hint 8.Not a const plan 9.Querydoesn’t belong to function/procedure 10.Plan cache are not full。
Excute_plan_cache:用来存储SQL语句执行计划所需的所有信息。
图4是根据本申请实施例的一种确定SQL语句对应的缓存分区的方法的流程图,如图4所示,该方法包括以下步骤:
步骤S402,将SQL访问语句进行格式化处理,得到目标SQL访问语句。
步骤S404,对目标SQL访问语句进行哈希计算,得到哈希值。
根据本申请的一个可选的实施例,执行步骤S404时对目标SQL语句进行哈希计算,得到哈希值。哈希算法是一种散列函数,是一种从任意文件中创造小的数字的方法。把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值,这种转换是一种压缩映射。
步骤S406,依据哈希值和预设缓存中缓存分区的数量确定SQL语句对应的缓存分区。
在本申请的一些可选的实施例中,步骤S406通过以下方法实现:将哈希值和数量进行取余运算,得到余数值;依据余数值确定SQL语句对应的缓存分区。
在对SQL语句中的执行计划进行缓存的时候,通过sql_digest语句将SQL语句格式化,将SQL语句中的常量替换为“?”之后输出,比如SQL语句select*from t1 where a=1经过sql_digest语句格式化处理,并去掉所有的空格,输出新的SQL语句:select*from t1where a=?,然后利用哈希算法对经过sql_digest语句处理得到的新的SQL语句的字符串进行计算,得到这个字符串的哈希值。然后根据哈希值对预设缓存中缓存分区的个数取余计算,确定该SQL语句的执行计划存储的缓存分区的位置。
当一条新的SQL语句输入之后,执行步骤S402,同样通过sql_digest语句将SQL语句格式化,将SQL语句中的常量替换为“?”之后输出,比如SQL语句select*from t1 where a=1经过sql_digest语句格式化处理,并去掉所有的空格,输出新的SQL语句:select*fromt1 where a=?,得到的新的SQL语句即目标SQL访问语句。然后利用哈希算法对目标SQL语句的字符串进行计算,得到目标SQL语句的哈希值。利用目标SQL语句的哈希值和预设缓存中缓存分区的个数取余计算,可以定位到一个缓存分区的位置信息,该缓存分区即为该条新输入的SQL语句对应的缓存分区,该缓存分区中存储的执行计划就是该条新输入的SQL语句查询的执行计划。
步骤S304,从缓存分区中读取配置信息。
在本申请的一些可选的实施例中,步骤S304通过以下方法实现:从缓存分区中查找与哈希值对应的配置信息。
根据本申请的一个可选的实施例,从缓存分区中查找与哈希值对应的配置信息,包括:在缓存分区中存在多个相同的哈希值时,比较具有相同的哈希值的查询语句的目标语句,其中,该目标语句为对查询语句进行格式化处理后得到的语句;将与目标SQL语句相同的目标语句所对应的配置信息作为与SQL访问语句对应的配置信息。
在确定SQL语句对应的缓存分区之后,从缓存分区中查找与该SQL语句对应的目标语句的哈希值对应的配置信息。在查找过程中,为防止哈希计算冲突,在多个哈希值相同的情况下,比较多个SQL语句对应的sql_digest语句(即比较多个SQL语句对应的目标SQL语句是否相同),进一步确认哈希值相同的多个目标SQL语句是否为相同的目标SQL语句,如果哈希值相同的多个目标SQL语句是相同的,则确定为同一条查询,确定上述多个相同的哈希值对应的配置信息为上述SQL语句对应的配置信息。
根据本申请的一个可选的实施例,预设缓存满足以下条件:对预设缓存的写操作执行排他锁操作;对预设缓存的读操作执行共享锁操作。
排他锁也称作写锁,一个锁在某一时刻只能被一个线程占有,其他线程必须等待锁被释放之后才可能获取到锁。若事物T对数据对象A加上排他锁,事物T可以读A也可以修改A,其他事物不能再对A加任何锁,直到T释放A上的排他锁。这保证了其他事物在T释放A上的排他锁之前不能再读取和修改A。
共享锁也称作读锁,就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有。若事物T对数据对象A加上共享锁,事物T可以读A但不能修改A,其他事物只能对A加任共享锁,而不能加排他锁,直到T释放A上的共享锁。这保证了其他事物可以读A,但在T释放A上的共享锁之前不能对A做任何修改。
在本申请的一些可选的实施例中,步骤S204还可以通过以下方法实现:确定SQL语句的访问类型;从预设缓存中查找与访问类型对应的配置信息,其中,在访问类型为索引扫描时,配置信息包括:索引信息;在访问类型为分区扫描时,配置信息包括:分区扫描使用的索引信息,以及分区信息;在访问类型为全数据表扫描时配置信息包括:访问类型。
在本申请的一些可选的实施例中,关系型数据库(RDS)执行计划缓存目前只支持SELECT查询语句,以后可能会支持所有数据操作语句(Data Manipulation Language,简称DML)。也就是说,只有符合一定条件的SQL语句的执行计划才能被存入预设缓存。满足以下条件的SQL语句的执行计划能被缓存:1.SELECT query 2.With only one table 3.NoExplain 4.No Union 5.No subquery 6.No view or derived table 7.No NO_PLAN_CACHE hint 8.Not a const plan 9.Query doesn’t belong to function/procedure10.Plan cache are not full。因此在从从预设缓存中查找SQL访问语句对应的执行计划配置信息之前首先需要确定SQL语句的类型,以确定该待查询的SQL语句是否符合执行条件配置信息能够被缓存的条件,从而判断预设缓存中是否存储有该SQL语句需要查询的配置信息。
在确定SQL语句的访问类型之后,从预设缓存中查找与访问类型对应的配置信息,其中,访问类型如果是索引(index)扫描,配置信息为索引信息,具体为那个索引,索引长度等信息;访问类型如果是分区(range)扫描,配置信息包括分区扫描使用的索引信息,以及每个分区的信息;访问类型如果为全表扫描,配置信息只包括访问类型。
根据本申请的一个可选的实施例,SQL访问语句访问的数据表有多个;配置信息包括:每个数据表的访问类型;数据表之间的连接顺序;数据表之间的连接类型;数据表连接所使用的算法。
当SQL访问语句访问的数据表有多个时,配置信息包括每个数据表的访问类型,多个数据表之间的连接顺序,多个数据表之间连接的类型,其中连接类型包括INNERJOIN,OUTER JOIN,SEMI JOIN;数据表连接所使用的算法,当前支持NestLoop,Block Nest-Loop(BNL),Batched key access(BKA)。
步骤S206,依据配置信息生成与SQL访问语句对应的执行计划,执行与SQL访问语句对应的执行计划。SQL语句按照选定的执行计划执行。
现有技术中,将SQL语句的执行计划缓存,当相似的语句再次被执行时,可以使用已缓存执行计划,从而跳过SQL语句的执行计划的生成步骤,提高了语句的执行速度。但在选择缓存的执行计划时,对于单表存在多个索引的情况,优化器在选择执行计划的时候会对每条路径进行比较,从而选择一个代价最小的作为最有执行计划,这个过程会带来较大的性能开销。
通过上述步骤,通过将预设缓存分区,然后利用哈希算法计算格式化后的SQL语句的哈希值,利用得到的哈希值和缓存分区的个数进行取余计算,根据计算结果为SQL语句的执行计划分配缓存分区,将执行计划存储在分配的缓存分区中。通过上述方法存储SQL语句的执行缓存,当相似的语句再次被执行时,在为SQL语句寻找执行计划时,采用相同的算法确定执行计划所在的缓存分区,即可以让优化器一次选中最终的执行计划,降低了性能开销,进一步提高了SQL语句的执行性能。
实施例2
图5是根据本申请实施例的一种数据缓存方法的流程图,如图5所示,该方法包括以下步骤:
步骤S502,对预设缓存进行分区处理,得到缓存分区。
根据本申请的一个可选的实施例,通过组件Excute_plan_cache_partition对预设缓存进行分区处理,之所以对预设缓存进行分区是为了减少“锁”对整个预设缓存的增删改操作引发性能性能方面的影响,将预设缓存划分为多个缓存分区,不同SQL语句的执行计划被分别存储在多个缓存分区中,对存储SQL语句的执行计划的缓存分区上“锁”,“锁”是用来控制并发查询的一种机制,通常是利用操作系统的互斥锁来实现。
步骤S504,对SQL访问语句进行格式化,得到目标SQL访问语句。
在本申请的一些可选的实施例中,在对SQL语句中的执行计划进行缓存的时候,通过sql_digest语句将SQL语句格式化,将SQL语句中的常量替换为“?”之后输出,比如SQL语句select*from t1where a=1经过sql_digest语句格式化处理,并去掉所有的空格,输出新的SQL语句:select*from t1where a=?,输出的新的SQL语句即为目标SQL语句。
步骤S506,获取目标SQL访问语句的哈希值,并基于哈希值和预设缓存中缓存分区的数量确定缓存分区的访问标识;并建立访问标识和缓存分区的映射关系。
根据本申请的一个可选的实施例,步骤S506可以通过以下方法实现:将哈希值和数量进行取余运算,得到余数值,并将余数值作为访问标识。
然后利用哈希算法对经过sql_digest语句处理得到的新的SQL语句的字符串进行计算,得到这个字符串的哈希值。然后根据计算得到的哈希值对预设缓存中缓存分区的数量取余计算,得到余数值作为访问标识,建立该访问标识与缓存分区的映射关系,访问标识用于表征缓存分区的位置信息。
通过上述步骤完成了SQL语句对应的的配置信息的缓存,相对于现有技术通过将预设缓存分区,然后利用哈希算法计算格式化后的SQL语句的哈希值,利用得到的哈希值和缓存分区的个数进行取余计算,根据计算结果为SQL语句的配置信息分配缓存分区,将配置信息存储在分配的缓存分区中。通过上述方法存储SQL语句对应的的配置信息,当相似的语句再次被执行时,在为SQL语句寻找配置信息时,采用相同的算法确定配置信息所在的缓存分区,即可以让优化器一次选中最终的执行计划,在现有的技术基础上,降低了性能开销,进一步提高了SQL语句的执行性能。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
实施例3
根据本申请实施例,还提供了一种用于实施上述数据处理方法的数据处理装置,图6是根据本申请实施例的一种数据处理装置的结构图,如图6所示,该装置包括:
接收模块60,用于接收SQL访问语句。
查找模块62,用于从预设缓存中查找与SQL访问语句对应的配置信息,其中,配置信息为从历史记录的执行计划中提取的,该执行计划用于指示数据库中执行的逻辑操作的集合。
执行模块64,用于依据配置信息生成与SQL访问语句对应的执行计划,执行与SQL访问语句对应的执行计划。
此处需要说明的是,上述接收模块60、查找模块62和执行模块64对应于实施例1中的步骤S202至步骤S206,三个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例1所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例1提供的计算机终端10中。
此外,仍需要说明的是,本实施例的可选或优选实施方式可以参见实施例1中的相关描述,此处不再赘述。
实施例4
根据本申请实施例,还提供了一种系统的实施例,该系统可执行实施例1中的任意一种可选或优选的数据处理方法,图7是根据本申请实施例的一种系统的结构图,如图7所示,该系统包括:
处理器70;以及存储器72,与处理器70连接,用于为处理器70提供处理以下处理步骤的指令:接收SQL访问语句;从预设缓存中查找与SQL访问语句对应的配置信息,其中,配置信息为从历史记录的执行计划中提取的,该执行计划用于指示数据库中执行的逻辑操作的集合;依据配置信息生成与SQL访问语句对应的执行计划,执行与SQL访问语句对应的执行计划。
此外,仍需要说明的是,本实施例的可选或优选实施方式可以参见实施例1中的相关描述,此处不再赘述。
实施例5
本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行应用程序的漏洞检测方法中以下步骤的程序代码:接收SQL访问语句;从预设缓存中查找与SQL访问语句对应的配置信息,其中,配置信息为从历史记录的执行计划中提取的,该执行计划用于指示数据库中执行的逻辑操作的集合;依据配置信息生成与SQL访问语句对应的执行计划,执行与SQL访问语句对应的执行计划。
可选地,图8是根据本申请实施例的一种计算机终端的结构框图。如图8所示,该计算机终端A可以包括:一个或多个(图中仅示出一个)处理器80、存储器82、以及外设接口84。
其中,存储器82可用于存储软件程序以及模块,如本申请实施例中的安全漏洞检测方法和装置对应的程序指令/模块,处理器80通过运行存储在存储器82内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的系统漏洞攻击的检测方法。存储器82可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器82可进一步包括相对于处理器80远程设置的存储器82,这些远程存储器82可以通过网络连接至终端A。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器80可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:接收SQL访问语句;从预设缓存中查找与SQL访问语句对应的配置信息,其中,配置信息为从历史记录的执行计划中提取的,该执行计划用于指示数据库中执行的逻辑操作的集合;依据配置信息生成与SQL访问语句对应的执行计划,执行与SQL访问语句对应的执行计划。
可选的,上述处理器还可以执行如下步骤的程序代码:确定SQL语句对应的缓存分区,其中,该缓存分区为对预设缓存进行分区处理之后得到的分区;从缓存分区中读取配置信息。
可选的,上述处理器还可以执行如下步骤的程序代码:将SQL访问语句进行格式化处理,得到目标SQL访问语句;对目标SQL访问语句进行哈希计算,得到哈希值;依据哈希值和预设缓存中缓存分区的数量确定SQL语句对应的缓存分区。
可选的,上述处理器还可以执行如下步骤的程序代码:将哈希值和数量进行取余运算,得到余数值;依据余数值确定SQL语句对应的缓存分区。
可选的,上述处理器还可以执行如下步骤的程序代码:从缓存分区中查找与哈希值对应的配置信息。
可选的,上述处理器还可以执行如下步骤的程序代码:在缓存分区中存在多个相同的哈希值时,比较具有相同的哈希值的查询语句的目标语句,其中,该目标语句为对查询语句进行格式化处理后得到的语句;将与目标SQL语句相同的目标语句所对应的配置信息作为与SQL访问语句对应的配置信息。
可选的,上述处理器还可以执行如下步骤的程序代码:确定SQL语句的访问类型;从预设缓存中查找与访问类型对应的配置信息,其中,在访问类型为索引扫描时,配置信息包括:索引信息;在访问类型为分区扫描时,配置信息包括:分区扫描使用的索引信息,以及分区信息;在访问类型为全数据表扫描时,配置信息包括:访问类型。
采用本申请实施例,提供了一种数据处理的方案。通过将预设缓存分区,然后利用哈希算法计算格式化后的SQL语句的哈希值,利用得到的哈希值和缓存分区的个数进行取余计算,根据计算结果为SQL语句的执行计划分配缓存分区,将执行计划存储在分配的缓存分区中,从而达到了当相似的SQL语句再次被执行时,在为SQL语句寻找执行计划时,采用相同的算法确定执行计划所在的缓存分区,即可以让优化器一次选中最终的执行计划的目的,进而解决了由于查找SQL语句对应的执行计划的过程耗费内存开销较大造成的SQL语句的执行效率低的技术问题。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例6
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例1所提供的数据处理方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:接收SQL访问语句;从预设缓存中查找与SQL访问语句对应的配置信息,其中,配置信息为从历史记录的执行计划中提取的,该执行计划用于指示数据库中执行的逻辑操作的集合;依据配置信息生成与SQL访问语句对应的执行计划,执行与SQL访问语句对应的执行计划。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:确定SQL语句对应的缓存分区,其中,该缓存分区为对预设缓存进行分区处理之后得到的分区;从缓存分区中读取配置信息。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:将SQL访问语句进行格式化处理,得到目标SQL访问语句;对目标SQL访问语句进行哈希计算,得到哈希值;依据哈希值和预设缓存中缓存分区的数量确定SQL语句对应的缓存分区。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:将哈希值和数量进行取余运算,得到余数值;依据余数值确定SQL语句对应的缓存分区。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:从缓存分区中查找与哈希值对应的配置信息。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:在缓存分区中存在多个相同的哈希值时,比较具有相同的哈希值的查询语句的目标语句,其中,该目标语句为对查询语句进行格式化处理后得到的语句;将与目标SQL语句相同的目标语句所对应的配置信息作为与SQL访问语句对应的配置信息。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:确定SQL语句的访问类型;从预设缓存中查找与访问类型对应的配置信息,其中,在访问类型为索引扫描时,配置信息包括:索引信息;在访问类型为分区扫描时,配置信息包括:分区扫描使用的索引信息,以及分区信息;在访问类型为全数据表扫描时,配置信息包括:访问类型。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。