CN114911822A - 一种数据读取方法、装置、计算机存储介质及*** - Google Patents
一种数据读取方法、装置、计算机存储介质及*** Download PDFInfo
- Publication number
- CN114911822A CN114911822A CN202110168311.9A CN202110168311A CN114911822A CN 114911822 A CN114911822 A CN 114911822A CN 202110168311 A CN202110168311 A CN 202110168311A CN 114911822 A CN114911822 A CN 114911822A
- Authority
- CN
- China
- Prior art keywords
- data
- query
- queried
- index information
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 99
- 230000004044 response Effects 0.000 claims description 90
- 238000004590 computer program Methods 0.000 claims description 7
- 230000008569 process Effects 0.000 description 20
- 230000007246 mechanism Effects 0.000 description 19
- 230000036541 health Effects 0.000 description 18
- 238000004364 calculation method Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000000977 initiatory effect Effects 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请实施例提供了一种数据读取方法、装置、计算机存储介质及***,该方法包括:接收待查询数据的数据查询请求;基于数据查询请求,并行启动第一查询线程和第二查询线程;第一查询线程用于在数据库组件中查询待查询数据,第二查询线程用于在缓存组件中查询待查询数据;当第一查询线程查询到待查询数据时,控制第一查询线程向第二查询线程发送第一停止信号,从数据库组件中读取待查询数据;当第二查询线程查询到待查询数据时,控制第二查询线程向第一查询线程发送第二停止信号,从缓存组件中读取待查询数据。这样,通过并行启动第一查询线程和第二查询线程,同时在数据库组件和缓存组件中进行查询,提升了数据读取性能和资源利用率。
Description
技术领域
本申请涉及数据管理技术领域,尤其涉及一种数据读取方法、装置、计算机存储介质及***。
背景技术
随着互联网技术的演进,软件应用的整体架构越来越复杂,对用户体验和***性能也有了更高的要求。对于大型***来说,数据读取是一个比较重要的环节,会直接影响***对用户的响应时间。目前,针对数据读取的加速方式主要是依赖缓存技术实现,缓存技术是指从缓存组件读取数据的过程。虽然缓存组件读写更快、更灵活,但是由于缓存组件的容量较小,且需要维护数据的生命周期,所以***需要通过专门的缓存机制来提供数据读取服务。然而,相关技术中的缓存机制在资源利用率、性能提升和***稳定性方面仍有不足。
发明内容
本申请提供了一种数据读取方法、装置、计算机存储介质及***,通过并行启动第一查询线程和第二查询线程,能够同时在数据库组件和缓存组件查询数据,从而能够提升数据读取性能和资源利用率。
本申请的技术方案是这样实现的:
第一方面,本申请实施例提供了一种数据读取方法,该方法包括:
接收待查询数据的数据查询请求;
基于所述数据查询请求,并行启动第一查询线程和第二查询线程;其中,所述第一查询线程用于在数据库组件中查询所述待查询数据,所述第二查询线程用于在缓存组件中查询所述待查询数据;
当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据;其中,所述第一停止信号用于停止所述第二查询线程;
当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据;其中,所述第二停止信号用于停止所述第一查询线程。
第二方面,本申请实施例提供了一种数据读取装置,该数据读取装置包括接收单元、启动单元、第一读取单元和第二读取单元,其中,
接收单元,配置为接收待查询数据的数据查询请求;
启动单元,配置为基于所述数据查询请求,并行启动第一查询线程和第二查询线程;其中,所述第一查询线程用于在数据库组件中查询所述待查询数据,所述第二查询线程用于在缓存组件中查询所述待查询数据;
第一读取单元,配置为当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据;其中,所述第一停止信号用于停止所述第二查询线程;
第二读取单元,配置为当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据;其中,所述第二停止信号用于停止所述第一查询线程。
第三方面,本申请实施例提供了一种数据读取装置,该数据读取装置包括存储器和处理器;其中,
所述存储器,用于存储能够在所述处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行如第一方面所述方法的步骤。
第四方面,本申请实施例提供了一种计算机存储介质,该计算机存储介质存储有数据读取程序,该数据读取程序被至少一个处理器执行时实现如第一方面所述方法的步骤。
第五方面,本申请提供一种数据读取***,该数据读取***至少包括如第二方面或第三方面所述的数据读取装置。
本申请实施例提供了一种数据读取方法、装置、计算机存储介质及***,接收待查询数据的数据查询请求;基于所述数据查询请求,并行启动第一查询线程和第二查询线程;其中,所述第一查询线程用于在数据库组件中查询所述待查询数据,所述第二查询线程用于在缓存组件中查询所述待查询数据;当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据;其中,所述第一停止信号用于停止所述第二查询线程;当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据;其中,所述第二停止信号用于停止所述第一查询线程。这样,通过并行启动第一查询线程和第二查询线程,能够同时在数据库组件和缓存组件查询待查询数据,从而避免了缓存读取的时延问题,提升了数据读取性能和资源利用率。
附图说明
图1为本申请实施例提供的一种数据读取方法的流程示意图;
图2为本申请实施例提供的一种数据读取***的组成结构示意图;
图3为本申请实施例提供的另一种数据读取方法的流程示意图;
图4为本申请实施例提供的又一种数据读取方法的流程示意图;
图5为本申请实施例提供的再一种数据读取方法的流程示意图;
图6为本申请实施例提供的一种数据读取装置的组成结构示意图;
图7为本申请实施例提供的另一种数据读取装置的组成结构示意图;
图8为本申请实施例提供的一种数据读取装置的硬件结构示意图;
图9为本申请实施例提供的另一种数据读取***的组成结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
随着互联网***的演进,软件***的整体架构越来越复杂,对用户体验和***性能也有了更高的要求。对于任何互联网***,数据读取都是一个比较重要的环节,会直接影响***的响应时间。目前,数据读取加速主要依赖缓存技术实现,缓存区读写更快、更灵活,但是容量较小,且需要维护数据的生命周期(Time To Live,TTL),提升了***的复杂性,所以在业务领域通常需要做专门的缓存机制设计,提供数据读取服务。
在相关技术中,缓存机制主要包括以下几种:
(1)数据库缓存机制
通过启用数据库组件(或称为数据库)自带的查询缓存机制(query cache),由数据库组件自身维护查询结果缓存,此时,缓存的载入、读取、删除均由数据库组件完成,当应用程序查询相同的数据时,数据库组件跳过解析、优化和执行,直接访问缓存并返回查询结果。
数据库缓存机制相对简单易用,而且应用程序无需关心数据是从缓存获取或是执行查询获取,相对透明,无需引入额外技术组件。
(2)分布式缓存机制
***引入独立的分布式缓存组件,当应用程序访问数据时,先查询缓存组件,如果命中缓存则直接获取,如果未命中缓存则查询数据库组件返回数据,并将数据载入缓存组件。这个过程是两段式的串行查询,需要应用程序通过一系列逻辑编码控制,并维护缓存条目的生命周期,通过多次交互才能完成整个数据获取和缓存载入。
分布式缓存机制是目前相对主流的技术方案,适当的引入专业高性能缓存组件,将缓存的维护交给专业的组件执行,应用程序只需发起相关命令即可。
(3)***缓存机制
在***内部设计开辟一块缓存组件,并与业务***程序共享内存空间,当应用程序访问数据时,首先访问该缓存组件,如果命中缓存则直接获取,如果未命中缓存则查询数据库组件返回数据,并将数据载入缓存组件。
***缓存机制的实现过程与分布式缓存机制相似,但***缓存机制无需与外部分布式缓存组件交互,使用了本地缓存区代替了分布式缓存组件。这样,本方案无需引入缓存组件,缓存数据存储在应用***内存中,访问获取无需远程调用,相对更加高效和快捷。
然后,前述的几种缓存机制均具有各自的缺点,具体说明如下。
数据库缓存机制:(1)数据库组件需要匹配完全一致的结构化查询语言(Structured Query Language,SQL)指令行,才会前往访问缓存,灵活性较低;(2)当缓存数据涉及的原始数据库组件表发生数据变动或表结构变动时,都会导致该表产生的缓存数据全部失效,有一定局限性;(3)启用数据库缓存机制,会占用数据库组件的运算资源,不利于整体业务的稳定性;
对于分布式缓存机制:(1)整体流程为一个典型的串行方式进行,即需要先访问缓存组件,再访问数据库组件,有一定不必要性能开销;(2)需要编码维护整个过程逻辑,提升了业务编码的复杂性;(3)当一段数据被设计在缓存中时,则永远会被维护到缓存中,当缓存组件发生故障或者响应变慢的时候,即使数据库组件具有相当的空闲资源,也无法被合理利用。
对于***缓存机制:(1)需要编码维护整个过程逻辑,提升了业务编码的复杂性;(2)当一段数据被设计在缓存中时,则永远会被维护到缓存区中,即使数据库组件在某一时间具有相当的空闲资源,也无法被合理利用;(3)缓存区与应用***内存共用,可能会因为缓存载入过多,而影响应用***的稳定性。
除此之外,上述几种缓存机制都对数据以缓存方式进行了加速优化,但是在资源利用率、性能提升和***稳定性方面,没有良好完善的改进。
基于此,本申请实施例提供了一种数据读取方法,该方法的基本思想为:接收待查询数据的数据查询请求;基于所述数据查询请求,并行启动第一查询线程和第二查询线程;其中,所述第一查询线程用于在数据库组件中查询所述待查询数据,所述第二查询线程用于在缓存组件中查询所述待查询数据;当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据;其中,所述第一停止信号用于停止所述第二查询线程;当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据;其中,所述第二停止信号用于停止所述第一查询线程。这样,通过并行启动第一查询线程和第二查询线程,能够同时在数据库组件和缓存组件查询待查询数据,灵活调度读取方式,从而避免了缓存读取的时延问题,提升了数据读取性能和资源利用率。
下面将结合附图对本申请各实施例进行详细说明。
在本申请的一实施例中,参见图1,其示出了本申请实施例提供的一种数据读取方法的流程示意图。如图1所示,该方法可以包括:
S101:接收待查询数据的数据查询请求。
需要说明的是,本申请实施例提供的数据读取方法可以承载在功能模块上,该功能模块可以设置在多种***中,例如分布式存储***/非分布式存储***。同时,该功能模块可以设置在用户设备上,也可以设置在后台服务器上,本申请实施例不作限定。
需要说明的是,对于本申请实施例的数据读取方法,在接收到待查询数据的数据查询请求之后,开启读取待查询数据的过程。在这里,数据查询请求的本质是读取待查询数据的指令。发送数据查询请求的查询方是可以是用户,也可以是指***架构中的上层模块。
S102:基于所述数据查询请求,并行启动第一查询线程和第二查询线程。
需要说明的是,第一查询线程用于在数据库组件中查询待查询数据,所述第二查询线程用于在缓存组件中查询待查询数据。在这里,缓存组件是指在***内存中预留的存储空间,用来暂时保存输入或输出的数据。一般来说,相比较于专门存储和管理数据的数据库组件,缓存组件的读取速度更快。
在相关技术中,一般先在缓存组件中查询待查询数据,如果查询不到,则串行开启另一线程从数据库组件中查询待查询数据,但是这降低了数据读取的效率;另外,当缓存组件处于不健康的运行状态时,其读取数据的速度会明显下降,但是按照相关技术中的读取方案,仍然会优先在缓存组件中读取待查询数据,这导致虽然从数据库组件中能够更快的读取待查询数据,但是***仍然从缓存组件获取数据,从而降低了数据利用率。
在本申请实施例中,在接收到数据查询请求后,并行启动第一查询线程和第二查询线程,能够同时在数据库组件和缓存组件中查询待查询数据,提高了数据读取的速度,同时也提高了数据利用率。
S103:当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据。
需要说明的是:由于第一查询线程和第二查询线程是并行进行的,因此当其中一个查询线程查询到待查询数据时,控制查询到待查询数据的查询线程向另一个查询线程发送停止信号,以停止另一个查询线程,避免浪费***额外的处理量。在这里,停止信号的具体实现形式可以是预设的信号量(Semaphore),也可以采用能够达到相同目的的其他技术手段。
因此,如果第一查询线程在数据库组件中查询到待查询数据,则第一查询线程向第二查询线程发送第一停止信号量,从而第二查询线程终止。在这里,第一停止信号用于停止所述第二查询线程。
S104:当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据。
需要说明的是,如果第二查询线程在缓存组件中查询到待查询数据,则第二查询线程向第一查询线程发送第二停止信号量,从而第一查询线程终止;其中,第二停止信号用于停止第一查询线程。
需要说明的是,在第一查询线程/第二查询线程查询到待查询数据之后,对待查询数据进行读取,之后将所读取的待查询数据返回给查询方。在这里,如果在读取待查询数据时,发生读取失败的情况,那么向查询方返回读取失败的消息。
还需要说明的是,为了提高查询效率,一般***中还可以设置有数据索引区。因此,在一些实施例中,所述基于所述数据查询请求,并行启动第一查询线程和第二查询线程之前,该方法还可以包括:
判断数据索引区是否存储有所述待查询数据的位置索引信息;其中,所述待查询数据的位置索引信息用于指示所述待查询数据存储在所述数据库组件或所述缓存组件;
当判断结果为是时,从所述数据索引区中获取所述待查询数据的位置索引信息,并基于所述待查询数据的索引位置信息读取所述待查询数据;
当判断结果为否时,基于所述数据查询请求,并行启动第一查询线程和第二查询线程。
需要说明的是,数据索引区是***中单独设置的一片区域,其中存储有多个位置索引信息。在这里,数据索引区可以设置在多种位置,例如内存、数据库或者其他设备中,考虑到这个数据量不大且数据索引区会被频繁访问,所以一般设置在***内存中。
位置索引信息能够指示对应的数据(或称为数据块)存储在数据库组件或者存储在缓存组件中,也就是说,待查询数据的位置索引信息用于指示待查询数据存储在数据库组件或缓存组件。
另外,在数据索引区中,只是记载了某一数据块是存储在数据库组件或者存储在缓存组件,而不会具体记载某一数据块详细的存储位置,所以索引位置信息要么指向数据库组件,要么指向缓存组件。值得注意的是,数据索引区是为了方便查询设置的,对于那些同时存储在数据和缓存组件中的数据来说,依然只会保留一个索引位置信息。
因此,在接收到查询指令之后,在数据索引区中查询待查询数据的索引位置信息;如果能够在数据索引区中查询到待查询数据的索引位置信息,那么可以直接根据待查询数据的索引位置信息开启对应的查询线程,读取待查询数据返回给查询方;如果不能在数据索引区中查询到待查询数据的索引位置信息,则执行步骤S102,即并行启动第一查询线程和第二查询线程。
也就是说,假设数据索引区中存储了待查询数据的索引位置信息指向数据库组件,那么可以直接开启第一查询线程在数据库组件中查询待查询数据,无需并行启动第二查询线程;假设数据索引区中存储了待查询数据的索引位置信息指向缓存组件,那么可以直接开启第二查询线程在缓存组件中查询待查询数据,无需并行启动第一查询线程。
另外,由于缓存组件中存储的数据可能会被定期清理,所以可能发生以下情况:在数据索引区中虽然查询到待查询数据的索引位置信息指向缓存组件,但是第二查询线程并没有在缓存组件中查询到待查询数据,此时将会串行开启第一查询线程,通过第一查询线程在数据库组件中最终查询到待查询数据(***中所有的数据都最终存在数据库中),并将待查询数据加载到缓存组件中,同时向查询方返回待查询数据。
需要说明的是,如果数据索引区中并没有存储待查询数据的索引位置信息,那么将并行启动第一查询线程和第二查询线程,在数据库组件和缓存组件中同时查询待查询数据。在第一查询线程或第二查询线程查询到待查询数据之后,以将待查询数据的实际存储位置添加到数据索引区,以方便后续对待查询数据进行查询。因此,在一些实施例中,当所述第一查询线程查询到所述待查询数据时,该方法还可以包括:
根据所述第一查询线程的查询结果,创建所述待查询数据的第一位置索引信息;
将所述第一位置索引信息存储到所述数据索引区中;其中,所述第一位置索引信息用于指示所述待查询数据存储在所述数据库组件中。
需要说明的是,对于并行的第一查询线程和第二查询线程,如果是第一查询线程在数据库组件中查询到待查询数据,那么创建待查询数据的第一位置索引信息,此时第一位置索引信息指向数据库组件,然后将第一位置索引信息存储到数据索引区中。
这样,如果后续再接收到对待查询数据进行查询的指令,则能够在数据索引区查找到第一位置索引信息,从而能够确定待查询数据的索引位置信息为数据库组件,就可以直接通过第一查询线程在数据库组件中查询待查询数据。
进一步的,在一些实施例中,当所述第二查询线程查询到所述待查询数据时,所述方法还包括:
根据所述第二查询线程的查询结果,创建所述待查询数据的第二位置索引信息;
将所述第二位置索引信息存储到所述数据索引区中;其中,所述第二位置索引信息用于指示所述待查询数据存储在所述缓存组件中。
需要说明的是,类似的,如果是第二查询线程在缓存组件中查询到待查询数据,那么在数据索引区中,那么创建待查询数据的第二位置索引信息,此时第二位置索引信息指向缓存组件,将第二位置索引信息存储到数据索引区中。
这样,通过将第二为位置索引信息存储在数据索引区中,节省了后续查询的处理量,同时提高了查询速度,从而提高了用户体验。
综上所述,通过并行的第一查询线程和第二查询线程,能够实现同时在数据库组件和缓存组件中对待查询数据进行查询,优先查询到待查询数据的查询线程读取待查询数据,并将所读取的待查询数据返回给查询方,避免了缓存读取的时延问题,提升了数据读取性能和资源利用率。
进一步地,可以对数据索引区进行定期优化重写,以加速数据读取的速度。因此,在一些实施例中,该方法还可以包括:
针对所述数据索引区中存储的多个位置索引信息,依次判断所述多个位置索引信息是否满足重写条件;
当判断到其中一个位置索引信息满足重写条件时,对所述其中一个位置索引信息进行重写操作;其中,所述重写操作表示将所述位置索引信息由指示数据存储在所述数据库组件重写为指示数据存储在所述缓存组件,或者由指示数据存储在所述缓存组件重写为指示数据存储在所述数据库组件。
需要说明的是,数据索引区是周期性维护的。具体地,针对所述数据索引区中存储的多个索引位置信息,依次判断多个索引位置信息是否满足重写条件。如果判断到其中一个索引位置信息满足重写条件,则重写该索引位置信息。
也就是说,如果某一个索引位置信息是指示数据存储在数据库组件的,经过判断后,发现该索引位置信息满足重写条件,则将该索引位置信息由指示数据存储在数据库组件重写为指示数据存储在缓存组件;类似的,如果索引位置信息是指示数据存储在缓存组件的,经过判断后,发现该索引位置信息满足重写条件,则将该索引位置信息由指示数据存储在缓存组件重写为指示数据存储在数据库组件。这样,能够保证当数据库组件或者缓存组件出现运行问题时,索引位置信息可以及时变更,优化了数据读取的速度和数据利用效率。
进一步地,在一些实施例中,在所述依次判断所述多个位置索引信息是否满足重写条件之前,该方法还可以包括:
根据所述数据库组件在上一时间周期的历史运行数据,计算数据库评分;
根据所述缓存组件在上一时间周期的历史运行数据,计算缓存评分;
根据所述第一查询线程在上一时间周期中的历史查询数据,确定所述多个位置索引信息各自的第一响应时间;其中,不同的位置索引信息对应不同的第一响应时间,所述第一响应时间用于指示从所述数据库组件中查询到对应的所述位置索引信息指示的数据所需的时间;
根据所述第二查询线程在上一时间周期中的历史查询数据,确定所述多个位置索引信息各自的第二响应时间;其中,不同的位置索引信息对应不同的第二响应时间,所述第二响应时间用于指示从所述缓存组件中查询到对应的所述位置索引信息指示的数据所需的时间;
根据所述数据库评分、所述缓存评分、所述多个位置索引信息各自的第一响应时间和所述多个位置索引信息各自的第二响应时间,执行所述依次判断所述多个位置索引信息是否满足重写条件的步骤。
需要说明的是,数据索引区是周期性维护的。也就是说,***存在一个预先设定的周期时长,周期时长根据实际使用需求确定,例如10分钟、30分钟、60分钟等。
为了使得数据索引区中索引位置信息都是最合理的。在开始一个新的时间周期时,获取数据库组件和缓存组件在上一时间周期的历史运行数据,根据数据库组件的历史运行数据计算得到数据库评分,根据缓存组件的历史运行数据计算得到缓存评分。
也就是说,数据库评分能够指示所述数据库组件在上一时间周期的运行状态,缓存评分能够指示所述缓存组件在上一运行周期的运行状态。数据库组件/缓存组件的运行状态越好,相应的数据库评分/缓存评分也会越高。另外,数据库评分和缓存评分的具体计算可以包括多种算法,本申请实施例不做具体限定。
还需要说明的是,历史运行数据可以包括多种属性的运行数据,例如每秒查询数、中央处理器利用率、内存利用率、磁盘吞吐量或者网络吞吐量。因此在一些实施例中,所述根据所述数据库组件在上一时间周期的历史运行数据,计算数据库评分,可以包括:
根据所述数据库组件在上一时间周期的历史运行数据,确定所述数据库组件的多种运行状态值;其中,所述多种运行状态值至少包括以下的一项:每秒查询数、中央处理器利用率、内存利用率、磁盘吞吐量和网络吞吐量;
对所述数据库组件的多种运行状态值分别进行计算,得到所述数据库组件的多个子评分;
根据预设权值对所述数据库组件的多个子评分进行加权求和操作,得到所述数据库评分。
类似的,在一些实施例中,所述根据所述缓存组件在上一时间周期的历史运行数据,计算缓存评分,可以包括:
根据所述缓存组件在上一时间周期的历史运行数据,确定所述缓存组件的多种运行状态值;其中,所述多种运行状态值至少包括以下的一项:每秒查询数、中央处理器利用率、内存利用率、磁盘吞吐量和网络吞吐量;
对所述缓存组件的多种运行状态值分别进行计算,得到所述缓存组件的多个子评分;
根据预设权值对所述缓存组件的多个子评分进行加权求和操作,得到所述缓存评分。
需要说明的是,数据库评分/缓存评分是根据上一时间周期的历史运行数据得到的。首先,根据历史运行数据,确定数据库组件/缓存组件的多种运行状态值;其次,根据数据库组件/缓存组件的多种运行状态值,分别得到数据库组件/缓存组件的多个子评分;最后,将数据库组件/缓存组件的多个子评分进行加权求和,得到数据库评分/缓存评分。在这里,多种运行状态值至少包括以下的一项:每秒查询数、中央处理器利用率、内存利用率、磁盘吞吐量和网络吞吐量。
在一种具体的实施例中,计算数据库评分/缓存评分的过程可以是:(1)将多种属性的运行数据分别与各自的预设业务阈值进行比较,得到多个子评分;(2)根据预设权值分别对多种子评分进行加权求和,得到数据库评分/缓存评分。
需要说明的是,对于多种子评分,每种子评分的权值可以相同也可以不同;如果多种子评分的权值不同,预设权值包括有多种子评分各自的权值。
还需要说明的是,除了数据库评分和缓存组件评分,还需要获得每一个位置索引信息对应的第一响应时间和第二响应时间。在这里,不同的位置索引信息对应不同的第一响应时间,所述第一响应时间用于指示从所述数据库组件中查询到对应的所述位置索引信息指示的数据所需的时间;以及,不同的位置索引信息对应不同的第二响应时间,所述第二响应时间用于指示从所述缓存组件中查询到对应的所述位置索引信息指示的数据所需的时间。
进一步地,在一些实施例中,所述根据所述第一查询线程在上一时间周期中的历史查询数据,确定所述多个位置索引信息各自的第一响应时间,可以包括:
对于所述多个位置索引信息中的其中一个位置索引信息,根据所述第一查询线程在上一时间周期中的历史查询数据,确定所述第一查询线程查询所述其中一个位置索引信息所指示的数据的多个第一历史响应时间;
计算所述多个第一历史响应时间的平均值,将计算得到的平均值确定为所述其中一个位置索引信息的第一响应时间,以得到所述多个位置索引信息各自的第一响应时间。
类似的,在一些实施例中,所述根据所述第二查询线程在上一时间周期中的历史查询数据,确定所述多个位置索引信息各自的第二响应时间,可以包括:
对于所述多个位置索引信息中的其中一个位置索引信息,根据所述第二查询线程在上一时间周期中的历史查询数据,确定所述第二查询线程查询所述其中一个位置索引信息所指示的数据的多个第二历史响应时间;
计算所述多个第二历史响应时间的平均值,将计算得到的平均值确定为所述其中一个位置索引信息的第二响应时间,以得到所述多个位置索引信息各自的第二响应时间。
需要说明的是,第一响应时间可以是上一时间周期中,数据库组件查询该索引位置信息对应的数据时所需的平均响应时间。因此,对于具体一个位置索引信息,根据第一查询线程的历史查询数据,确定出上一时间周期中第一查询线程查询该位置索引信息对应的指示的数据的多个第一历史响应时间,将多个第一历史响应时间的平均值作为该位置索引信息的第一响应时间。这样,最终能够计算到多个位置索引信息各自的第一响应时间。
第二响应时间可以是上一时间周期中,缓存组件查询该索引位置信息对应的数据时所需的平均响应时间。因此,对于具体一个位置索引信息,根据第二查询线程的历史查询数据,确定出上一时间周期中第二查询线程查询该位置索引信息对应的指示的数据的多个第二历史响应时间,将多个第二历史响应时间的平均值作为该位置索引信息的第二响应时间。这样,最终能够计算到多个位置索引信息各自的第二响应时间。
这样,在获得数据库评分、缓存评分、多个位置索引信息各自的第一响应时间和多个位置索引信息各自的第二响应时间之后,根据这些信息依次判断多个位置索引信息是否满足重写条件。
进一步地,在一些实施例中,在所述其中一个位置索引信息指示数据存储在所述数据库组件的情况下,所述当判断到其中一个位置索引信息满足重写条件时,对所述其中一个位置索引信息进行重写操作,包括:
当所述数据库评分小于所述缓存评分,且所述其中一个位置索引信息的第一响应时间大于预设业务阈值,且所述其中一个位置索引信息的第二响应时间小于所述预设业务阈值时,将所述其中一个位置索引信息由指示数据存储在所述数据库组件重写为指示数据存储在所述缓存组件。
需要说明的是,对于那些指示数据存储在数据库组件的索引位置信息来说,重写条件为:
(1)所述数据库评分小于所述缓存评分;
(2)且该索引位置信息的第一响应时间大于预设业务阈值;
(3)且该索引位置信息的第二响应时间小于预设业务阈值。
在这里,预设业务阈值是业务***能够接收的最大响应时间。对于那些指示数据存储在数据库组件的索引位置信息来说,当索引位置信息同时满足以上条件时,确定该索引位置信息满足重写条件。
还需要说明的是,对于指示数据存储在数据库组件的索引位置信息,重写操作是指将索引位置信息重写为指示数据存储在缓存组件。
进一步地,在一些实施例中,在所述其中一个位置索引信息指示数据存储在所述缓存组件的情况下,所述当判断到其中一个位置索引信息满足重写条件时,对所述其中一个位置索引信息进行重写操作,包括:
当所述数据库评分大于所述缓存评分,且所述其中一个位置索引信息的第一响应时间小于预设业务阈值,且所述其中一个位置索引信息的第二响应时间大于所述预设业务阈值时,将所述其中一个位置索引信息由指示数据存储在所述缓存组件重写为指示数据存储在所述数据库组件。
需要说明的是,对于那些指示数据存储在缓存组件的索引位置信息来说,重写条件为:
(1)所述数据库评分大于所述缓存评分;
(2)且该索引位置信息的第一响应时间小于预设业务阈值;
(3)且该索引位置信息的第二响应时间大于预设业务阈值。
在这里,预设业务阈值是业务***能够接收的最大响应时间。对于那些指示数据存储在缓存组件的索引位置信息来说,当索引位置信息同时满足以上条件时,确定该索引位置信息满足重写条件,将该索引位置信息重写为指示数据存储在数据库组件。
还需要注意的是,由于数据库组件中肯定存储有所有的数据,而缓存组件指示临时存放的区域,所以对于某些数据块,虽然数据索引区存储有指向缓存组件的索引位置信息,但是有可能缓存组件并没有存储该数据,或者被清空了该数据,那么在查询过程中,如果第二查询线程在缓存组件查询不到该数据,会串行开启第一查询线程,从数据库组件中查询该数据,并将该数据加载到缓存组件中。
这样,通过定期对数据索引区中的索引数据进行自组织,能够动态调整索引位置,合理的利用数据库组件/缓存组件的资源,达到提升整体性能和数据利用率的目的。
综上所述,对于业务支撑领域内,缓存读取的串行时延问题,目前尚未发现有较好的技术方法和低成本方式能够及时进行解决。在本申请实施例中,对于数据库组件和缓存组件的查询是通过两类线程进行,且两类线程通过并行的理念开展,很大程度上解决了此类问题。
另外,在数据索引区中,周期性的计算并动态调整索引位置信息,极大的提升了***整体利用率,当数据库组件/缓存组件中的其中一个组件无法响应或响应较慢时,可以动态调整至另一组件,这使得数据读取过程具备相当的容错性。
也就是说,本申请实施例的关键点在于:
(1)第一查询线程和第二查询线程的并发读取理念;
(2)周期性对索引位置信息进行计算和重写,在满足数据读取功能同时,也大大提升了***整体利用率。
本申请实施例提供了一种数据读取方法,通过接收待查询数据的数据查询请求;基于所述数据查询请求,并行启动第一查询线程和第二查询线程;其中,所述第一查询线程用于在数据库组件中查询所述待查询数据,所述第二查询线程用于在缓存组件中查询所述待查询数据;当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据;其中,所述第一停止信号用于停止所述第二查询线程;当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据;其中,所述第二停止信号用于停止所述第一查询线程。这样,通过并行启动第一查询线程和第二查询线程,能够同时在数据库组件和缓存组件查询待查询数据,灵活调度读取方式,从而避免了缓存读取的时延问题,提升了数据读取性能和资源利用率。
在本申请的另一实施例中,参见图2,其示出了本申请实施例提供的一种数据读取***的组成结构示意图。如图2所示,该数据读取***包括数据查询接口(QueryInterface)201,数据索引区(Index)202,采集器(Collector)203,数据自组织模块(DataSelf-organizing Module,DSOM)204、数据库组件(Database)205和缓存组件(Cache)206。其中,
数据查询接口201,用于负责对接外部的数据查询请求;
数据索引区202,用于存储数据块的位置标记(数据块的位置标记相当于前述的索引位置信息),从而指引当前数据查询请求前往检索数据库组件205或者缓存组件206;
采集器203,用于采集每次落到数据库组件205和缓存组件206的数据查询请求的响应时间,以及两个组件的运行性能数据;
数据自组织模块204,用于根据采集器203采集到的各项指标,通过一系列算法计算,得出数据块的索引位置信息。
进一步地,基于该数据读取***,本申请实施例还提供了另一种数据读取方法,参见图3,其示出了本申请实施例提供的另一种数据读取方法的流程示意图。如图3所示,该方法可以包括:
S301:查询方的数据查询请求到达数据查询接口;
需要说明的是,来自于查询方的数据查询请求到达数据查询接口,以开启数据查询过程。
S302:数据查询接口查询数据索引区,判断数据索引区中是否存储有待查询数据的索引位置信息。
在这里,对于步骤S302,如果判断结果为否,则执行步骤S303。
需要说明的是,数据查询接口先在数据索引区查询,判断待查询数据是否命中数据索引区。
如果数据索引区中存储有待查询数据的索引位置信息(Index(D)),则可以直接按照待查询数据的索引位置信息来进行后续查询;如果数据索引区中没有存储有待查询数据的索引位置信息,则执行步骤S303。
S303:数据查询接口同时发起两类查询线程:数据库查询线程和缓存查询线程。
需要说明的是,数据库查询线程(Database_Query_Thread)相当于前述的第一查询线程,用于向数据库组件查询数据;缓存查询线程(Cache_Query_Thread)相当于前述的第二查询线程,用于向缓存组件查询数据。
需要说明的是,数据查询接口并行发起数据库查询线程和缓存查询线程,从而实现在数据库组件和缓存组件中同步对待查询数据进行查询。
S304:当任一线程获取到数据后,向另一方线程传递“线程终止”信号量,另一线程则停止查询,数据查询接口获取较快查询到数据的线程返回的数据。
需要说明的是,对于数据库查询线程和缓存查询线程,当其中任一线程获取到数据后,即向另一方线程发起线程通信,传递“线程终止”信号量(semaphore),另一线程则停止查询。数据查询接口获取较快查询到数据的线程返回的数据,整个流程是一个并行过程。
S305:根据待查询数据的所在位置,数据查询接口维护数据索引区的索引位置信息。
需要说明的是,根据待查询数据的所在位置(数据库组件或者缓存组件),数据查询接口对数据索引区进行维护,即创建待查询数据的索引位置信息。这样,后续如果仍然对待查询数据进行查询,可以直接在数据索引区中获取其索引位置信息,然后直接利用对应的查询线程进行查询。
S306:数据查询接口将待查询数据并返回给查询方。
需要说明的是,数据查询接口获取较快查询到数据的线程返回的数据,将待查询数据返回给查询方。
这样,对于无法在数据索引区中查找到索引位置的待查询数据,通过并行启动两个查询线程,能够同时在数据库组件中和缓存组件中进行查询,从而提高了数据查询的速度和效率。
本申请实施例提供了一种数据读取方法,通过本实施例对前述实施例的详细阐述,从中可以看出,通过并行启动第一查询线程和第二查询线程,能够同时在数据库组件和缓存组件查询待查询数据,灵活调度读取方式,从而避免了缓存读取的时延问题,提升了数据读取性能和资源利用率。
基于前述的数据读取***,参见图4,其示出了本申请实施例提供的又一种数据读取方法的流程示意图。如图4所示,该方法可以包括:
S401:查询方的数据查询请求到达数据查询接口。
需要说明的是,来自于查询方的数据查询请求到达数据查询接口,以看是数据查询过程。
S402:数据查询接口查询数据索引区,判断数据索引区中是否存储有待查询数据的索引位置信息;
在这里,对于步骤S402,如果判断结果为是,则执行步骤S403。
需要说明的是,数据查询接口先在数据索引区查询,判断待查询数据是否命中数据索引区。如果数据索引区中存储有待查询数据的索引位置信息,可以直接按照待查询数据的索引位置信息来进行后续查询。
S403:根据待查询数据的索引位置信息发起不同查询线程,查询对象为数据库组件或缓存组件。
需要说明的是,当待查询数据的索引位置信息指向数据库组件时,则发起数据库查询线程,仅在数据库组件中对待查询数据进行查询;当待查询数据的索引位置信息指向缓存组件时,则发起缓存组件查询线程,仅在缓存组件中对待查询数据进行查询。
S404:获取待查询数据并返回给查询方。
需要说明的是,数据查询接口在读取待查询数据后,将待查询数据返回给查询方。
本申请实施例提供了一种数据读取方法,通过并行启动第一查询线程和第二查询线程,能够同时在数据库组件和缓存组件查询待查询数据,从而避免了缓存读取的时延问题,提升了数据读取性能和资源利用率。
基于前述的数据读取***,参见图5,其示出了本申请实施例提供的再一种数据读取方法的流程示意图。如图5所示,该方法可以包括:
S501:采集器定期监控数据库组件和缓存组件的运行状态并采集数据。
需要说明的是,在***的运行过程中,数据自组织模块每隔T时间,动态调整索引位置,T为预设的时间周期,例如10分钟。
还需要说明的是,在每一个时间周期的运行过程中,采集器监控数据库组件和缓存组件的运行状态并采集数据。具体采集的运行状态数据可以包括:如每秒查询数(字段名可以为QPS)、中央处理器的利用率(字段名可以为cpu)、内存利用率(字段名可以为memory)、磁盘吞吐量大小(字段名可以为disk_io)、网络吞吐量大小(字段名可以为net_io);采集器同时采集T时间范围内的所有成功获取数据的数据库查询线程和缓存组件查询线程的响应时间。
S502:数据自组织模块获取采集器在上一周期内采集的数据,计算数据库组件的健康度、缓存组件的健康度以及数据索引区中每一位置索引信息对应的线程响应时间。
需要说明的是,数据库组件的健康度相当于前述的数据库评分,缓存组件的健康度相当于前述的数据库评分。另外,线程响应时间包括数据库查询线程查询位置索引信息对应的数据块的第一响应时间,以及包括缓存组件查询位置索引信息对应的数据块的第二响应时间。
具体的,对数据的计算可以分为两部分:运行状态数据的计算和线程响应时间的计算。
(1)运行状态数据的计算
针对各项运行状态数据,与对应的预设业务阈值分别进行比较,再根据权重计算出当前组件的健康度(健康度得分越高,表示该组件越健康),举例如下:
QPS值健康度得分计算为:S(QPS)=Fun1(QPS);
cpu值健康度得分计算为:S(cpu)=Fun2(cpu);
memory值健康度得分计算为:S(memory)=Fun3(memory);
disk_io值健康度得分计算为:S(disk_io)=Fun4(disk_io);
net_io值健康度得分计算为:S(net_io)=Fun5(net_io);
需要说明的是,以上Fun1、Fun2、Fun3、Fun4、Fun5分别为预设QPS阈值、预设cpu阈值、预设memory阈值、预设disk_io阈值和预设net_iod阈值。另外,通过阈值比较来计算健康度得分只是一种具体的算法,也可参照相关技术中的其他算法进行计算,本申请实施例在此不做限定。
之后,QPS、cpu、memory、disk_io、net_io的得分占比权重分别为:W1、W2、W3、W4、W5,则组件健康度得分为:
S_total=S(QPS)*W1+S(cpu)*W2+S(memory)*W3+S(disk_io)*W4+S(net_io)*W5。
通过以上计算,就分别得到了数据库组件的健康度和缓存组件的健康度。
(2)运行状态数据的计算
针对各项运行状态数据,数据自组织模块通过预设线程响应时间计算方法,分别计算每一索引位置信息的线程响应时间。在这里,预设线程响应时间计算方法可以采用多种算法,本申请在此不作限定。
在一种具体的实施例中,可针对具体一个位置索引信息,可以将上一周期中数据库组件查询该位置索引信息对应的数据块的平均响应时间值作为第一响应时间RT(Database_Query_Thread),以及将上一周期中缓存组件查询该位置索引信息对应的数据块的平均响应时间值作为第二响应时间RT(Cache_Query_Thread)。
S503:对数据索引区中的每一索引位置信息进行判断,如果其中一个索引位置信息满足重写条件,则将所述其中一个索引位置信息进行重写操作。
需要说明的是:对数据索引区中的索引位置信息进行判断,如果其中一个索引位置信息满足重写条件,则将所述索引位置信息进行重写。在这里,重写条件可以根据实际使用需求确定,本申请实施例在此不做限定。
对于指向数据库组件的索引位置信息,重写操作是指将该索引位置信息改写为指向缓存组件;对于指向缓存组件的索引位置信息,重写操作是指将该索引位置信息改写为指向数据库组件。
在一种具体的实施例中,步骤S503可以包括以下具体步骤:
首先,确定预设业务阈值(RT_MAX),即业务能接受的RT最大值。
其次,当一个组件(数据库组件或缓存组件)的RT高于RT_MAX,另一组件的RT小于RT_MAX,同时该组件的健康度也低于另一组件,则发生索引位置重写,指向另一组件。
也就是说,对索引位置信息进行判断和重写。若索引位置信息指示数据存储在缓存组件,经过T时间的运行,当满足以下三个条件时,则重写该索引位置信息指示数据存储在数据库组件:
(1)RT(Cache_Query_Thread)大于RT_MAX(业务能接受的RT最大值);
(2)RT(Database_Query_Thread)小于RT_MAX(业务能接受的RT最大值);
(3)S_total(Database)大于S_total(Cache),即Database的健康度优于Cache的健康度。
类似的,若索引位置信息指示数据存储在数据库组件的,经过T时间的运行,当满足以下三个条件时,则重写该索引位置信息指向缓存组件:
(1)RT(Cache_Query_Thread)小于RT_MAX(业务能接受的RT最大值);
(2)RT(Database_Query_Thread)大于RT_MAX(业务能接受的RT最大值);
(3)S_total(Database)大于S_total(Cache),即Database的健康度优于Cache的健康度。
这样,通过围绕T周期内,不断的重写数据索引区,优化数据块指引位置(即索引位置信息),合理的利用各个组件的资源,达到提升整体性能和利用率的目的。
对于业务支撑领域内,缓存读取的串行时延问题,目前尚未发现有较好的技术方法和低成本方式能够及时进行解决,本方案中,对于Database和Cache的查询是通过两类线程进行,以并行的理念开展,很大程度上解决了此类问题。
本申请实施例中,数据自组织模块根据采集器采集到的数据,周期性的计算并动态调整数据读取方式,极大的提升了***整体利用率,当查询某一组件无法响应或响应较慢时,可以动态调整至另一组件,也具备一定的容错性。
由此,本申请实施例提供了一种基于线程通信的自组织数据读取方法模型,其关键点在于(1)Database_Query_Thread和Cache_Query_Thread查询线程的并发读取理念;(2)借助数据自组织模块定期自组织调整读取方式,在满足数据读取功能同时,也大大提升了***整体利用率。
综上所述,在运营商业务支撑和软件架构领域内,本申请的欲保护点在于:(1)一种基于线程通信的并行数据读取方法,Database查询线程和Cache查询线程并发同时执行,并通过线程间信号量互相通信;(2)在***构建数据索引区判定读取线程连接对象,通过数据自组织模块计算并实现自组织调整数据读取方式;(3)基于上述方法实现的软件***;(4)基于上述方法实现的硬件***、装置或设备。
本申请实施例提供了一种数据读取方法,通过本实施例对前述实施例的详细阐述,从中可以看出,一方面,借助数据索引区查询待查询数据的索引位置信息,如果数据索引区中存储有待查询数据的索引位置,可以直接根据待查询数据的索引位置进行对应查询,提高了数据读取的效率和速度;如果数据索引区中没有存储有待查询数据的索引位置,通过并行启动第一查询线程和第二查询线程,能够同时在数据库组件和缓存组件查询待查询数据,从而避免了缓存读取的时延问题,提升了数据读取性能和资源利用率;另一方面,通过不断对数据索引区的索引位置信息进行重写,合理的利用各个组件的资源,达到提升整体性能和利用率的目的。
在本申请的再一实施例中,参见图6,其示出了本申请实施例提供的另一种数据读取装置60的组成结构示意图。如图6所示,该数据读取装置60包括接收单元601、启动单元602、第一读取单元603和第二读取单元604,其中,
接收单元601,配置为接收待查询数据的数据查询请求;
启动单元602,配置为基于所述数据查询请求,并行启动第一查询线程和第二查询线程;其中,所述第一查询线程用于在数据库组件中查询所述待查询数据,所述第二查询线程用于在缓存组件中查询所述待查询数据;
第一读取单元603,配置为当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据;其中,所述第一停止信号用于停止所述第二查询线程;
第二读取单元604,配置为当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据;其中,所述第二停止信号用于停止所述第一查询线程。
在一些实施例中,如图7所示,该数据读取装置60还包括索引单元605,配置为判断数据索引区是否存储有所述待查询数据的位置索引信息;其中,所述待查询数据的位置索引信息用于指示所述待查询数据存储在所述数据库组件或所述缓存组件;当判断结果为是时,从所述数据索引区中获取所述待查询数据的位置索引信息,并基于所述待查询数据的索引位置信息读取所述待查询数据;当判断结果为否时,基于所述数据查询请求,并行启动第一查询线程和第二查询线程。
在一些实施例中,如图7所示,该数据读取装置60还包括创建单元606,配置为根据所述第一查询线程的查询结果,创建所述待查询数据的第一位置索引信息;将所述第一位置索引信息存储到所述数据索引区中;其中,所述第一位置索引信息用于指示所述待查询数据存储在所述数据库组件中。
在一些实施例中,创建单元606,还配置为根据所述第二查询线程的查询结果,创建所述待查询数据的第二位置索引信息;将所述第二位置索引信息存储到所述数据索引区中;其中,所述第二位置索引信息用于指示所述待查询数据存储在所述缓存组件中。
在一些实施例中,如图7所示,该数据读取装置60还包括重写单元607,配置为针对所述数据索引区中存储的多个位置索引信息,依次判断所述多个位置索引信息是否满足重写条件;当判断到其中一个位置索引信息满足重写条件时,对所述其中一个位置索引信息进行重写操作;其中,所述重写操作表示将所述位置索引信息由指示数据存储在所述数据库组件重写为指示数据存储在所述缓存组件,或者由指示数据存储在所述缓存组件重写为指示数据存储在所述数据库组件。
在一些实施例中,重写单元607,还配置为根据所述数据库组件在上一时间周期的历史运行数据,计算数据库评分;根据所述缓存组件在上一时间周期的历史运行数据,计算缓存评分;根据所述第一查询线程在上一时间周期中的历史查询数据,确定所述多个位置索引信息各自的第一响应时间;其中,不同的位置索引信息对应不同的第一响应时间,所述第一响应时间用于指示从所述数据库组件中查询到对应的所述位置索引信息指示的数据所需的时间;根据所述第二查询线程在上一时间周期中的历史查询数据,确定所述多个位置索引信息各自的第二响应时间;其中,不同的位置索引信息对应不同的第二响应时间,所述第二响应时间用于指示从所述缓存组件中查询到对应的所述位置索引信息指示的数据所需的时间;根据所述数据库评分、所述缓存评分、所述多个位置索引信息各自的第一响应时间和所述多个位置索引信息各自的第二响应时间,执行所述依次判断所述多个位置索引信息是否满足重写条件的步骤。
在一些实施例中,在所述其中一个位置索引信息指示数据存储在所述数据库组件的情况下,重写单元607,还配置为当判断到所述数据库评分小于所述缓存评分,且所述其中一个位置索引信息的第一响应时间大于预设业务阈值,且所述其中一个位置索引信息的第二响应时间小于所述预设业务阈值时,将所述其中一个位置索引信息由指示数据存储在所述数据库组件重写为指示数据存储在所述缓存组件。
在一些实施例中,在所述其中一个位置索引信息指示数据存储在所述缓存组件的情况下,重写单元607,还配置为当判断到所述数据库评分大于所述缓存评分,且所述其中一个位置索引信息的第一响应时间小于预设业务阈值,且所述其中一个位置索引信息的第二响应时间大于所述预设业务阈值时,将所述其中一个位置索引信息由指示数据存储在所述缓存组件重写为指示数据存储在所述数据库组件。
在一些实施例中,重写单元607,还配置为根据所述数据库组件在上一时间周期的历史运行数据,确定所述数据库组件的多种运行状态值;其中,所述多种运行状态值至少包括以下的一项:每秒查询数、中央处理器利用率、内存利用率、磁盘吞吐量和网络吞吐量;对所述数据库组件的多种运行状态值分别进行计算,得到所述数据库组件的多个子评分;根据预设权值对所述数据库组件的多个子评分进行加权求和操作,得到所述数据库评分。
在一些实施例中,重写单元607,还配置为根据所述缓存组件在上一时间周期的历史运行数据,确定所述缓存组件的多种运行状态值;其中,所述多种运行状态值至少包括以下的一项:每秒查询数、中央处理器利用率、内存利用率、磁盘吞吐量和网络吞吐量;对所述缓存组件的多种运行状态值分别进行计算,得到所述缓存组件的多个子评分;根据预设权值对所述缓存组件的多个子评分进行加权求和操作,得到所述缓存评分。
可以理解地,在本实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
因此,本实施例提供了一种计算机存储介质,该计算机存储介质存储有数据读取程序,所述数据读取程序被至少一个处理器执行时实现前述实施例中任一项所述的方法的步骤。
基于上述的一种数据读取装置60的组成以及计算机存储介质,参见图8,其示出了本申请实施例提供的一种数据读取装置60的具体硬件结构示意图,如图8所示,所述数据读取装置60可以包括:通信接口701、存储器702和处理器703;各个组件通过总线设备704耦合在一起。可理解,总线设备704用于实现这些组件之间的连接通信。总线设备704除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图8中将各种总线都标为总线设备704。其中,通信接口701,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
存储器702,用于存储能够在处理器703上运行的计算机程序;
处理器703,用于在运行所述计算机程序时,执行:
接收待查询数据的数据查询请求;
基于所述数据查询请求,并行启动第一查询线程和第二查询线程;其中,所述第一查询线程用于在数据库组件中查询所述待查询数据,所述第二查询线程用于在缓存组件中查询所述待查询数据;
当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据;其中,所述第一停止信号用于停止所述第二查询线程;
当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据;其中,所述第二停止信号用于停止所述第一查询线程。
可以理解,本申请实施例中的存储器702可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data RateSDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步链动态随机存取存储器(Synchronous link DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DRRAM)。本申请描述的设备和方法的存储器702旨在包括但不限于这些和任意其它适合类型的存储器。
而处理器703可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器703中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器703可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(APPlication Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器702,处理器703读取存储器702中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本申请描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(APPlication Specific Integrated Circuits,ASIC)、数字信号处理器(Digital SignalProcessing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(ProgrammableLogic Device,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。
对于软件实现,可通过执行本申请所述功能的模块(例如过程、函数等)来实现本申请所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
可选地,作为另一个实施例,处理器703还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的方法的步骤。
基于上述数据读取装置60的组成以及硬件结构示意图,参见图9,其示出了本申请实施例提供的另一种数据读取***80的组成结构示意图。如图9所示,该数据读取***80至少包括前述实施例中任一项所述的数据读取装置60。
对于数据读取***80而言,通过并行启动第一查询线程和第二查询线程,能够同时在数据库组件和缓存组件查询待查询数据,从而避免了缓存读取的时延问题,提升了数据读取性能和资源利用率。
以上所述,仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。
需要说明的是,在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种数据读取方法,其特征在于,所述方法包括:
接收待查询数据的数据查询请求;
基于所述数据查询请求,并行启动第一查询线程和第二查询线程;其中,所述第一查询线程用于在数据库组件中查询所述待查询数据,所述第二查询线程用于在缓存组件中查询所述待查询数据;
当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据;其中,所述第一停止信号用于停止所述第二查询线程;
当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据;其中,所述第二停止信号用于停止所述第一查询线程。
2.根据权利要求1所述的数据读取方法,其特征在于,所述基于所述数据查询请求,并行启动第一查询线程和第二查询线程之前,所述方法还包括:
判断数据索引区是否存储有所述待查询数据的位置索引信息;其中,所述待查询数据的位置索引信息用于指示所述待查询数据存储在所述数据库组件或所述缓存组件;
当判断结果为是时,从所述数据索引区中获取所述待查询数据的位置索引信息,并基于所述待查询数据的索引位置信息读取所述待查询数据;
当判断结果为否时,基于所述数据查询请求,并行启动第一查询线程和第二查询线程。
3.根据权利要求2所述的数据读取方法,其特征在于,当所述第一查询线程查询到所述待查询数据时,所述方法还包括:
根据所述第一查询线程的查询结果,创建所述待查询数据的第一位置索引信息;
将所述第一位置索引信息存储到所述数据索引区中;其中,所述第一位置索引信息用于指示所述待查询数据存储在所述数据库组件中。
4.根据权利要求2所述的数据读取方法,其特征在于,当所述第二查询线程查询到所述待查询数据时,所述方法还包括:
根据所述第二查询线程的查询结果,创建所述待查询数据的第二位置索引信息;
将所述第二位置索引信息存储到所述数据索引区中;其中,所述第二位置索引信息用于指示所述待查询数据存储在所述缓存组件中。
5.根据权利要求2所述的数据读取方法,其特征在于,所述方法还包括:
针对所述数据索引区中存储的多个位置索引信息,依次判断所述多个位置索引信息是否满足重写条件;
当判断到其中一个位置索引信息满足重写条件时,对所述其中一个位置索引信息进行重写操作;其中,所述重写操作表示将所述位置索引信息由指示数据存储在所述数据库组件重写为指示数据存储在所述缓存组件,或者由指示数据存储在所述缓存组件重写为指示数据存储在所述数据库组件。
6.根据权利要求5所述的数据读取方法,其特征在于,在所述依次判断所述多个位置索引信息是否满足重写条件之前,所述方法还包括:
根据所述数据库组件在上一时间周期的历史运行数据,计算数据库评分;
根据所述缓存组件在上一时间周期的历史运行数据,计算缓存评分;
根据所述第一查询线程在上一时间周期中的历史查询数据,确定所述多个位置索引信息各自的第一响应时间;其中,不同的位置索引信息对应不同的第一响应时间,所述第一响应时间用于指示从所述数据库组件中查询到对应的所述位置索引信息指示的数据所需的时间;
根据所述第二查询线程在上一时间周期中的历史查询数据,确定所述多个位置索引信息各自的第二响应时间;其中,不同的位置索引信息对应不同的第二响应时间,所述第二响应时间用于指示从所述缓存组件中查询到对应的所述位置索引信息指示的数据所需的时间;
根据所述数据库评分、所述缓存评分、所述多个位置索引信息各自的第一响应时间和所述多个位置索引信息各自的第二响应时间,执行所述依次判断所述多个位置索引信息是否满足重写条件的步骤。
7.根据权利要求6所述的数据读取方法,其特征在于,在所述其中一个位置索引信息指示数据存储在所述数据库组件的情况下,所述当判断到其中一个位置索引信息满足重写条件时,对所述其中一个位置索引信息进行重写操作,包括:
当判断到所述数据库评分小于所述缓存评分,且所述其中一个位置索引信息的第一响应时间大于预设业务阈值,且所述其中一个位置索引信息的第二响应时间小于所述预设业务阈值时,将所述其中一个位置索引信息由指示数据存储在所述数据库组件重写为指示数据存储在所述缓存组件。
8.根据权利要求6所述的数据读取方法,其特征在于,在所述其中一个位置索引信息指示数据存储在所述缓存组件的情况下,所述当判断到其中一个位置索引信息满足重写条件时,对所述其中一个位置索引信息进行重写操作,包括:
当判断到所述数据库评分大于所述缓存评分,且所述其中一个位置索引信息的第一响应时间小于预设业务阈值,且所述其中一个位置索引信息的第二响应时间大于所述预设业务阈值时,将所述其中一个位置索引信息由指示数据存储在所述缓存组件重写为指示数据存储在所述数据库组件。
9.一种数据读取装置,其特征在于,所述数据读取装置包括接收单元、启动单元、第一读取单元和第二读取单元,其中,
所述接收单元,配置为接收待查询数据的数据查询请求;
所述启动单元,配置为基于所述数据查询请求,并行启动第一查询线程和第二查询线程;其中,所述第一查询线程用于在数据库组件中查询所述待查询数据,所述第二查询线程用于在缓存组件中查询所述待查询数据;
所述第一读取单元,配置为当所述第一查询线程查询到所述待查询数据时,控制所述第一查询线程向所述第二查询线程发送第一停止信号,并从所述数据库组件中读取所述待查询数据;其中,所述第一停止信号用于停止所述第二查询线程;
所述第二读取单元,配置为当所述第二查询线程查询到所述待查询数据时,控制所述第二查询线程向所述第一查询线程发送第二停止信号,并从所述缓存组件中读取所述待查询数据;其中,所述第二停止信号用于停止所述第一查询线程。
10.一种数据读取装置,其特征在于所述数据读取装置包括存储器和处理器;其中,
所述存储器,用于存储能够在所述处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行如权利要求1至8任一项所述方法的步骤。
11.一种计算机存储介质,其特征在于,所述计算机存储介质存储有数据读取程序,所述数据读取程序被至少一个处理器执行时实现如权利要求1至8任一项所述方法的步骤。
12.一种数据读取***,其特征在于,所述数据读取***至少包括如权利要求9或10所述的数据读取装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110168311.9A CN114911822A (zh) | 2021-02-07 | 2021-02-07 | 一种数据读取方法、装置、计算机存储介质及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110168311.9A CN114911822A (zh) | 2021-02-07 | 2021-02-07 | 一种数据读取方法、装置、计算机存储介质及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114911822A true CN114911822A (zh) | 2022-08-16 |
Family
ID=82761177
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110168311.9A Pending CN114911822A (zh) | 2021-02-07 | 2021-02-07 | 一种数据读取方法、装置、计算机存储介质及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114911822A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117792960A (zh) * | 2024-02-23 | 2024-03-29 | 中国电子科技集团公司第三十研究所 | 一种基于国产多核处理器的历史流量统计方法及装置 |
-
2021
- 2021-02-07 CN CN202110168311.9A patent/CN114911822A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117792960A (zh) * | 2024-02-23 | 2024-03-29 | 中国电子科技集团公司第三十研究所 | 一种基于国产多核处理器的历史流量统计方法及装置 |
CN117792960B (zh) * | 2024-02-23 | 2024-04-30 | 中国电子科技集团公司第三十研究所 | 一种基于国产多核处理器的历史流量统计方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5305389A (en) | Predictive cache system | |
US9430388B2 (en) | Scheduler, multi-core processor system, and scheduling method | |
US20190340022A1 (en) | Thread State Monitoring in a System Having a Multi-Threaded, Self-Scheduling Processor | |
US20190339976A1 (en) | Thread Commencement Using a Work Descriptor Packet in a Self-Scheduling Processor | |
US20190340019A1 (en) | Thread Commencement and Completion Using Work Descriptor Packets in a System Having a Self-Scheduling Processor and a Hybrid Threading Fabric | |
US7577763B1 (en) | Managing read requests from multiple requestors | |
EP3504618A1 (en) | Associating working sets and threads | |
US20070204107A1 (en) | Cache memory background preprocessing | |
US20090307329A1 (en) | Adaptive file placement in a distributed file system | |
CN103345451B (zh) | 一种在多核处理器中缓冲数据的方法 | |
CN109446114B (zh) | 一种空间数据缓存方法、装置和存储介质 | |
CN105917319A (zh) | 存储器单元和方法 | |
US20200311026A1 (en) | File processing method and server | |
CN106959893A (zh) | 加速器、用于加速器的内存管理方法以及数据处理*** | |
US11579888B2 (en) | Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor | |
CN117195997B (zh) | 一种模型训练方法、装置、存储介质及电子设备 | |
US8954969B2 (en) | File system object node management | |
CN105376269B (zh) | 虚拟机存储***及其实现方法和装置 | |
CN100530141C (zh) | 用于互连网络上高效的有序储存的方法和装置 | |
CN113486037A (zh) | 更新缓存数据的方法、管理器和缓存服务器 | |
KR100678930B1 (ko) | 디지털 시그널 프로세서를 위한 실시간 제어 시스템 | |
US10872015B2 (en) | Data storage system with strategic contention avoidance | |
CN114911822A (zh) | 一种数据读取方法、装置、计算机存储介质及*** | |
CN101853218B (zh) | 用于磁盘阵列的读取方法和*** | |
US10846265B2 (en) | Method and apparatus for accessing file, and storage system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |