数据查询方法及系统和数据读取方法及系统的制作方法

文档序号:9750900阅读:610来源:国知局
数据查询方法及系统和数据读取方法及系统的制作方法
【技术领域】
[0001]本发明涉及通信领域,更为具体而言,涉及数据查询方法及系统和数据读取方法及系统。
【背景技术】
[0002]数据缓存是一种将数据库中的数据缓存到内存中的技术。目的是减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能。数据缓存作为数据库和应用层之间的数据访问中间件,提供了较强的数据访问性能,在各类大型应用中有着广泛的应用。
[0003]目前常用的数据库访问框架已有部分包含数据缓存组件,它们对整表缓存提供了很好的支持,但对细化到SQL(Structured Query Language,结构化查询语言)语句层面的缓存没有提供支持,或者支持地不够灵活,从而导致应用程序难以直接在SQL语句以及参数层面上在缓存中进行查询操作。
[0004]此外,目前常用的数据库访问框架对于进程级的数据缓存支持不够完善,需要第三方插件来完成,然而第三方插件通常因并发访问问题而导致应用层可能读取到脏数据。对于金融业务系统而言,特别是涉及大量账务处理的银行系统而言,脏数据将对系统的正常运行带来严重后果。

【发明内容】

[0005]为解决上述技术问题,本发明提供一种数据查询方法及系统以及一种数据读取方法及系统。
[0006]—方面,本发明的实施方式提供了一种数据查询方法,所述方法包括:
[0007]根据当前用于查询操作的结构化查询语言SQL语句以及参数集计算出标识符;
[0008]将计算出的标识符与缓存的索引值进行匹配以查询所述缓存中是否存有与所述SQL语句以及参数集对应的查询结果。
[0009]相应地,本发明实施方式提供了一种数据查询系统,所述系统包括:
[0010]计算模块,用于根据当前用于查询操作的SQL语句以及参数集计算出标识符;
[0011]缓存查询模块,用于将所述计算模块计算出的标识符与缓存的索引值进行匹配以查询所述缓存中是否存有与所述SQL语句以及参数集对应的查询结果。
[0012]实施本发明提供的数据查询方法及系统,可以通过基于SQL语句以及参数集计算出的标识符直接在SQL语句以及参数层面上在缓存中进行查询操作。
[0013]另一方面,本发明的实施方式提供了一种数据读取方法,所述方法包括:
[0014]判断当前用于查询操作的SQL语句的查询结果集是否适合存储在缓存中;
[0015]若判定为所述SQL语句的查询结果集不适合存储在缓存中,则查询数据库中是否存有与所述SQL语句以及当前用于查询操作的参数集对应的查询结果;
[0016]若所述数据库中存有所述查询结果,则从所述数据库中读取所述查询结果。
[0017]相应地,本发明实施方式提供了一种数据读取系统,所述系统包括:
[0018]第一判断模块,用于判断当前用于查询操作的SQL语句的查询结果集是否适合存储在缓存中;
[0019]数据库查询模块,用于在所述第一判断模块判定为所述SQL语句的查询结果集不适合存储在缓存中的情形下,查询数据库中是否存有与所述SQL语句以及当前用于查询操作的参数集对应的查询结果;
[0020]数据库读取模块,用于在所述数据库查询模块查询出所述数据库中存有所述查询结果的情形下,从所述数据库中读取所述查询结果。
[0021]实施本发明提供的数据读取方法及系统,在进行查询操作前先判断当前用于查询操作的SQL语句的查询结果集是否适合存储在缓存中,对于其查询结果集不适合存储在缓存中的SQL语句改为从数据库中读取查询结果,从而有效地防止从缓存中读取到脏数据。
【附图说明】
[0022]图1是根据本发明实施方式的一种数据查询方法的流程图;
[0023]图2不出了图1所不的处理SI的一种实施方式;
[0024]图3是根据本发明实施方式的另一种数据查询方法的流程图;
[0025]图4是根据本发明实施方式的一种数据查询系统的结构示意图;
[0026]图5示出了图4所示的计算模块I的结构示意图;
[0027]图6是根据本发明实施方式的一种数据读取方法的流程图;
[0028]图7是根据本发明实施方式的一种数据读取系统的结构示意图。
【具体实施方式】
[0029]为使本发明的实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
[0030]图1是根据本发明实施方式的一种数据查询方法的流程图。参见图1,所述方法包括:
[0031]S1:根据当前用于查询操作的SQL语句以及参数集计算出标识符。
[0032]S2:将计算出的标识符与缓存的索引值进行匹配以查询所述缓存中是否存有与所述SQL语句以及参数集对应的查询结果。
[0033]在本发明的实施方式中,所述缓存有存储的查询结果可以设置有有效期(是应用层根据业务需要进行设定的)。
[0034]如图2所示,处理SI具体可以通过以下方式实现:
[0035]Sll:将所述SQL语句以及参数集按照预定顺序进行拼装以得到拼装结果串。
[0036]在本发明的实施方式中,可以将参数集中的各参数按照由尾到首的顺序进行拼装。例如,SQL语句为select*from bc_branch where branchid = ?and subbranchid = ?,参数集为{ “440000000” , “440201000” },则拼装结果串为select*from bc_branch wherebranchid = ?and subbranchid = ? | 440201000 | 440000000。
[0037]S12:计算拼装出的拼装结果串的哈希码,以计算出的哈希码作为所述标识符。
[0038]本发明的实施方式采用各参数按照由尾到首的顺序进行拼装的方式,一方面提高了定位结果集的速度,另一方面降低了各索引值的HashCode(哈希码)冲突概率。开发人员在编写SQL语句的where(条件)子句时习惯把常用条件放在前边,导致将各参数按照由首到尾的方式拼接时前部分基本相同,从而使得HashCode的冲突概率比较高,为此,本发明的实施方式将各参数按照由尾到首的顺序进行拼装。
[0039]在本发明的实施方式中,若处理S2的结果为所述缓存中存有所述查询结果,则从所述缓存中读取所述查询结果并调整所述查询结果在所述缓存中的访问次数,例如将所述访问次数加I;若处理S2的结果为所述缓存中未存有所述查询结果,则查询数据库中是否存有所述查询结果,若所述数据库中存有所述查询结果,则从所述数据库中读取所述查询结果并将所述查询结果存储到所述缓存中。
[0040]在本发明的实施方式中,在执行处理SI前,可以判断所述SQL语句的查询结果集是否适合存储在所述缓存中,若判定为所述SQL语句的查询结果集适合存储在所述缓存中,则执行所述处理SI,若判定为所述SQL语句的结果集不适合存储在所述缓存中,则查询所述数据库中是否存有所述查询结果。其中,可以从表维度和/或查询关键字维度判断所述SQL语句的查询结果集是否适合存储在所述缓存中。上述SQL语句的查询结果集包括了该SQL语句下的全部查询结果。
[0041 ]在本发明的实施方式中,上述缓存例如是在内存中建立一组缓存容器数组,数组中每个容器初始化一个缓存对象,每个缓存对象中可存储多个缓存单元,缓存单元是查询结果的基本存储单元,即每个缓存单元中存储一个SQL查询的查询结果。
[0042]为加速定位到查询结果所在的容器,在本发明的实施方式中对容器的寻址基于Hash(哈希)散列实现。具体地,首先将SQL语句及其参数集中的各个参数拼装成拼装结果串,计算出该拼装结果串的HashCode,然后对该HashCode取模,根据模值选择对应的容器。例如,已建立了 10个容器数组,SQL语句及其参数集的HashCode值为38191812,对HashCode取模38191812%10为2,则使用索引为2的容器。如果通过上述散列算法定位到的容器中存储有需要的查询结果,则直接读取该查询结果并将读取到的查询结果返回给应用程序,否贝1J,从数据库中读取该查询结果并将读取到的查询结果返回给应用程序,同时将读取到的查询结果存储到相应的缓存单元中。
[0043]图3是根据本发明实施方式的另一种数据查询方法的流程图。如图3所示,所述方法包括:
[0044]S10:判断当前用于查询操作的SQL语句的查询结果集是否适合存储在缓存中,若是,则执行S20,若否,则跳转到S180。
[0045]例如,可以从表维度和/或查询关键字维度进行上述判断。具体地,解析SQL语句中的表名和where子句中的各个字段,识别解析出的表名是否在禁用表配置参数
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1