一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据库查询方法、装置和系统与流程

2021-10-24 04:12:00 来源:中国专利 TAG:
1.本发明涉及redis实时缓存系统
技术领域
:,特别是涉及一种数据库查询方法、装置和系统。
背景技术
::2.随着互联网的快速普及,数据规模和用户数量快速增加,用户对时延的要求也越来越高。传统的关系型数据库所面临的压力越来越大,需要进一步提高mysql等关系型数据库的读写能力、降低时延。由于redis只能存储key‑value型数据,因此每次查询都需要给出key值来获取单条数据,导致其无法像关系型数据库那样快速进行索引查询。而通常多数查询都是带有条件的索引查询,如果这些查询只能通过数据库处理,需要在使用mysql和redis之间进行切换,那么依然会有较大延迟。技术实现要素:3.基于此,有必要针对mysql和redis之间进行切换导致系统具有较大延迟的问题,提供一种数据库查询方法和数据库查询系统。4.一种数据库查询方法,包括获取目标数据库的修改日志,所述修改日志包括当所述目标数据库中的数据发生修改时生成的数据信息;解析所述修改日志,对所述修改日志解析后的数据进行筛选,得到需要在本地缓存数据库进行缓存的数据更新信息;将所述数据更新信息发送至缓存消息队列;依次从所述缓存消息队列中读取数据更新信息,根据读取的数据更新信息对本地缓存数据库中的缓存数据和索引数据进行更新;接收目标数据库的查询语句,基于所述查询语句对所述本地缓存数据库中的索引数据和缓存数据进行查询,获得查询结果。5.在其中一个实施例中,所述缓存数据为key‑value型数据,其中,所述缓存数据为key‑value型数据,其中,key值包括数据库名、表名、主键字段,value值包括所述索引数据的json值或hash值。6.在其中一个实施例中,所述接收目标数据库的查询语句,基于所述查询语句对所述本地缓存数据库中的索引数据和缓存数据进行查询,获得查询结果包括接收目标数据库的查询语句,对所述查询语句进行解析,获取查询条件;根据所述查询条件生成执行语句;根据所述执行语句,对所述本地缓存数据库中的索引数据和缓存数据进行查询,获得查询结果。7.在其中一个实施例中,所述数据更新信息包括缓存更新信息和索引更新字段,所述根据读取的数据更新信息对本地缓存数据库中的缓存数据和索引数据进行更新包括根据所述数据更新信息获取缓存更新信息和索引更新字段;根据所述缓存更新信息对本地缓存数据库中的缓存数据进行更新;根据所述索引更新字段对本地缓存数据库的索引数据进行更新。8.在其中一个实施例中,所述索引数据包括索引记录表,所述索引记录表用于记录各个索引方式所对应的索引表,根据所述索引更新字段对本地缓存数据库的索引数据进行更新包括在所述索引记录表中确定与所述索引更新字段相关联的索引表;根据所述索引更新字段对所述本地缓存数据库中所述相关联的索引表进行更新。9.在其中一个实施例中,在根据读取的数据更新信息对本地缓存数据库中的缓存数据和索引数据进行更新后,所述方法还包括获取对本地缓存数据库中的缓存数据和索引数据进行更新的更新结果;若所述更新结果为更新失败,则重新获取所述缓存消息队列中相对应的数据更新信息,并根据重新获取的数据更新信息对本地缓存数据库中的缓存数据和索引数据进行更新。10.在其中一个实施例中,所述索引方式包括全表索引、单一条件索引和复合条件索引,其中,所述单一条件索引包括等值条件索引、区间条件索引和模糊条件索引。11.一种数据库查询装置,包括更新获取模块,用于获取目标数据库的修改日志,所述修改日志包括当所述目标数据库中的数据发生修改时生成的数据信息;解析模块,与所述更新获取模块相连接,用于解析所述修改日志,对所述修改日志解析后的数据进行筛选,得到需要在本地缓存数据库进行缓存的数据更新信息,将所述数据更新信息发送至缓存消息队列;维护模块,用于依次从所述缓存消息队列中读取数据更新信息,根据读取的数据更新信息对本地缓存数据库中的缓存数据和索引数据进行更新;查询模块,与所述维护模块相连接,用于接收目标数据库的查询语句,基于所述查询语句对所述本地缓存数据库中的索引数据和缓存数据进行查询,获得查询结果。12.一种数据库查询系统,包括本地缓存数据库,用于存储缓存在本地的缓存数据和索引数据;以及所述数据库查询装置。13.在其中一个实施例中,所述查询模块包括解析器,用于接收目标数据库的查询语句,并对所述查询语句进行分析获取查询条件;生成器,与所述解析器相连接,用于根据所述查询条件生成执行语句;执行器,与所述生成器相连接,用于运行所述执行语句对所述本地缓存数据库中的索引数据和缓存数据进行查询,获得查询结果。14.一种计算机可读存储介质,当所述计算机可读存储介质中的指令由计算机的处理器执行时,使得所述计算机能够执行如上述任意一项实施例所述的数据库查询方法。15.一种计算机程序产品,所述计算机程序产品中包括指令,所述指令被计算机的处理器执行时,使得所述计算机能够执行如上述任意一项实施例所述的数据库查询方法。16.上述数据库查询方法,获取当目标数据库中的数据发生修改时,目标数据库根据数据修改情况生成的修改日志,对修改日志进行解析。对修改日志解析后的数据进行筛选以获取需要在本地缓存数据库中进行缓存的数据更新信息。将数据更新信息传输至缓存消息队列,从缓存消息列表中读取数据更新信息,并根据读取到的数据更新信息对本地缓存数据库中对应的缓存数据和索引数据进行更新。接收输入的查询语句,可以直接在本地缓存数据库中进行语句查询。通过本技术方案可以在确保例如redis实时的本地缓存系统数据最终一致性的情况下,在本地缓存系统的基础上增加数据和索引的维护功能以及直接对本地缓存系统进行查询的功能,获得支持sql索引查询的能力。直接在redis缓存中进行sql语句查询,不仅可以提高查询效率,同时可以不必在mysql和redis之间进行切换,在查询过程中不仅能起到对应用透明的效果,还可以提高实时缓存系统的查询效率。附图说明17.为了更清楚地说明本说明书实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。18.图1为本发明其中一实施例的数据库查询方法的方法流程示意图;19.图2为本发明其中一实施例的执行索引查询的方法流程示意图;20.图3为本发明其中一实施例的对本地缓存数据库中的缓存数据和索引数据进行更新的方法流程示意图;21.图4为本发明其中一实施例的对索引数据进行更新的方法流程示意图;22.图5为本发明其中一实施例的对更新结果进行确认的方法流程示意图;23.图6为本发明其中一实施例的数据库查询装置的结构框图;24.图7为本发明其中一实施例的数据库查询系统的结构框图25.图8是本发明其中一实施例的查询模块的结构框图;26.图9是本发明其中一实施例的数据库查询装置或系统的框图。具体实施方式27.为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的优选实施方式。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施方式。相反的,提供这些实施方式的目的是为了对本发明的公开内容理解得更加透彻全面。28.除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的
技术领域
:的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。29.目前用于提高mysql(structuredquerylanguage,一种关系型数据库)等关系型数据库的读写能力、降低时延的较好方法是采用redis(一种开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key‑value数据库)作为缓存数据库,并通过解析mysql的binlog日志(一种用于记录数据库数据变更的二进制日志)来为redis数据库实时同步数据。客户端的查询请求直接访问redis,这样不仅可以提升查询效率,还可以减轻对mysql的访问压力。然而,由于redis只能存储key‑value(键‑值)型数据,每次查询都需要给出key值来获取单条数据,因此导致其无法像关系型数据库那样快速进行索引查询。而通常多数查询都是带有条件的索引查询,如果这些查询只能通过数据库处理,那么依然会有较大延迟,同时应用还需要在使用mysql和redis之间进行切换。30.本公开提供的一种数据库查询方法可以使redis实时缓存系统获得支持sql索引查询的能力,直接在redis缓存中进行sql语句查询,不仅可以提高查询效率,而且还可以达到对应用透明的效果。图1为本发明其中一实施例的数据库查询方法的方法流程示意图,在其中一个实施例中,数据库查询方法包括如下步骤s100至s500。31.步骤s100:获取目标数据库的修改日志,修改日志包括当目标数据库中的数据发生修改时生成的数据信息。32.在本公开的一些实施例中,所述目标数据库通常包括用于存储数据的存储单元或数据结果,目标数据库可以为mysql数据库、postgresql(一种面向对象的关系数据库)、influxdb(一种开源的时间序列数据库)等数据库。所述修改日志通常可以用于记录数据库的修改信息,如修改的对象、修改后的数据等修改信息。在本实施例中,所述修改日志可以为binlog日志,所述的目标数据库可以为mysql数据库。mysql是一种关系型数据库,将数据保存在不同的表中,从而增加速度并提高灵活性。其中,binlog日志是用来记录mysql内部对数据库的改动情况的信息(只记录对数据的修改操作),主要用于数据库的主从复制以及增量恢复。33.可以开启mysql的binlog日志,当mysql数据库中的数据发生修改时,会同时将更新数据写入binlog日志中。通过监听mysqlbinlog,可以监听所有表中的数据变化,并根据数据的修改情况在binlog日志生成对应的二进制日志数据。获取目标数据库的修改日志,可以根据修改日志中携带有目标数据库中的数据发生修改时生成的数据信息完成对本地缓存数据库的同步更新。34.步骤s200:解析修改日志,对修改日志解析后的数据进行筛选,得到需要在本地缓存数据库进行缓存的数据更新信息。35.在获取到由于数据变化而产生的修改日志之后,实时解析该修改日志。对修改日志解析所得的数据进行筛选,筛选出需要进行缓存的数据更新信息,从中可以获得数据行具体更新字段的信息。由于在监听mysqlbinlog时,监听的是所有表的数据变化,修改日志中除了包含有需要缓存的数据之外,还包含有其他不必要缓存的数据,因此,还需要对数据进行过滤,从而可以在解析所得的数据中过滤出需要缓存的数据,获取数据更新信息。36.在本实施例中,所述修改日志为二进制的binlog日志,可以用作binlog解析模块的解析工具包括maxwell、cannal、mysql_streamer等。其中,对二进制日志数据进行解析、筛选得到的数据更新信息为json格式的数据,json(javascriptobjectnotation)是一种轻量级的数据交换格式。37.例如,当数据更新情况为插入数据,binlog解析后的json数据可以为如下数据:38.{“database”:“scl”,“table”:“stu”,“type”:“insert”,“ts”:1552153502,“xid”:832,“commit”:ture,“data”:{“id”:1,“age”:12,“clz”:“初二一班”,“name”:“小明”}};39.当数据更新情况为更新数据,binlog解析后的json数据可以为如下数据:40.{“database”:“scl”,“table”:“stu”,“type”:“update”,“ts”:1552153502,“xid”:833,“commit”:ture,“data”:{“id”:1,“age”:12,“clz”:“初二一班”,“name”:小红”},“old”:{“name”:“小明”}};41.当数据更新情况为删除数据,binlog解析后的json数据可以为如下数据:42.{“database”:“scl”,“table”:“stu”,“type”:“delete”,“ts”:1552153502,“xid”:834,“commit”:ture,“data”:{“id”:1,“age”:12,“clz”:“初二一班”,“name”:“小红”}}。43.步骤s300:将数据更新信息发送至缓存消息队列。44.将解析后获取的数据更新信息发送至消息队列进行缓存,在这里可以将用于缓存数据更新信息的消息队列称为缓存消息队列。缓存消息队列中的数据或消息从缓存消息队列的前端依次按序被读取或输出。将解析后的binlog数据被发送到缓存消息队列mq(messagequeue)中暂存,不仅可以起到应用解耦和流量削峰的作用,还可以保证数据库与缓存的一致性。当缓存数据更新失败时,缓存消息队列mq可以重新输出该条json数据,降低数据丢失概率。在本实施例中,可以用作缓存消息队列mq的工具包括rabbitmq、zeromq、activemq、kafka、jafka等。45.步骤s400:依次从缓存消息队列中读取数据更新信息,根据读取的数据更新信息对本地缓存数据库中的缓存数据和索引数据进行更新。46.订阅了缓存消息队列mq的消费者,实时依次从缓存消息队列mq中获取缓存消息队列mq中暂存的数据更新信息。在本实施例中,本地缓存数据库为redis数据库,redis数据库不仅保存缓存数据还需要保存索引数据。因此,根据读取到的数据更新信息既需要对本地缓存数据库中的缓存数据进行更新,同时也需要对待修改的索引数据进行更新。消费在缓存消息队列mq中暂存的json格式的数据更新信息后,通过自动维护redis数据库中指定字段的索引,来实现当mysql数据库中的数据发生修改时,redis数据库中相对应的缓存数据和索引数据也对应地进行更新,可以保证数据库与缓存的一致性,提升查询效率、减轻对mysql的访问压力。47.步骤s500:接收目标数据库的查询语句,基于查询语句对本地缓存数据库中的索引数据和缓存数据进行查询,获得查询结果。48.通常当客户端发起了一次查询操作时,客户端将输入一条针对目标数据库的查询语句。在本实施例中,目标数据库为mysql数据库,因此查询语句为sql语句。可以接收对目标数据库的查询语句,基于查询语句对本地缓存数据库中的索引数据和缓存数据进行查询。在执行sql索引查询时,本公开通过自动解析sql语句,再根据redis数据库中已有的索引自动转化为一系列执行语句,可以实现对本地缓存数据库中的索引数据和缓存数据的查询,从而获得查询结果。实现了直接在redis缓存中进行sql语句查询,不仅提高了查询效率,还不必在mysql和redis之间进行切换,降低了延迟。49.可以获取目标数据库的修改日志,对修改日志进行解析并筛选以获取需要在本地缓存数据库中进行缓存的数据更新信息,将数据更新信息传输至缓存消息队列。消费者从缓存消息列表中读取数据更新信息,并根据读取到的数据更新信息对本地缓存数据库中对应的缓存数据和索引数据进行更新。即,在消息队列中的数据更新信息更新后,自动维护本地缓存数据库中指定字段的索引,可以使基于本地缓存数据库获得支持索引查询的能力。在执行索引查询时,接收输入的查询语句,自动解析查询语句,再根据本地缓存数据库中已有索引自动转化为一系列执行语句。根据执行语句进行查询以获得查询结果。50.使用本实施例提供的数据库查询方法,可以在确保例如redis实时的本地缓存系统数据最终一致性的情况下,在本地缓存系统的基础上增加数据和索引的维护功能以及直接对本地缓存系统进行查询的功能,获得支持sql索引查询的能力。直接在redis缓存中进行sql语句查询,不仅可以提高查询效率,同时可以不必在mysql和redis之间进行切换,在查询过程中不仅能起到对应用透明的效果,还可以提高实时缓存系统的查询效率。51.在其中一个实施例中,缓存数据为key‑value型数据,由于redis只能存储key‑value型数据,因此缓存数据也为key‑value型数据。其中,key值包括数据库名、表名、主键字段,value值包括索引数据的json值或hash值。对于一条key值的格式为“数据库名:表名:主键值”,value值为json数据的缓存数据,可以表示为scl:stu:1→{id:1,age:12,clz:初二一班,name:小明},其主键为id值。52.图2为本发明其中一实施例的执行索引查询的方法流程示意图,在其中一个实施例中,接收目标数据库的查询语句,基于查询语句对本地缓存数据库中的索引数据和缓存数据进行查询,获得查询结果包括如下步骤s510至s530。53.步骤s510:接收目标数据库的查询语句,对查询语句进行解析,获取查询条件。54.在本实施例中,目标数据库为mysql数据库,因此查询语句为sql语句。对sql语句进行语法分析,以得到要查询的查询条件,以便后续根据查询条件生成执行语句。对sql语句的分析过程可由开源数据库的sql解析模块实现。55.步骤s520:根据查询条件生成执行语句。56.根据步骤s510中解析获取的查询条件、查询逻辑和现有索引自动生成一系列最优的执行语句。例如,当sql语句中存在条件字段的索引时,可以先根据条件之间逻辑关系(与或非)对索引进行集合运算,对集合的运算结果进行汇总后获得主键集合再取出具体数据。然后,对于sql语句中没有索引的条件字段进行比较筛选,最后经过聚合函数计算与排序获得相应的数据。57.步骤s530:根据执行语句,对本地缓存数据库中的索引数据和缓存数据进行查询,获得查询结果。58.运行执行语句,以对本地缓存数据库中的索引数据和缓存数据进行查询,从而获取查询结果。在本实施例中,完成对redis中索引数据和缓存数据的查询后,还可以将最终的查询结果返回给客户端。59.在本实施例中,当客户端发起一次sql查询时,将输入sql语句。可以通过对输入的sql进行分解获取查询条件,再根据查询条件经过优化从而自动生成一系列对应的执行语句。通过运行执行语句,来完成对redis查询中索引数据和缓存数据的查询,并将查询结果返回给客户端。使用本发明提供的数据库查询方法可以使redis数据库支持sql索引查询,客户端能够直接在redis缓存中进行sql语句查询,而不必在mysql和redis之间进行切换。即使客户端的查询操作是例如带有条件的复杂索引查询操作,也能快速地完成,提升查询效率,减轻对mysql的访问压力。60.在其中一个实施例中,查询条件包括表名、字段名、分组、条件。解析器在对sql语句进行语法分析后可以根据分析结果生成解析树。其中,解析树包括表名、字段名、分组、条件等查询条件。生成器可以根据解析器获取的查询条件,结合条件索引、排序索引、聚合函数、数据分页等查询方式、查询逻辑和现有索引自动生成最优的执行语句。61.在其中一个实施例中,为了方便查询每张表建立了哪些索引,还需要构建索引记录表,索引数据包括索引记录表,索引记录表用于记录各个索引方式所对应的索引表。索引数据还可以包括索引表、构建的索引树、索引树的字段信息,或者与索引相关联的其他数据信息。索引记录表可以采用redis的list、set、zset、hash等数据类型来进行存储。62.在本实施例中,索引记录表的存储格式采用list,索引记录表也为key‑value型数据。其中,key值为“数据库名:表名”,value值为索引的key值列表。在对一条缓存数据进行更新时,可以通过索引记录表确定同时还需要对应地更新哪些索引。在对本地缓存数据库进行更新操作时,可以根据缓存更新信息以及索引记录表定位到本地缓存数据库中要更新的缓存数据和其对应的索引数据,从而实现对待缓存数据和索引数据的实时更新。63.图3为本发明其中一实施例的对本地缓存数据库中的缓存数据和索引数据进行更新的方法流程示意图,在其中一个实施例中,数据更新信息包括缓存更新信息和索引更新字段。根据待缓存数据的缓存更新信息对相应的缓存数据进行更新,同时找到发生改变的字段,然后根据索引记录表,可以找到需要更新的索引更新字段。根据索引更新字段可以对索引数据进行更新。因此,根据读取的数据更新信息对本地缓存数据库中的缓存数据和索引数据进行更新包括如下步骤s410至s430。64.步骤s410:根据数据更新信息获取缓存更新信息和索引更新字段。65.订阅了缓存消息队列mq的消费者,实时依次从缓存消息队列mq中获取缓存消息队列mq中暂存的json格式的数据更新信息。根据数据更新信息中的缓存更新信息确定待缓存数据的更新情况,同时根据待缓存数据需要发生改变的字段,对照索引记录表可以查询到与待缓存数据相对应的索引数据。即,可以从数据更新信息中获得数据行具体的缓存数据更新的信息和对应的索引更新字段的信息。66.步骤s420:根据缓存更新信息对本地缓存数据库中的缓存数据进行更新。67.根据数据行具体的缓存更新信息对本地缓存数据库中相应的缓存数据进行更新。68.步骤s430:根据索引更新字段对本地缓存数据库的索引数据进行更新。69.图4为本发明其中一实施例的对索引数据进行更新的方法流程示意图,在其中一个实施例中,根据索引更新字段对本地缓存数据库的索引数据进行更新包括如下步骤s431至s432。70.步骤s431:在索引记录表中确定与索引更新字段相关联的索引表。71.找到本地缓存数据库中缓存数据发生改变的更新字段,对照索引记录表,找到索引记录表中与索引更新字段相关联的索引表。72.步骤s432:根据索引更新字段对本地缓存数据库中相关联的索引表进行更新。73.根据索引更新字段对本地缓存数据库中相应的索引表进行更新。例如,当目标数据库中的数据发生insert和delete操作时,所有缓存数据的索引数据都将发生改变,因此在本地缓存数据库中需要对全部的与索引更新字段相关联的索引表进行更新;而当目标数据库中的数据发生update操作时,只有部分缓存数据发生了改变,因此只需要找出发生了改变的索引更新字段,对与该字段相关联的索引数据进行更新即可。74.在本实施例中,消费在缓存消息队列mq中暂存的json格式的数据更新信息后,根据数据更新信息中待缓存数据的更新信息和更新字段自动维护redis数据库中的缓存数据以及对应字段的索引数据,来实现当mysql数据库中的数据发生修改时,redis数据库中相对应的缓存数据和索引数据也能对应地及时完成更新,保证数据库与缓存的一致性,提升查询效率。75.图5为本发明其中一实施例的对更新结果进行确认的方法流程示意图,在其中一个实施例中,在根据读取的数据更新信息对本地缓存数据库中的缓存数据和索引数据进行更新后,所述方法还包括如下步骤s440至s450。76.步骤s440:获取对本地缓存数据库中的缓存数据和索引数据进行更新的更新结果。like?的查询。在本实施例中,模糊条件索引的存储格式可以使用redis的哈希集合hash,模糊条件索引的key值可以为“数据库名:表名:fidx:字段名”,value值为hash集合{key:[字段值],value:[0]}。在进行模糊查询时,可以通过hscan命令获取满足条件的主键集合,再去查询获取具体的查询数据。[0088]复合条件的索引查询可以在单一条件索引查询的基础上实现。根据单一条件的组合逻辑(and/or/not),将各单一条件索引的查询结果进行集合运算。对于and/or可以直接对查询结果进行交并集运算,对于not可以将查询结果与全表索引进行差集运算。同样地,在进行复合查询时,需要获得满足条件的主键集合,再去查询获取具体的查询数据。[0089]另外,在本实施例中,索引方式还包括聚合函数实现索引、分组查询索引和排序索引。[0090]聚合函数实现索引对应的索引表可以用于实现聚合操作的查询语句。聚合操作包括sum、avg、min、max等。在进行聚合函数实现时,需要经过条件查询获取到具体数据,再通过遍历指定字段的值来完成聚合操作,从而获得具体的查询数据。[0091]分组查询索引对应的索引表可以用于实现groupbyfieldhavingcondition的查询语句。在进行分组查询时,可以通过等值条件索引获取groupby后的数据,再根据having后的条件进行聚合函数计算或筛选,从而查询获得具体的查询数据。[0092]排序索引对应的索引表可以用于实现select*fromtableorderbyfield1,field2…的查询。在本实施例中,排序索引对应的索引表中的存储格式可以为redis的zset,排序索引的key值可以为“数据库名:表名:oidx:字段名1_字段名2…”,value值为zset集合{value:[主键],score:[字段1 字段2]}。排序索引主要是针对多字段进行排序,单字段排序可以使用区间条件索引实现。在排序查询时,需要通过zrange命令获得满足条件排序后的主键集合,再依次查询获取具体的查询数据。[0093]不同的索引方式可以用于完成不同的查询操作,每次查询操作中获取的查询数据的集合构成了该次查询操作的查询结果。[0094]应该理解的是,虽然图1‑图5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1‑图5中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。[0095]基于上述所述的数据库查询方法实施例的描述,本公开还提供数据库查询装置。所述装置可以包括使用了本说明书实施例所述方法的系统(包括分布式系统)、软件(应用)、模块、组件等并结合必要的实施硬件的装置。基于同一创新构思,本公开实施例提供的一个或多个实施例中的装置如下面的实施例所述。由于装置解决问题的实现方案与方法相似,因此本说明书实施例具体的装置的实施可以参见前述方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。[0096]基于前述方法实施例的描述,本公开还提供了一种数据库查询装置,图6为本发明其中一实施例的数据库查询装置的结构框图。数据库查询装置可以包括更新获取模块100、解析模块200、维护模块300和查询模块400。[0097]更新获取模块100被配置为用于获取目标数据库的修改日志。修改日志中包括在目标数据库中的数据发生修改时生成的数据信息。[0098]解析模块200与更新获取模块100相连接,被配置为用于解析修改日志,对修改日志解析后的数据进行筛选,得到需要在本地缓存数据库进行缓存的数据更新信息。数据更新信息包括更新字段的信息,并将数据更新信息发送至缓存消息队列。[0099]维护模块300被配置为用于依次从缓存消息队列中读取数据更新信息,根据读取的数据更新信息对本地缓存数据库中的缓存数据和索引数据进行更新。[0100]查询模块400与维护模块300相连接,被配置为用于接收目标数据库的查询语句,基于查询语句对本地缓存数据库中的索引数据和缓存数据进行查询,获得查询结果。[0101]本公开还提供了一种数据库查询系统,图7是本发明其中一实施例的数据库查询系统的结构框图,数据库查询系统包括本地缓存数据库20和上述实施例中所述的数据库查询装置10。[0102]图8是本发明其中一实施例的查询模块的结构框图,在其中一实施例中,查询模块400包括:解析器410、生成器420、执行器430。[0103]解析器410被配置为用于接收目标数据库的查询语句,并对查询语句进行分析获取查询条件。[0104]生成器420与解析器410相连接,生成器420被配置为用于根据查询条件生成执行语句。[0105]执行器430与生成器420相连接,执行器430被配置为用于运行执行语句对本地缓存数据库20中的索引数据和缓存数据进行查询,获得查询结果。[0106]关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。[0107]可以理解的是,本说明书中上述方法、装置等的各个实施例均采用递进的方式描述,各个实施例之间相同/相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。相关之处参见其他方法实施例的描述说明即可。[0108]图9是根据一示例性实施例示出的一种用于能够直接在redis缓存中进行sql语句查询的数据库查询装置或系统s00的框图。例如,数据库查询系统s00可以为redis数据库缓存系统。参照图9,电子设备数据库查询装置或系统s00包括处理组件s20,其进一步包括一个或多个处理器,以及由存储器s22所代表的存储器资源,用于存储可由处理组件s20的执行的指令,例如应用程序。存储器s22中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件s20被配置为执行指令,以执行上述方法。[0109]数据库查询装置或系统s00还可以包括:电源组件s24被配置为执行电子设备s00的电源管理,有线或无线网络接口s26被配置为将电子设备s00连接到网络,和输入输出(i/o)接口s28。数据库查询装置或系统s00可以操作基于存储在存储器s22的操作系统,例如windowsserver,macosx,unix,linux,freebsd或类似。[0110]在示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器s22,上述指令可由数据库查询装置或系统s00的处理器执行以完成上述方法。存储介质可以是计算机可读存储介质,例如,所述计算机可读存储介质可以是rom、随机存取存储器(ram)、cd‑rom、磁带、软盘和光数据存储设备等。[0111]在示例性实施例中,还提供一种计算机程序产品,所述计算机程序产品中包括指令,上述指令可由数据库查询装置或系统s00的处理器执行以完成上述方法。[0112]在本说明书的描述中,参考术语“有些实施例”、“其他实施例”、“理想实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特征包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性描述不一定指的是相同的实施例或示例。[0113]以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。[0114]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以作出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜