1.本发明涉及数据库技术领域,具体而言,涉及一种数据库查询的方法及系统。
背景技术:2.在数据库技术领域中常见的问题是如何缩短对需要处理大量数据的数据库查询的响应时间。此类数据库查询例如是基于较少的输入条件而执行,因此一般导致输出大量的查询结果,或者数据库查询需要关联较多个数据库表而进行,因此数据关联的过程需要占用较多时间。因此大数据下的数据库查询机制为业界关注。
3.现有技术中,大数据下的数据库查询机制经常采用的一种方法为:在执行数据库查询时,将查询结果更新到查询缓存中,而后续的查询操作实际上是针对查询缓存实现的。图1a-1b示出了现有技术中未使用查询缓存和使用查询缓存的对比例。如图上所示,针对查询语句sql,未使用查询缓存中的示例中,查询语句sql经过语句分析102、优化103和执行104等操作从数据库101中获取到数据,而在使用查询缓存的示例中,查询语句sql经过语句分析102、优化103和执行104等操作优先从查询缓存105中获取数据,只有查询缓存105中不包含满足条件的数据时,才将数据库101中获取数据,并将获取到的数据再更新到查询缓存105中。
4.然而,使用查询缓存实现查询的方法必须确保保存在查询缓存中的数据为最新数据,以此保证基于查询缓存提供的查询结果正确地反映数据库当前的状态,如果数据库中的数据改变,查询缓存中的数据变得过时,则不能返回正确的查询结果。因此,需要提供保持查询缓存中的数据为最新的策略。
5.现有技术中已知有多种查询缓存的更新策略。例如mysql的查询缓存,采取发生数据库内的数据更新时,让查询缓存整体上失效的策略,但是这种方法导致更新操作代价增大,如果写操作较多,缓存效果较差。
技术实现要素:6.本发明的目的是提供一种数据库查询的方法及系统,以克服现有技术中存在的问题。
7.为了达到这个目的,根据本发明的第一方面,本发明实施例提供一种数据库查询的方法,所述方法包括:
8.根据接收到的查询语句检索查询缓存,以获得所述查询语句包含的每个数据库表的标识信息和对应的变更点信息;
9.根据每个数据库表的标识信息检索所述特定存储单元,以获得每个数据库表对应的变更点信息;
10.如果从所述查询缓存中获取到的每个数据库表的变更点信息与相应的从所述特定存储单元中获取到的变更点信息一致,则从所述查询缓存中获取查询结果数据;否则先从数据库中获取查询结果数据,再从所述特定存储单元中获取对应的变更点信息,并将查
询结果数据和对应的变更点信息更新到所述查询缓存中,其中,当数据库表内的数据发生变化时,将所述数据库表的标识信息和对应的变更点信息存储到所述特定存储单元中。
11.在一些实施例中,为每个数据库表设置触发器,当其内的数据发生变化时,触发所述触发器的执行,所述触发器用于将所述数据库表的标识信息和对应的变更点信息存储到特定存储单元中。
12.在一些实施例中,所述将所述数据库表的标识信息和对应的变更点信息存储到所述特定存储单元的步骤以及使所述数据库表内的数据发生变化的操作在同一个事务中执行。
13.在一些实施例中,所述特定存储单元为数据库表,从而,将所述数据库表的标识信息和对应的变更点信息存储到数据库表中的步骤以及使数据库表内的数据发生变化的操作在同一个数据库事务中执行。
14.在一些实施例中,所述变更点信息为自增的数值,每当数据库表内的数据发生变化时,将变更点信息自增一次。
15.在一些实施例中,所述变更点信息包含时间点信息,每当数据库表内的数据发生变化时,根据操作时间点更新变更点信息。
16.在一些实施例中,所述方法还包括:
17.设置缓存机制是否启用的标识;
18.当所述标识指明启用所述缓存机制时,对于接收到的查询语句,使用所述查询步骤实现查询操作,当所述标识指明不启用缓存机制时,对于任意接收到的查询语句,从数据库中获取查询结果数据。
19.在一些实施例中,设置语句级的标识,以指明在特定查询语句上是否启用缓存机制。
20.在一些实施例中,设置全局的标识,以指明全局范围内的查询语句上是否启用缓存机制。
21.第二方面,本发明实施例提供一种数据库查询的系统,包括:
22.更新装置,用于当数据库表内的数据发生变化时,将所述数据库表的标识信息和对应的变更点信息存储到特定存储单元中;
23.查询装置,用于根据接收到的查询语句检索查询缓存,以获得其包含的每个数据库表的标识信息和对应的变更点信息;根据每个数据库表的标识信息检索特定存储单元,以获得每个数据库表对应的变更点信息;如果从所述查询缓存中获取到的每个数据库表的变更点信息与相应的从特定存储单元中获取到的变更点信息一致,则从所述查询缓存中获取查询结果数据;否则从数据库中获取查询结果数据,再从所述特定存储单元中获取对应的变更点信息,并将查询结果数据和对应的变更点信息更新到所述查询缓存中。
24.在一些实施例中,为每个数据库表设置触发器,当数据库表内的数据发生变化时,触发所述触发器的执行,所述触发器用于将所述数据库表的标识信息和最新的变更点信息存储到特定存储单元中。
25.在一些实施例中,所述将所述数据库表的标识信息和对应的变更点信息存储到所述特定存储单元的步骤以及使所述数据库表内的数据发生变化的操作在同一个事务中执行。
26.在一些实施例中,所述变更点信息为自增的数值,每当对所述数据库表内的数据发生变化时,将变更点信息自增一次。
27.在一些实施例中,所述变更点信息为包含时间点信息,每当数据库表内的数据发生变化时,根据操作时间点更新变更点信息。
28.在一些实施例中,所述系统还包括:
29.标识装置,用于设置表示缓存机制是否启用的标识;
30.当所述标识指明启用所述缓存机制时,所述查询装置对于接收到的查询语句,使用所述查询缓存实现查询,当所述标识指明不启用缓存机制时,所述查询装置对于任意接收到的查询语句,从数据库中获取查询结果数据。
31.在一些实施例中,所述标识为语句级的标识,以指明在特定查询语句上是否启用缓存机制。
32.在一些实施例中,所述标识为全局的标识,以指明全局范围内的查询语句上是否启用缓存机制。
33.第三方面,本发明实施例提供一种电子设备,包括存储器和处理器,所述存储器还存储有可由所述处理器执行的计算机指令,所述计算机指令被执行时,实现上述任一项所述的方法。
34.第四方面,本发明实施例提供一种计算机可读介质,所述计算机可读介质存储有可由终端设备执行的计算机指令,所述计算机指令被执行时,实现上述任一项所述的方法。
35.本发明实施例提供的数据查询的方法,通过变更点信息的比较,实现数据库表内的一致性判断,并根据判断结果决定是否从查询缓存中读取数据,从而确保了缓存数据的强一致性,而且,每次执行的对变更点信息的更新操作和每次执行的查询操作操作的数据量均相对有限,从而分散了单位时间内的数据缓存压力,使得系统的整体性能相对稳定。
附图说明
36.通过参考以下附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
37.图1a-1b示出了现有技术中未使用查询缓存和使用查询缓存的对比例。
38.图2是示例性的查询操作的应用场景图;
39.图3a和3b是本发明一个实施例的数据库查询的方法的流程图;
40.图4是用于说明图3a和3b的数据库查询的方法的一个示意图;
41.图5是特定存储单元和查询缓存内存储的数据的示意图;;
42.图6是本发明另一实施例的数据库查询的方法中查询操作的流程图;
43.图7是本发明实施例的数据库查询的系统的结构图;
44.图8是用于实施本发明实施例的数据库查询的方法的电子设备的结构图。
具体实施方式
45.以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过
程、流程没有详细叙述。另外附图不一定是按比例绘制的。
46.图2是示例性的查询操作的应用场景图。系统20可包括经由网络202耦合的多个终端设备201和服务器203。
47.各个终端设备201可基于目前市场上各种型号的处理器构建,并包括诸如存储器和输入输出设备等多种器件。终端设备201上会安装有各种操作系统和各种应用软件,操作系统例如windows
tm
操作系统、un ix操作系统、linux操作系统、rtos操作系统,应用软件例如为浏览器、视频播放软件、通信软件、各种研发工具等等。
48.各个终端设备201可以以各种方式与网络202进行通信。网络202可以基于通过交换信号实现的各种通信技术之一或多种通信技术的组合,包括但不限于采用电和/或光传导线缆的有线技术,以及采用红外、射频和/或其它形式的无线技术。在不同的应用场景下,网络202可以是互联网、广域网或局域网,例如为公司的专有网络。网络202还可以为有线网络或无线网络。
49.各个终端设备201部署有客户端软件2011,服务器203上部署有服务器端软件2031。如图上所示,客户端软件2011接收用户的输入信息,根据输入信息生成查询语句并提供给服务器软件2031,服务器软件2031可以根据查询语句从数据库中直接检索数据,并将查询结果数据返回给客户端软件2011。服务器软件2031还可以维护一个查询缓存,当接收到查询语句时,首先检索查询缓存,如果能够在查询缓存中检索到对应的查询结果数据,则将其返回给客户端软件,如果不能从查询缓存中检索到对应的查询结果数据,则检索数据库获取查询结果数据。
50.应理解,上述应用场景仅为通常情况下的查询操作的应用场景,但是不局限于此,例如发起查询操作和执行查询操作可以来自同一台服务器的相同应用。换言之,本发明实施例可以应用于如图1所示的场景中,也可以应用于除此之外的场景中。
51.下面,在基于附图对本发明实施例进行详细描述之前,首先对本发明实施例的一些方面进行介绍。
52.术语“查询”被用作为包括诸如事务查询、语句级别之类的信息检索的一般术语。“查询缓存”是为了存储查询结果数据提供的缓存单元。查询缓存由于数据量少、读写速度快等原因而具有优于数据库的响应速度,查询缓存可以位于多种类型的缓存(cache)、各种类型的存储器(memory),甚至硬盘(harddisk)上,本发明对此不作限制。
[0053]“变更点信息”为自定义术语,用于表示数据库内的数据的变化情况,当数据库表内的数据发生变化时,变更点信息也发生改变,例如从数据库删除一条数据时,当前的变更点信息与在先的未删除数据之前的变更点信息不同。变更点信息可以基于每个数据库表或者基于整个数据库建立。“特定存储单元”为存储每个数据库表的变更点信息的缓存单元。特定存储单元和查询缓存均为数据的存储单元,它们可以来自相同或者不同的硬件和/或软件系统,对此本发明不作限制。在本发明中,查询缓存中也存储有变更点信息,该变更点信息对应于查询结果数据获取时的数据库表。
[0054]
图3a和3b是本发明一个实施例的数据库查询的方法的流程图。该方法包括对变革点信息的更新操作和查询操作,变更点信息的更新操作用于根据数据库变化情况更新查询缓存中的变更点信息,查询步骤用于接收查询语句,根据查询语句从数据库表或者查询缓存中获取查询结果数据。
[0055]
更新操作为步骤s302,即将数据库表的标识信息和的变更点信息更新到特定存储单元中,由于更新操作由数据库表内的数据发生变化引发,因此图上还示出了步骤s301,即采用增加(insert)、删除(delete)、修改(update)中至少一个操作使数据库表内的数据发生变化。当然,数据库表的结构的变化也会导致数据库表内的数据变化。但数据库表的结构的变化会影响到业务流程的正常执行,因此一般不会在系统运行状态时修改数据库表的结构。
[0056]
数据库表的标识信息是数据库表的唯一标识,可以采用数据库的名称和数据库表的名称来表示,也可以仅采用数据库表的名称表示。变更点信息可以采用多种方式表示。例如,变更点信息可以采用一个自增的数值表示,每当对数据库表内的数据进行增加、更新或者删除操作时,将变更点信息自增一次。再例如,变更点信息还可以采用增加、更新或删除的操作时间点表示,如果在2019年11月25日18时42分13秒从数据库表operates删除一条数据,则将operates的变更点信息修改为:20191125184213。
[0057]
更新操作在每次实施增加、更新或者删除操作之前或者之后。将变更点信息更新到特定存储单元中,从而确保特定存储单元中实时存储的为每个数据库表的最新的变更点信息。
[0058]
查询操作包括步骤s311至s315。
[0059]
在步骤s311中,根据接收到的查询语句检索查询缓存,以获得其包含的每个数据库表的标识信息和对应的变更点信息。
[0060]
根据接收到的查询语句检索查询缓存时,存在两种可能:第一种可能是查询缓存中存储有对应的数据,则可以直接将数据读出,并从中获取到查询语句包含的每个数据库表的标识信息和对应的变更点信息;第二种可能是查询缓存中未存储有对应的数据,此时会跳转到步骤s316执行。第二种可能不是本发明关心的场景,因此,在图上未示出。
[0061]
在步骤s312中,根据每个数据库表的标识信息检索特定存储单元,以获得每个数据库表对应的变更点信息。
[0062]
同样,根据每个数据库表的标识信息检索特定存储单元,也存在两种可能:第一种可能在特定存储单元中检索到对应的数据,则可以将数据读出,从而获取到每个数据库表对应的变更点信息;第二种可能是未在特定存储单元中检索到对应的数据,结合在查询缓存中已经读取到数据,则只能说明系统出现错误,可以给出报错信息,并终止查询步骤的执行。第二种可能不是本发明关心的场景,因此,在本步骤中就不再详述。
[0063]
在步骤s313中,逐一地将从查询缓存中获取到的每个数据库表的变更点信息与相应的从特定存储单元中获取到的变更点信息进行比对。
[0064]
在步骤s314中,是否全都一致。如果从查询缓存中获取到的每个数据库表的变更点信息与相应的从特定存储单元中获取到的变更点信息都一致,则执行步骤s315,否则执行步骤s316。
[0065]
在步骤s315中,从查询缓存中获取查询结果数据。
[0066]
在步骤s316中,从数据库表中获取查询结果数据,再从特定存储单元中获取对应的变更点信息,并将查询结果数据和对应的变更点信息更新到查询缓存中。
[0067]
在步骤s313-s316中,将从查询缓存中获取到的每个数据库表的变更点信息与相应地从特定存储单元中获取到的变更点信息进行比较,如果每个数据库表的变更点信息均
一致,则说明查询缓存中根据接收到的查询语句检索到的查询结果数据为最新数据,但是只要有一个数据库表的变更点信息不一致,则说明查询缓存中根据接收到的查询语句检索到的查询结果数据不为最新数据,因此必须从数据库中重新获取查询结果数据,再从特定存储单元获取对应的变更点信息,并将查询结果数据和对应的变更点信息更新到查询缓存中。
[0068]
下面结合图4和5对上述实施例作进一步的描述。参考图4所示,针对数据库表401内的数据的每次变化,更新操作都会更新特定存储单元10内的变更点信息。初始,查询语句sql经过语句分析402、优化403和执行404等操作从数据库101中获取到数据,并将数据以及从特定存储单元10内获取到的变更点信息存储到查询缓存30中,后续每次执行查询语句sql时,先从特定存储单元10内获取数据库表401的变更点信息,然后将其与从查询缓存30获取到的变更点信息进行比对,如果相同,则从查询缓存中获取数据,如果不同,则从数据库401中获取数据,并将特定存储单元10内的变更点信息和从数据库401中获取到的数据更新到查询缓存30中。
[0069]
图5是特定存储单元和查询缓存存储的数据的示意图。参考图5所示,特定存储单元10用于存储数据库表的标识信息和表更点信息的对应关系数据,查询缓存30用于存储查询语句、变更点信息和查询结果数据的对应关系数据。特定存储单元10可以是各种形式的存储单元,例如文件、内存、数据库表、等等。查询缓存30为缓存单元。举例说明。当标识信息为11的数据库表内的数据发生变化时,该变化可以由增加、删除、更新、改变数据库表的结构等操作引发,针对该变化,修改变更点信息21为变更点信息50。之后,接收到查询语句31,由于查询语句31中涉及到对标识信息为11的数据库表的查询,因此从特定存储单元10中取出变更点信息50,并将其与从查询缓存30取出的变更点信息41(变更点信息41中包含了查询语句31涉及到的每个数据库表对应的变更点信息)比较,如果变更点信息41内存储的标识信息11对应的变更点信息为21,即两者之间的变更点信息不一致,则说明在查询语句31的上一次查询操作之后,标识信息11对应的数据库表内的数据已经发生变化,此时查询操作会从该数据库表内重新获取新的查询结果数据,并将新的查询结果数据和变更点信息50更新到查询语句31的缓存中。
[0070]
综上,上述实施例利用变更点信息进行比较,实现数据库表内的一致性判断,从而确保了缓存数据的强一致性,而且,利用更新步骤维护轻量级的变更点信息,利用查询步骤根据查询语句维护查询结果数据,由于更新步骤和查询步骤每次需要维护的数据均相对有限,从而分散了单位时间内的数据缓存压力,使得系统的整体性能相对稳定。
[0071]
应该指出的是,更新操作和查询操作可以同时或者不同时发生。当更新操作和查询操作不同时发生时,更新操作不会影响到查询操作。但是如果更新操作和查询操作同时发生,则可能发生的一种情况是,更新操作正处于更新状态时,查询操作已经从特定存储单元中读取出变更点信息,这样导致查询操作没有识别出当前查询结果数据已经失效。但是这种对系统影响不大,可以无需处理。还有一种情况是对数据库表内的数据的增加、删除或修改的操作以及将标识信息和对应的变更点信息存储到特定存储单元内的操作在两个不同的事务中进行,导致当其中之一的事务失败时,另一个事务却成功了,从而导致特定存储单元内存储的变更点信息并不能反映数据库表的最新状态。对于这种情况,一种可行的解决方法是将引起数据库表内的数据变化的操作以及将标识信息和对应的变更点信息存储
到特定存储单元的操作放在同一事务中进行。事务包含的多个操作要么一起成功,要么一起失败。由此通过事务能够确保特定存储单元内存储的变更点信息反映对应的数据库表的最新状态。
[0072]
当特定存储单元为数据库表时,上述解决方法即为:将引起数据库表的数据变化的操作以及将标识信息和对应的变更点信息存储到特定存储单元内的操作放在同一数据库事务中进行。具体而言,假设数据库表为orders,存储变更点信息的数据库表为versions,versions存储有关于数据库表orders的变更点信息的一条记录,则从数据库表orders中删除一条数据和修改versions中orders对应的记录在同一个数据库事务中执行,当对orders的删除操作失败时,versions内orders对应的记录不会被修改,当对orders的删除操作成功时,versions内orders对应的记录才会被修改。
[0073]
当特定存储单元为内存单元时,现有各种编码语言和整体架构的解决方案中也提供相应方法可以将对数据库表内的数据的增加、删除或修改等操作以及将标识信息和对应的变更点信息存储到特定存储单元内的操作放在同一事务中进行。例如,java中的事务中的本地事物(jdbc事务)和分布式事务(java transaction api),都能够确保事务的执行。这里就不再赘述。
[0074]
在一些实施例中,更新操作由触发器触发。例如为每个数据库表设置触发器,当对该数据库表进行更新、删除、增加等操作时,触发触发器的执行,触发器将数据库表的标识信息和最新的变更点信息存储到特定存储单元中。依旧以在先的数据库表orders和versions进行举例。假定triorders为设置的触发器,当往数据库表orders添加数据时,triorders被触发,修改versions中的对应记录。同理,当删除和更新的操作发生时,触发器也会被触发,相应的变更点信息也被更新。
[0075]
图6是本发明另一实施例的数据库查询的方法中查询操作的流程图。本实施例的更新操作和图3a所示的更新操作相同。
[0076]
本实施例的查询操作包括以下步骤。
[0077]
在步骤s611中,设置缓存机制是否启用的标识。
[0078]
在步骤s612中,接收查询语句。
[0079]
在步骤s613中,判断对于该查询语句,缓存机制是否启用。如果对于该查询语句,缓存机制已经启用,则执行步骤s614,否则执行步骤s619。
[0080]
在步骤s614中,根据接收到的查询语句检索查询缓存,以获得其包含的每个数据库表的标识信息和对应的变更点信息。
[0081]
在步骤s615中,根据每个数据库表的标识信息检索特定存储单元,以获得每个数据库表对应的变更点信息。
[0082]
在步骤s616中,逐一地将从查询缓存中获取到的每个数据库表的变更点信息与相应的从特定存储单元中获取到的变更点信息进行比对。
[0083]
在步骤s617中,是否全都一致。如果一致,则执行步骤s618,否则执行步骤s619。
[0084]
在步骤s618中,从查询缓存中获取查询结果数据
[0085]
在步骤s619中,从数据库中获取查询结果数据,并从特定存储单元中获取对应的变更点信息,并将查询结果数据和对应的变更点信息更新到查询缓存中。
[0086]
其中,步骤s614-s619与图3b中的相应步骤相同,这里就不再赘述。
[0087]
在本实施例中,为查询语句设置缓存机制是否启用的标识,则每接收到一个查询语句,通过该查询语句检索获得对应的标识并判断该标识,如果该标识表示缓存机制启用,则使用查询缓存处理查询语句,如果该标识表示缓存机制不启用,则直接从数据库表中获取查询语句对应的查询结果数据。同理,当对数据库表内的数据进行更新、删除或者修改等操作时,可以先检索获得对应于该数据库表的标识,如果该标识表示缓存机制不启用,则无需修改变更点信息,如果该标识表示缓存机制启用,则需要修改变更点信息。针对语句级设置标识,能够灵活地根据每个查询语句的情况对是否使用缓存机制进行调整。例如,一些数据经常变化的查询语句,需要经常将数据库中的数据更新到查询缓存中,使用缓存机制并不能提高查询效率,因此可以停止使用缓存机制。
[0088]
优选地,查询语句对应的表示缓存机制是否启用的标识可以存储在查询缓存30中,即每个查询语句都对应一个标识,这样可以根据标识决定是否启用缓存机制。但是对于特定存储单元内存储的各个数据库表的变更点信息,无论缓存机制是否启用,最好都予以记录,因为如果不记录每个数据库表的变更点信息,则即使针对某个查询语句设置了表示缓存机制启用的标识,也无法实现查询缓存的强一致性。
[0089]
在上述实施例中,缓存机制是否启用的标识针对语句级的查询语句设置。在另一个实施例中,还可以设置全局的缓存机制是否启用的标识。该全局的标识可以设置为应用的全局变量。当应用启动后,获取该全局变量并进行判断,如果该标识表示缓存机制启用,则所有的查询语句均使用缓存机制,否则所有的查询语句均不使用缓存机制。当然,也可以将两者结合使用。
[0090]
图7是本发明实施例的基于数据库缓存实现查询的系统的结构图。该系统和在先的方法对应,因此在以下描述中将以相对简略的方式进行。
[0091]
系统70包括更新装置701和查询装置702。更新装置701用于当数据库表内的数据发生变化时,将数据库表的标识信息和对应的变更点信息存储到特定存储单元中。
[0092]
具体地,使得数据库表内的数据发生变化的操作包括:增加、删除、修改数据或改变数据库结构等多种操作。当这些操作中的一种发生时,将数据库表的标识信息和对应的变更点信息存储到特定存储单元中。
[0093]
查询装置702用于根据接收到的查询语句检索查询缓存,以获得其包含的每个数据库表的标识信息和对应的变更点信息;根据每个数据库表的标识信息检索特定存储单元,以获得每个数据库表对应的变更点信息;如果从查询缓存中获取到的每个数据库表的变更点信息与相应的从特定存储单元中获取到的变更点信息均一致,则从查询缓存中获取查询结果数据;否则从数据库中获取查询结果数据,并从特定存储单元中获取对应的变更点信息,并将查询结果数据和对应的变更点信息更新到查询缓存中。
[0094]
综上,本实施例提供的系统利用变更点信息进行比较,实现数据库表内的一致性判断,并根据判断结果决定是否从查询缓存中读取数据,从而确保了缓存数据的强一致性。进一步地,利用更新装置维护轻量级的变更点信息,利用查询装置根据查询语句维护查询结果数据,这样更新装置和查询装置每次需要维护的数据均相对有限,从而分散了单位时间内的数据缓存压力,使得系统的整体性能相对稳定。
[0095]
在一些实施例中,为每个数据库表设置触发器,当数据库表内的数据发生变化时,触发触发器的执行,该触发器用于将数据库表的标识信息和最新的变更点信息存储到特定
存储单元中。
[0096]
在一些实施例中,将数据库表的标识信息和对应的变更点信息存储到特定存储单元的步骤以及使数据库表内的数据发生变化的操作在同一个事务中执行。如果特定存储单位也为数据库表,则上述操作可以在数据库事务中进行。
[0097]
在一些实施例中,所述变更点信息为自增的数值,每当对数据库表内的数据发生变化时,将变更点信息自增一次。
[0098]
在一些实施例中,所述变更点信息为包含时间点信息,每当数据库表内的数据发生变化时,将操作的时间点更新到变更点信息中。
[0099]
在一些实施例中,上述系统还包括:标识装置,用于设置缓存机制是否启用的标识;当标识指明启用缓存机制时,查询装置对于接收到的查询语句,使用查询缓存实现查询,当标识指明不启用缓存机制时,查询装置对于任意接收到的查询语句,从数据库中获取查询结果数据。可选地,标识为语句级的标识,以指明在特定查询语句上是否启用缓存机制。可选地,标识为全局标识,以指明在全局范围内的所有查询语句是否启用缓存机制。
[0100]
与上述实施例相对应,如图8所示,本发明还提供一种电子设备80,在硬件层面,包括存储器802和处理器801,除此之外,一些情况下还包括输入输出设备803和其他硬件804。存储器802例如为高速随机存取存储器(random-access memory,ram),也可能是非易失性存储器(non-volatile memory),例如为至少1个磁盘存储器等。输入输出设备803例如为显示器、键盘、鼠标、网络控制器等设备。处理器801可以基于目前市场上各种型号的处理器构建。处理器801、存储器802、输入输出设备803和其他硬件804通过总线相互连接,该总线可以是isa(industry standard architecture,工业标准体系结构)总线、pci(peripheralcomponent interconnect,外设部件互连标准)总线或eisa(extended industry standardarchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一个线条表示,但并不表示仅有一根总线或一种类型的总线。
[0101]
存储器802用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机指令。存储器可以包括内存和非易失性存储器,并向处理器801提供计算机指令和数据。处理器801从存储器802中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成上述应用于集成开发环境中的交互方法,并具体用于执行以下操作:根据接收到的查询语句检索查询缓存,以获得所述查询语句包含的每个数据库表的标识信息和对应的变更点信息;根据每个数据库表的标识信息检索所述特定存储单元,以获得每个数据库表对应的变更点信息;如果从所述查询缓存中获取到的每个数据库表的变更点信息与相应的从所述特定存储单元中获取到的变更点信息一致,则从所述查询缓存中获取查询结果数据;否则先从数据库中获取查询结果数据,再从所述特定存储单元中获取对应的变更点信息,并将查询结果数据和对应的变更点信息更新到所述查询缓存中,其中,当数据库表内的数据发生变化时,将所述数据库表的标识信息和对应的变更点信息存储到所述特定存储单元中。
[0102]
本领域的技术人员能够理解,本发明可以实现为系统、方法和计算机程序产品。因此,本发明可以具体实现为以下形式,即完全的硬件、完全的软件(包括固件、驻留软件、微代码),还可以实现为软件和硬件结合的形式。此外,在一些实施例中,本发明还可以实现为一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机
可读的程序代码。
[0103]
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如但不限于为电、磁、光、电磁、红外线或半导体的系统、装置或器件,或其他任意以上的组合。计算机可读存储介质的更具体的例子包括:具体一个或多个导线的电连接,便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或者闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器、磁存储器或者上述任意合适的组合。在本文中,计算机可读的存储介质可以是任意包含或存储程序的有形介质,该程序可以被处理单元、装置或者器件使用,或者与其结合使用。
[0104]
计算机可读信号介质可以包括在基带中或者作为截波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或者其他任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质之外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令系统、装置或器件使用或者与其结合使用的程序。
[0105]
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、rf等等,以及上述任意合适的组合。
[0106]
可以以一种或者多种程序设计语言或者组合来编写用于执行本发明实施例的计算机程序代码。所述程序设计语言包括面向对象的程序设计语言,例如java、c++,还可以包括常规的过程式程序设计语言,例如c。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(lan)或广域网(wan)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0107]
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。