CN112650694B - 一种数据读取方法、装置、缓存代理服务器及存储介质 - Google Patents
一种数据读取方法、装置、缓存代理服务器及存储介质 Download PDFInfo
- Publication number
- CN112650694B CN112650694B CN201910970136.8A CN201910970136A CN112650694B CN 112650694 B CN112650694 B CN 112650694B CN 201910970136 A CN201910970136 A CN 201910970136A CN 112650694 B CN112650694 B CN 112650694B
- Authority
- CN
- China
- Prior art keywords
- data
- cache storage
- storage unit
- target data
- unit
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 81
- 230000004044 response Effects 0.000 claims abstract description 30
- 238000013523 data management Methods 0.000 claims description 4
- 230000003139 buffering effect Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 description 17
- 238000007726 management method Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 9
- 230000008030 elimination Effects 0.000 description 9
- 238000003379 elimination reaction Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 8
- 230000001960 triggered effect Effects 0.000 description 5
- 108010001267 Protein Subunits Proteins 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1464—Management of the backup or restore process for networked environments
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- 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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请提供了一种数据读取方法、装置、缓存代理服务器以及存储介质,应用于消息系统集群包括的多个缓存代理服务器中的任一缓存代理服务器,缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元,方法包括:接收数据写入单元发送的针对目标数据的数据写入请求;响应于数据写入请求,将目标数据缓存到块高速缓存存储单元中;按照先进先出策略对块高速缓存存储单元中缓存的数据进行管理;接收数据读取单元发送的针对目标数据的数据读取请求。本申请能有效的避免块高速缓存存储单元或者页面高速缓存存储单元被污染,从而提高了高速缓存存储单元命中率以及有效高速缓存存储单元的比率,进而提高数据读写性能。
Description
技术领域
本申请涉及数据处理领域,特别是涉及一种数据读取方法、装置、缓存代理服务器及存储介质。
背景技术
当今社会中存在各种应用系统,例如商业处理软件、社交软件、搜索浏览器等,像信息工厂一样不断产生大量数据。为了收集以及分析各种应用系统产生的大量数据,出现了各种各样的消息系统,例如,web消息系统、java消息系统、基于发布/订阅的消息系统(kafka系统)等。
其中,部分消息系统的读写性能较差。以kafka系统为例,在生产者(producer)发布消息或消费者(consumer)消费消息时,需要依赖于页面高速缓存存储器管理技术(即page cache管理技术),而现有技术中的pagecache管理技术的数据的读写性能较差,因此,如何进行高速缓存存储单元(cache)管理以提高读写性能,是需要解决的问题。
发明内容
本申请提供一种数据读取方法、装置、缓存代理服务器及存储介质,以解决上述提到的问题。
本申请第一方面提供一种数据读取方法,具体如下:
一种数据读取方法,应用于消息系统集群包括的多个缓存代理服务器中的任一缓存代理服务器,所述缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元,所述方法包括:
接收数据写入单元发送的针对目标数据的数据写入请求;
响应于所述数据写入请求,将所述目标数据缓存到所述块高速缓存存储单元中;
按照先进先出策略对所述块高速缓存存储单元中缓存的数据进行管理;接收数据读取单元发送的针对所述目标数据的数据读取请求;
响应于所述数据读取请求,查询所述块高速缓存存储单元中是否缓存有所述目标数据;
在所述块高速缓存存储单元中缓存有所述目标数据的情况下,从所述块高速缓存存储单元中读取所述目标数据;
在所述块高速缓存存储单元中未缓存所述目标数据的情况下,从所述页面高速缓存存储单元中或从所述缓存代理服务器的磁盘中读取所述目标数据;
将读取到的所述目标数据返回给所述数据读取单元。
进一步地,所述块高速缓存存储单元包括多个块高速缓存存储子单元,每个块高速缓存存储子单元用于缓存数据写入单元请求写入的数据,以及所缓存的数据的索引数据;
响应于所述数据读取请求,查询所述块高速缓存存储单元中是否缓存有所述目标数据,包括:
响应于所述数据读取请求,提取所述数据索引请求中携带的所述目标数据的偏移量;
根据所述目标数据的偏移量,查询所述多个块高速缓存存储子单元中是否缓存有所述目标数据的索引数据;
在所述块高速缓存存储单元中缓存有所述目标数据的情况下,从所述块高速缓存存储单元中读取所述目标数据,包括:
在所述多个块高速缓存存储子单元中缓存有所述目标数据的索引数据的情况下,读取所述目标数据的索引数据;
根据所述目标数据的索引数据,从所述多个块高速缓存存储子单元中确定缓存有所述目标数据的目标块高速缓存存储子单元;
从所述目标块高速缓存存储子单元中读取所述目标数据。
进一步地,响应于所述数据写入请求,将所述目标数据缓存到所述块高速缓存存储单元中,包括:
响应于所述数据写入请求,将所述多个块高速缓存存储子单元中的空块高速缓存存储子单元确定为所述目标块高速缓存存储子单元;
将所述目标数据缓存到所述目标块高速缓存存储子单元;
将所述目标块高速缓存存储子单元和所述目标数据之间的索引关系作为所述目标数据的索引数据,缓存到所述目标块高速缓存存储子单元。
进一步地,所述方法还包括:
针对所述多个块高速缓存存储子单元中的任一块高速缓存存储子单元,在该块高速缓存存储子单元被存满时,将该块高速缓存存储子单元添加到刷新队列中;
运行异步写线程,通过所述异步写线程将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据,异步写入到所述缓存代理服务器的磁盘中。
进一步地,将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据,异步写入到所述缓存代理服务器的磁盘中,包括:
将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据缓存到所述页面高速缓存存储单元中;
将所述页面高速缓存存储单元中缓存的数据写入所述缓存代理服务器的磁盘中。
进一步地,按照先进先出策略对所述块高速缓存存储单元中缓存的数据进行管理,还包括:
在多个块高速缓存存储子单元均被存满时,按照被存满的先后顺序,擦除所述多个块高速缓存存储子单元中最先被存满的块高速缓存存储子单元,得到空块高速缓存存储子单元;
接收所述数据写入单元发送的针对其他数据的数据写入请求;
响应于所述数据写入请求,将所述其他数据缓存到所述空块高速缓存存储子单元;
将所述空块高速缓存存储子单元和所述其他数据之间的索引关系作为所述其他数据的索引数据,缓存到所述空块高速缓存存储子单元。
进一步地,在所述块高速缓存存储单元中未缓存所述目标数据的情况下,从所述页面高速缓存存储单元中或从所述缓存代理服务器的磁盘中读取所述目标数据,包括:
在所述块高速缓存存储单元中未缓存所述目标数据的情况下,查询所述页面高速缓存存储单元中是否缓存有所述目标数据;
在所述页面高速缓存存储单元中缓存有所述目标数据的情况下,从所述页面高速缓存存储单元中读取所述目标数据;
在所述页面高速缓存存储单元中未缓存所述目标数据的情况下,从所述缓存代理服务器的磁盘中读取所述目标数据。
本申请第二方面提供一种数据读取装置,具体如下:
一种数据读取装置,应用于消息系统集群包括的多个缓存代理服务器中的任一缓存代理服务器,所述缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元,所述装置包括:
第一数据写入请求接收模块,用于接收数据写入单元发送的针对目标数据的数据写入请求;
目标数据缓存模块,用于响应于所述数据写入请求,将所述目标数据缓存到所述块高速缓存存储单元中;
目标数据管理模块,用于按照先进先出策略对所述块高速缓存存储单元中缓存的数据进行管理;
数据读取请求接收模块,用于接收数据读取单元发送的针对所述目标数据的数据读取请求;
目标数据查询模块,用于响应于所述数据读取请求,查询所述块高速缓存存储单元中是否缓存有所述目标数据;
第一读取模块,用于在所述块高速缓存存储单元中缓存有所述目标数据的情况下,从所述块高速缓存存储单元中读取所述目标数据;
第二读取模块,用于在所述块高速缓存存储单元中未缓存所述目标数据的情况下,从所述页面高速缓存存储单元中或从所述缓存代理服务器的磁盘中读取所述目标数据;
目标数据返回模块,用于将读取到的所述目标数据返回给所述数据读取单元。
本申请第三方面提供一种缓存代理服务器,具体如下:
一种缓存代理服务器,所述缓存代理服务器为消息系统集群包括的多个缓存代理服务器中的任一缓存代理服务器,所述缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元,所述缓存代理服务器还包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行一种数据读取方法。
本申请第四方面提供一种非临时性计算机可读存储介质,具体如下:
一种非临时性计算机可读存储介质,当所述存储介质中的指令由服务器的处理器执行时,使得服务器能够执行一种数据读取方法。
与现有技术相比,本申请包括以下优点:
本申请提出的数据读写方法,在数据读取过程中不会对块高速缓存存储单元或者页面高速缓存存储单元进行更新,以及在子节点在从主节点备份数据时,也不会触发块高速缓存存储单元或者页面高速缓存存储单元的更新;只有在数据写入过程中会触发块高速缓存存储单元以及页面高速缓存存储单元的更新。这样就能有效的避免块高速缓存存储单元或者页面高速缓存存储单元被污染,从而提高了页面高速缓存存储单元和块高速缓存存储单元的高速缓存存储单元命中率以及有效高速缓存存储单元的比率,进而提高数据读写性能。
本申请对块高速缓存存储单元使用了先进先出的淘汰策略,在块高速缓存存储单元中只保留最新写入的数据,而最新写入的数据一般是数据读取单元所需要读取的,因而数据读取单元在读取数据时,可以直接从块高速缓存存储单元中读取,不再需要访问磁盘,使得高速缓存存储单元命中率和有效高速缓存存储单元的比率极高,因而可以显著提高读写性能。
附图说明
图1是kafka架构的结构示意图;
图2是kafka运行备份机制的示意图;
图3是本申请提出的cache管理方式的示意图;
图4是本申请一实施例示出的一种数据写入方法的流程图;
图5是本申请一实施例示出的一种数据读取方法的流程图;
图6是本申请一实施例示出的一种数据读取装置的结构示意图;
图7是本申请一实施例示出的一种broker服务器的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
相关技术中,消息系统集群(kafka)依赖于页面高速缓存存储单元(pagecache)技术实现数据读取的过程如下:
数据读取单元(kafka消息的消费者consumer)在发出数据读取请求后,缓存代理服务器(即broker服务器)需要先确定数据读取单元需要读取的目标数据是否缓存于各个页面高速缓存存储子单元(page cache块)中;如果数据读取单元需要读取的目标数据缓存于某个页面高速缓存存储子单元中,则从该页面高速缓存存储子单元中读取目标数据,并将该目标数据返回给数据读取单元;如果整个高速缓存存储单元包括的各个页面高速缓存存储子单元中均未缓存数据读取单元需要读取的目标数据,则需要在整个高速缓存存储单元中增加新的页面高速缓存存储子单元,并将从磁盘中取出相应的目标数据填充至该新的页面高速缓存存储子单元中,最后将该新的页面高速缓存存储子单元中缓存的目标数据返回至数据读取单元。
kafka依赖于页面高速缓存存储单元技术实现数据写入的过程如下:
数据写入单元(kafka消息的生产者producer)需要将目标数据写入磁盘中时,先需要将目标数据写入页面高速缓存存储子单元中,再将页面高速缓存存储子单元中的目标数据写入磁盘中。
然而,在某些情况下进行的数据读写会导致页面高速缓存存储单元污染(即,某些页面高速缓存存储子单元中缓存的数据在未来很长一段时间不太可能被读取,但这些页面高速缓存存储子单元却在整个高速缓存存储单元中长时间保留),以下列举两种页面高速缓存存储单元被污染的情况:
第一,在数据读取过程中,当数据读取单元由于消费能力不够,导致大的间隔或者延时(即数据读取单元未来得及读取的数据)产生时,会从磁盘读取历史数据,导致将磁盘中的历史数据填充至页面高速缓存存储子单元中,造成了页面高速缓存存储单元被污染的情况发生。
第二,为了允许多个缓存代理服务器组成的kafka集群中,某个缓存代理服务器挂掉后而不影响整个kafka集群工作,在kafka集群中设置了备份机制,参考图2,图2是kafka运行备份机制的示意图。备份单元是节点(节点partition包括多个文件夹segment file),每个节点均包括主节点(leader partition)和子节点(follower partiton)。其中主节点是用来进行和数据写入单元进行写交互以及与数据读取单元进行读交互,子节点从主节点中拉取数据进行同步和备份。当子节点从主节点拉取数据进行同步和备份时,子节点所拉取的数据也会占用页面高速缓存存储子单元,进而造成了页面高速缓存存储单元被污染的情况发生。
正是上述页面高速缓存存储单元被污染的情况,导致整个高速缓存存储单元的高速缓存存储单元命中率和有效高速缓存存储单元的比率降低,从而导致了kafka集群整体的读写性能下降。由数据读取过程和数据写入过程可知,无论是读取目标数据还是写入目标数据,所有的目标数据都会经过页面高速缓存存储单元,进而触发页面高速缓存存储单元更新。
为此,本申请实施例提出了一种新的高速缓存存储单元管理方式,将整个高速缓存存储单元划分为两部分:第一部分高速缓存存储单元为页面高速缓存存储单元(pagecache),第二部分高速缓存存储单元为块高速缓存存储单元(block cache)。本申请实施例提出的此种新的高速缓存存储单元管理方式可以对kafka集群包括的多个缓存代理服务器中的任一缓存代理服务器的高速缓存存储单元进行管理。
具体地,对第一部分高速缓存存储单元沿用相关技术中的page cache技术,采用页面级别做高速缓存存储单元,以页面(page)为单位进行管理,第一部分高速缓存存储单元包括多个页面高速缓存存储子单元;对第二部分高速缓存存储单元采用块级别做高速缓存存储单元,即,对第二部分高速缓存存储单元以块(block)为单位进行管理,第二部分包括多个块高速缓存存储子单元(block cache块)。示例地,一个块高速缓存存储子单元的存储空间是32MB,映射了一个文件夹(即一块32MB的数据)。
在一种可能的实施方式中,为了防止GC(垃圾回收)对读写性能的影响,本申请中的块高速缓存存储单元采用的是非堆内存(又称对外内存)。
本申请实施例考虑到文件数目比较多,占用的内存空间较大,提出针对第二部分高速缓存存储单元采用块级别做高速缓存存储单元,相比于相关技术中采用页面级别做高速缓存存储单元,可以节省节点的ID带来的内存空间开销。
参考图3,图3是本申请提出的高速缓存存储单元管理方式的示意图。如图3所示,本申请实施例中缓存代理服务器的整个高速缓存存储单元包括两部分:块高速缓存存储单元和页面高速缓存存储单元。其中,块高速缓存存储单元包括多个块高速缓存存储子单元,每个块高速缓存存储子单元用于缓存数据写入单元请求写入的数据,以及该块高速缓存存储子单元所缓存的数据的索引数据。
为了能够从块高速缓存存储单元中查询到需要读取的目标数据,本申请实施例的块高速缓存存储单元中的每个块高速缓存存储子单元分为数据块高速缓存存储子单元(data block)和索引块高速缓存存储子单元(indexblock),通过读取索引块高速缓存存储子单元查询对应的数据块高速缓存存储子单元,再从该数据块高速缓存存储子单元中读取目标数据。
其中,针对每个块高速缓存存储子单元,缓存数据写入单元请求写入的数据的存储的区域称为数据块高速缓存存储子单元;缓存该块高速缓存存储子单元所缓存的数据的索引数据的存储区域称为索引块高速缓存存储子单元。例如,针对需要写入的目标数据d1,目标数据d1的数据内容存储在数据块高速缓存存储子单元中,而目标数据d1的索引数据存储在索引块高速缓存存储子单元中。
针对采用本申请实施例提供的新的高速缓存存储单元管理方式进行高速缓存存储子单元管理的缓存代理服务器,本申请实施例还提出了相应的数据读写方法,本申请实施例提出的数据读写方法主要依赖于块高速缓存存储单元,降低了对页面高速缓存存储单元的依赖性,即使发生页面高速缓存存储单元污染,也不会导致整个高速缓存存储单元的高速缓存存储单元命中率和有效高速缓存存储单元的比率降低,避免了因页面高速缓存存储单元污染而导致缓存代理服务器所在的kafka集群整体的读写性能下降。
下面将对本申请实施例提出的数据写入方法进行说明。该数据写入方法应用于消息系统集群包括的多个缓存代理服务器中的任一缓存代理服务器,所述缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元。
参考图4,图4是本申请一实施例示出的一种数据写入方法的流程图。如图4所示,该数据写入方法包括以下步骤:
步骤S401,接收数据写入客户端单元发送的针对所述目标数据的数据写入请求。
步骤S402,响应于所述数据写入请求,将所述目标数据缓存到所述块高速缓存存储单元中。
步骤S403,按照先进先出的策略对所述块高速缓存存储单元中缓存的数据进行管理。
不同于相关技术中缓存代理服务器将数据写入单元的目标数据写入页面高速缓存存储单元,在本申请实施例中,缓存代理服务器将数据写入单元需要写入的目标数据存储至块高速缓存存储单元,可以减少数据写入过程对页面高速缓存存储单元的依赖性。
在本申请提供的另一实施例中,步骤S402具体包括以下子步骤:
子步骤S4021,响应于所述数据写入请求,将所述多个块高速缓存存储子单元中的空块高速缓存存储子单元确定为所述目标块高速缓存存储子单元。
子步骤S4022,将所述目标数据缓存到所述目标块高速缓存存储子单元。
子步骤S4023,将所述目标块高速缓存存储子单元和所述目标数据之间的索引关系作为所述目标数据的索引数据,缓存到所述目标块高速缓存存储子单元。
子步骤S4024,向所述数据写入单元发送数据写入响应,所述数据写入响应表征所述目标数据被成功写入。
子步骤S4025,针对所述多个块高速缓存存储子单元中的任一块高速缓存存储子单元,在该块高速缓存存储子单元被存满时,将该块高速缓存存储子单元添加到刷新队列中;
子步骤S4026,运行异步写线程,通过所述异步写线程将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据,异步写入到所述缓存代理服务器的磁盘中。
在一种可能的实施方式中,步骤S4026包括以下步骤:
将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据缓存到所述页面高速缓存存储单元中;
将所述页面高速缓存存储单元中缓存的数据写入所述缓存代理服务器的磁盘中。
基于上述的数据写入方法,本申请实施例还提出了对块高速缓存存储单元的管理方法和对页面高速缓存存储单元的更新策略。其中,对块高速缓存存储单元的管理方法包括:通过刷新队列(flush quene)和页面高速缓存存储单元将被写满的块高速缓存存储子单元中的数据异步写入缓存代理服务器的磁盘中。具体地,针对块高速缓存存储单元被写满的块高速缓存存储子单元,将该块高速缓存存储子单元添加到刷新队列中,然后定期运行异步写线程,通过异步写线程,定期将位于刷新队列中的块高速缓存存储子单元所缓存的数据,经由页面高速缓存存储单元写入缓存代理服务器的磁盘中。
其中,将位于刷新队列中的块高速缓存存储子单元所缓存的数据,经由页面高速缓存存储单元写入缓存代理服务器的磁盘中包括:首先将位于刷新队列中的块高速缓存存储子单元所缓存的数据缓存到页面高速缓存存储单元中的页面高速缓存存储子单元,然后将该页面高速缓存存储子单元所缓存的数据写入到缓存代理服务器的磁盘中。
示例地,上述DB3的缓存空间全部用完,则将DB3添加到刷新队列中。然后,将刷新队列中的DB3所缓存的数据缓存到所述页面高速缓存存储子单元中,最后将页面高速缓存存储子单元中缓存的数据写入缓存代理服务器的磁盘中。
不同于相关技术中数据读取和数据写入都会触发页面高速缓存存储单元更新,本申请实施例提出的对页面高速缓存存储单元的更新方法策略是:只有将位于刷新队列中的块高速缓存存储子单元所缓存的数据缓存到页面高速缓存存储单元中,会触发页面高速缓存存储单元的更新(即,写入页面高速缓存存储单元的数据仅来源于位于刷新队列中的块高速缓存存储子单元)。其他情况下均不会触发页面高速缓存存储单元的更新,避免了页面高速缓存存储单元被污染的情况发生。
采用本申请实施例提出的对块高速缓存存储单元的管理方法,在将刷新队列中缓存有目标数据的块高速缓存存储子单元写入磁盘之前,还需要经过页面高速缓存存储单元。因而,在将刷新队列中的块高速缓存存储子单元的数据写入磁盘之前,先将其写入页面高速缓存存储单元中,本申请实施例中的页面高速缓存存储单元中的数据来源于刷新队列中块高速缓存存储子单元的数据,而刷新队列中块高速缓存存储子单元的数据被依次送入页面高速缓存存储单元中,使得页面高速缓存存储单元中缓存的数据是最新写入的数据,而最新写入的数据一般是数据读取单元所需要读取的,因而数据读取单元在读取数据时,在从块高速缓存存储单元中未读取到的情况下,可以直接从页面高速缓存存储单元中读取,不再需要访问磁盘,使得高速缓存存储单元命中率和有效高速缓存存储单元的比率极高,因而可以显著提高读写性能。
在本申请提供的另一实施例中,步骤S403具体包括以下子步骤:
子步骤S4031,在多个块高速缓存存储子单元均被存满时,按照被存满的先后顺序,擦除所述多个块高速缓存存储子单元中最先被存满的块高速缓存存储子单元,得到空块高速缓存存储子单元;
子步骤S4032,接收所述数据写入单元发送的针对其他数据的数据写入请求;
子步骤S4033,响应于所述数据写入请求,将所述其他数据缓存到所述空块高速缓存存储子单元;
子步骤S4034,将所述空块高速缓存存储子单元和所述其他数据之间的索引关系作为所述其他数据的索引数据,缓存到所述空块高速缓存存储子单元。
为了便于更好地理解本申请实施例提出的数据写入方法,下面以一个具体示例为例,说明本申请实施例提出的数据写入方法:
第一步:缓存代理服务器接收数据写入单元发送的针对目标数据(记该目标数据为目标数据d1)的数据写入请求;
第二步:缓存代理服务器响应于数据写入请求,将所述目标数据缓存到块高速缓存存储单元中。
具体地,响应于所述数据写入请求,将所述多个块高速缓存存储子单元中的空块高速缓存存储子单元确定为所述目标块高速缓存存储子单元,即将多个块高速缓存存储子单元中的空块高速缓存存储子单元确定为目标块高速缓存存储子单元(记该目标块高速缓存存储子单元为DB3);
将所述目标数据缓存到所述目标块高速缓存存储子单元,即缓存代理服务器将目标数据d1缓存到DB3;
将所述目标块高速缓存存储子单元和所述目标数据之间的索引关系作为所述目标数据的索引数据,缓存到所述目标块高速缓存存储子单元;即缓存代理服务器将DB3和目标数据d1之间的索引关系作为目标数据d1的索引数据,缓存到DB3中;
在本申请实施例中,缓存代理服务器在将数据写入单元请求写入的目标数据写入块高速缓存存储单元中后,即可向该数据写入单元发送数据写入响应,以通知该数据写入单元目标数据已成功写入。
示例地,在缓存代理服务器将DB3和目标数据d1之间的索引关系作为目标数据d1的索引数据,缓存到DB3中后,向数据写入单元发送数据写入响应,以通知数据写入单元目标数据d1已被成功写入。
第三步:按照先进先出的策略对所述块高速缓存存储单元中缓存的数据进行管理。
在多个块高速缓存存储子单元均被存满时,按照被存满的先后顺序,擦除所述多个块高速缓存存储子单元中最先被存满的块高速缓存存储子单元,得到空块高速缓存存储子单元;
接收所述数据写入单元发送的针对其他数据的数据写入请求;
响应于所述数据写入请求,将所述其他数据缓存到所述空块高速缓存存储子单元;
将所述块高速缓存存储子单元和所述其他数据之间的索引关系作为所述其他数据的索引数据,缓存到所述空块高速缓存存储子单元。
基于上述的数据写入方法,本申请实施例还提出了对块高速缓存存储单元的淘汰策略。不同于相关技术中对页面高速缓存存储单元采用的最近最少使用(LRU,leastrecently used,)的淘汰策略,本申请实施例中对块高速缓存存储单元采用的淘汰策略是先进先出(FIFO,first input first output)。
相关技术中对页面高速缓存存储单元采用最近最少使用的淘汰策略,其核心思想是:如果某个数据最近被访问过,那么将来被访问的几率也很高。在实际使用时会存在以下问题:当某个数据读取单元需要读取的是比较老的历史数据,而这些老的历史数据并不存在于页面高速缓存存储单元中,则缓存代理服务器需要从磁盘中读取,并将读取到的这些比较老的历史数据缓存到页面高速缓存存储单元中,以使该数据读取单元从页面高速缓存存储单元中读取比较老的历史数据。由于最近最少使用的淘汰策略,导致了这些比较老的历史数据一直停留在页面高速缓存存储单元中,造成了页面高速缓存存储单元被污染的情况发生,从而降低了高速缓存存储单元命中率以及有效高速缓存存储单元的比率。
为提高高速缓存存储单元命中率以及有效高速缓存存储单元的比率,本申请实施例提出对块高速缓存存储单元采用先进先出的淘汰策略,即当块高速缓存存储单元中所有的块高速缓存存储子单元均被存满时,按照被存满的先后顺序,擦除最先被存满的块高速缓存存储子单元,得到空块高速缓存存储子单元,然后再利用空块高速缓存存储子单元缓存数据写入单元请求写入的数据。
示例地,DB1、DB2、DB3的缓存空间都被存满,并且,DB1、DB2、DB3是按照先后顺序依次被存满的,则按照先进先出的淘汰策略,缓存代理服务器将DB1中缓存的数据擦除,得到空的DB1。缓存代理服务器接收数据写入单元发送的针对其他数据(记为目标数据d2)的数据写入请求,缓存代理服务器响应于该数据写入请求,将目标数据d2缓存到空的DB1中,并将空的DB1和目标数据d2之间的索引关系作为目标数据d2的索引数据,缓存到空的DB1中。
对本申请实施例中的块高速缓存存储单元采用先进先出的淘汰策略,保证块高速缓存存储单元中缓存的数据全部都是最新写入的数据,而最新写入的数据一般是数据读取单元所需要读取的,因而数据读取单元在读取数据时,可以直接从块高速缓存存储单元中读取,不再需要访问磁盘,使得高速缓存存储单元命中率和有效高速缓存存储单元的比率极高,因而可以显著提高读写性能。
采用本申请实施例提出的数据写入方法,将数据写入单元需要写入的目标数据存储至块高速缓存存储单元,使得块高速缓存存储单元中缓存的数据是最新写入的数据,而最新写入的数据一般是数据读取单元所需要读取的,因而数据读取单元在读取数据时,可以直接从块高速缓存存储单元中读取,不再需要访问磁盘,使得高速缓存存储单元命中率和有效高速缓存存储单元的比率极高,因而可以显著提高读写性能。
结合以上各个实施例可知,本申请实施例中,只有在数据写入过程中会更新页面高速缓存存储单元,从而避免了页面高速缓存存储单元被污染的情况发生,同时对块高速缓存存储单元按照先进先出的淘汰策略进行淘汰,因此,块高速缓存存储单元中的数据是最新写入的数据,因而数据读取单元在读取数据时,可以直接从块高速缓存存储单元中读取,不再需要访问磁盘,使得高速缓存存储单元命中率和有效高速缓存存储单元的比率极高,因而可以显著提高读写性能。
在上述本申请实施例提出的数据写入方法的基础上,本申请实施例还提出了相应的数据读取方法。下面将对本申请实施例提出的数据读取方法进行说明。该数据读取方法应用于kafka集群包括的多个缓存代理服务器中的任一缓存代理服务器,该缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元。
参考图5,图5是本申请一实施例示出的一种数据读取方法的流程图。其中,所述块高速缓存存储单元包括多个块高速缓存存储子单元,每个块高速缓存存储子单元用于缓存数据写入客户端单元请求写入的数据,以及所缓存的数据的索引数据。如图5所示,该数据读取方法包括以下步骤:
步骤S501,接收数据读取单元发送的针对目标数据的数据读取请求;
步骤S502,响应于所述数据读取请求,查询所述块高速缓存存储单元中是否缓存有所述目标数据;
步骤S503,在所述块高速缓存存储单元中缓存有所述目标数据的情况下,从所述块高速缓存存储单元中读取所述目标数据;
步骤S504,在所述块高速缓存存储单元中未缓存所述目标数据的情况下,从所述页面高速缓存存储单元中或从所述缓存代理服务器的磁盘中读取所述目标数据;
步骤S505,将读取到的目标数据返回给所述数据读取单元。
在本申请提供的另一实施例中,步骤S502包括以下子步骤:
子步骤S5021,响应于所述数据读取请求,提取所述数据索引请求中携带的所述目标数据的偏移量;
子步骤S5022,根据所述目标数据的偏移量,查询所述多个块高速缓存存储子单元中是否缓存有所述目标数据的索引数据
相应地,步骤S503包括以下子步骤:
子步骤S5031,在所述多个块高速缓存存储子单元中缓存有所述目标数据的索引数据的情况下,读取所述目标数据的索引数据;
子步骤S5032,根据所述目标数据的索引数据,从所述多个块高速缓存存储子单元中确定缓存有所述目标数据的目标块高速缓存存储子单元;
子步骤S5033,从所述目标块高速缓存存储子单元中读取所述目标数据。
在本申请实施例中,数据读取单元发送的数据读取请求会携带目标数据的偏移量,根据目标数据的偏移量确定目标数据的索引数据所在的索引块高速缓存存储子单元。在确定了索引块高速缓存存储子单元之后,就能够根据索引块高速缓存存储子单元中存储的数据块高速缓存存储子单元的位置找到目标数据所在的数据块高速缓存存储子单元,缓存代理服务器将块高速缓存存储子单元读取的目标数据的具体内容并返回至数据读取单元。
在本申请提供的另一实施例中,步骤S504包括以下子步骤:
子步骤S5041,在所述块高速缓存存储单元中未缓存所述目标数据的情况下,查询所述页面高速缓存存储单元中是否缓存有所述目标数据;
子步骤S5042,在所述页面高速缓存存储单元中缓存有所述目标数据的情况下,从所述页面高速缓存存储单元中读取所述目标数据;
子步骤S5043,在所述页面高速缓存存储单元中未缓存所述目标数据的情况下,从所述缓存代理服务器的磁盘中读取所述目标数据。
不同于相关技术中,在页面高速缓存存储单元中缓存有数据读取单元请求读取的目标数据时,缓存代理服务器从页面高速缓存存储单元中读取该目标数据,以及,在页面高速缓存存储单元中未缓存数据读取单元请求读取的目标数据时,缓存代理服务器从磁盘中读取目标数据并缓存到页面高速缓存存储单元中,再将页面高速缓存存储单元缓存的目标数据返回给数据读取单元。
在本申请实施例中,在采用了本申请实施例提供的数据写入方法后,缓存代理服务器在接收到数据读取单元发送的针对目标数据的数据读取请求后,首先查询块高速缓存存储单元中是否缓存有该目标数据(而不是如相关技术中首先查询页面高速缓存存储单元中是否缓存有该目标数据),并在块高速缓存存储单元中缓存有该目标数据时,直接从块高速缓存存储单元中读取该目标数据,可以减少数据读取过程对页面高速缓存存储单元的依赖性。
为了便于更好地理解本申请实施例提出的数据读取方法,下面以一个具体示例为例,说明本申请实施例提出的数据读取方法:
第一步:缓存代理服务器接收数据写入单元发送的针对目标数据(记该目标数据为目标数据d1)的数据写入请求;
第二步:缓存代理服务器响应该数据读取请求,在块高速缓存存储单元中查询目标数据d1;
第三步:如果在块高速缓存存储单元缓存有目标数据d1,则缓存代理服务器就从块高速缓存存储单元中获取缓存的目标数据d1;
第四步:如果在块高速缓存存储单元没有查询到目标数据d1,则说明块高速缓存存储子单元没有缓存目标数据d1,此时,缓存代理服务器为了满足数据读取单元对于目标数据d1的读取需求,则查询页面高速缓存存储单元中是否缓存有目标数据d1;
第五步:在页面高速缓存存储单元中缓存有目标数据d1的情况下,从页面高速缓存存储单元中读取目标数据d1;
第六步:在页面高速缓存存储单元中未缓存目标数据d1的情况下,从缓存代理服务器的磁盘中读取目标数据d1;
第七步:将第五步或者第六步中获取的目标数据d1返回至数据读取单元。
本申请实施例提出的数据读取方法,数据读取单元请求读取的目标数据直接来源于块高速缓存存储单元、页面高速缓存存储单元和磁盘,相比于相关技术中的数据读取方法而言,具有以下区别:
第一,本申请实施例中的数据读取不再依赖于页面高速缓存存储单元,缓存代理服务器在接收了数据读取单元的数据读取请求之后,先在块高速缓存存储单元中查找目标数据,如果块高速缓存存储单元中有相应的目标数据,则直接从块高速缓存存储单元中返回目标数据给数据读取单元,而不再经由页面高速缓存存储单元将目标数据转发给数据读取单元,如此,页面高速缓存存储单元中的数据则不会受到数据读取过程的影响,不会被污染,使得高速缓存存储单元命中率和有效高速缓存存储单元的比率极高,因而可以显著提高读写性能。
第二,本申请实施例中缓存代理服务器在块高速缓存存储单元中查询目标数据,如果块高速缓存存储单元中不存在目标数据,则在页面高速缓存存储单元中查询目标数据,如果在页面高速缓存存储单元中查询到目标数据,则将目标数据从页面高速缓存存储单元直接返回至数据读取单元。
第三,本实施中缓存代理服务器在页面高速缓存存储单元中未查询到目标数据后,则需要在磁盘中查询目标数据,如果查询到目标数据,则直接从磁盘将目标数据返回至数据读取单元,而不再通过页面高速缓存存储单元将目标数据转发给数据读取单元。本申请实施例考虑到从磁盘中读取的数据一般都为历史数据,因而在块高速缓存存储单元中未缓存数据读取单元请求读取的目标数据的情况下,缓存代理服务器从磁盘中读取该目标数据并不需要经由页面高速缓存存储单元返回给数据读取单元,而是直接返回给数据读取单元,因而本申请实施例提供的数据读取方法不会更新页面高速缓存存储单元,避免了从磁盘中读取历史数据而造成页面高速缓存存储单元被污染的情况发生,使得高速缓存存储单元命中率和有效高速缓存存储单元的比率极高,因而可以显著提高读写性能。
以上对本申请实施例提供的高速缓存存储单元管理方式和相应的数据读写方法进行了说明。本申请实施例提供的数据读取方法相比于相关技术中的数据读取方法而言,具备如下优点:
(1)在高速缓存存储单元的更新策略上,相关技术中是读触发和写触发,即数据读取单元在数据读写过程中均会导致页面高速缓存存储单元的更新,以及子节点在从主节点备份数据时也会触发页面高速缓存存储单元的更新,因而导致页面高速缓存存储单元被污染,降低了高速缓存存储单元命中率和有效高速缓存存储单元的比率极高,因而降低了读写性能。而采用本申请实施例提出的数据读写方法,在数据读取过程中不会对块高速缓存存储单元或者页面高速缓存存储单元进行更新,以及在子节点在从主节点备份数据时,也不会触发块高速缓存存储单元或者页面高速缓存存储单元的更新;只有在数据写入过程中会触发块高速缓存存储单元以及页面高速缓存存储单元的更新。这样就能有效的避免块高速缓存存储单元或者页面高速缓存存储单元被污染,从而提高了页面高速缓存存储单元和块高速缓存存储单元的高速缓存存储单元命中率以及有效高速缓存存储单元的比率,进而提高数据读写性能。
(2)相关技术中对页面高速缓存存储单元采用了最近最少使用的淘汰策略,页面高速缓存存储单元中缓存的是比较老的历史数据,通常情况下,这些比较老的历史数据是不会被经常访问的,因而导致了高速缓存存储单元命中率以及有效高速缓存存储单元的比率,降低了数据读写性能。而本申请实施例对块高速缓存存储单元使用了先进先出的淘汰策略,在块高速缓存存储单元中只保留最新写入的数据,而最新写入的数据一般是数据读取单元所需要读取的,因而数据读取单元在读取数据时,可以直接从块高速缓存存储单元中读取,不再需要访问磁盘,使得高速缓存存储单元命中率和有效高速缓存存储单元的比率极高,因而可以显著提高读写性能。
基于同一发明构思,本申请实施例还提供一种数据读取装置。本实施例提供一种数据读取装置,应用于消息系统集群包括的多个缓存代理服务器中的任一缓存代理服务器,所述缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元,在数据读取过程中,如图6所示,图6是本申请一实施例示出的一种数据读取装置的结构示意图,所述装置包括:
第一数据写入请求接收模块601,用于接收数据写入单元发送的针对目标数据的数据写入请求;
目标数据缓存模块602,用于响应于所述数据写入请求,将所述目标数据缓存到所述块高速缓存存储单元中;
目标数据管理模块603,用于按照先进先出策略对所述块高速缓存存储单元中缓存的数据进行管理;
数据读取请求接收模块604,用于接收数据读取单元发送的针对目标数据的数据读取请求;
目标数据查询模块605,用于响应于所述数据读取请求,查询所述块高速缓存存储单元中是否缓存有所述目标数据;
第一读取模块606,用于在所述块高速缓存存储单元中缓存有所述目标数据的情况下,从所述块高速缓存存储单元中读取所述目标数据;
第二读取模块607,用于在所述块高速缓存存储单元中未缓存所述目标数据的情况下,从所述页面高速缓存存储单元中或从所述缓存代理服务器的磁盘中读取所述目标数据;
目标数据返回模块608,用于将读取到的目标数据返回给所述数据读取单元。
其中,所述块高速缓存存储单元包括多个块高速缓存存储子单元,每个块高速缓存存储子单元用于缓存数据写入单元请求写入的数据,以及所缓存的数据的索引数据。
所述目标数据查询模块605包括:
提取子模块,用于响应于所述数据读取请求,提取所述数据索引请求中携带的所述目标数据的偏移量;
索引数据查询子模块,用于根据所述目标数据的偏移量,查询所述多个块高速缓存存储子单元中是否缓存有所述目标数据的索引数据;
所述第一读取模块606包括:
索引数据读取子模块,用于在所述多个块高速缓存存储子单元中缓存有所述目标数据的索引数据的情况下,读取所述目标数据的索引数据;
第一确定子模块,用于根据所述目标数据的索引数据,从所述多个块高速缓存存储子单元中确定缓存有所述目标数据的目标块高速缓存存储子单元;
目标数据读取子模块,用于从所述目标块高速缓存存储子单元中读取所述目标数据。
所述第二读取模块607包括:
页面高速缓存存储单元查询子模块,用于在所述块高速缓存存储单元中未缓存所述目标数据的情况下,查询所述页面高速缓存存储单元中是否缓存有所述目标数据;
页面高速缓存存储单元读取子模块,用于在所述页面高速缓存存储单元中缓存有所述目标数据的情况下,从所述页面高速缓存存储单元中读取所述目标数据;
磁盘读取子模块,用于在所述页面高速缓存存储单元中未缓存所述目标数据的情况下,从所述缓存代理服务器的磁盘中读取所述目标数据。
在数据写入过程中,所述目标数据缓存模块602还包括:
第二确定子模块,用于响应于所述数据写入请求,将所述多个块高速缓存存储子单元中的空块高速缓存存储子单元确定为所述目标块高速缓存存储子单元;
目标数据缓存子模块,用于将所述目标数据缓存到所述目标块高速缓存存储子单元;
索引数据缓存子模块,用于将所述目标块高速缓存存储子单元和所述目标数据之间的索引关系作为所述目标数据的索引数据,缓存到所述目标块高速缓存存储子单元。
在本申请提供的另一实施例中,所述装置还包括:
刷新队列添加模块,用于针对所述多个块高速缓存存储子单元中的任一块高速缓存存储子单元,在该块高速缓存存储子单元被存满时,将该块高速缓存存储子单元添加到刷新队列中;
异步写线程运行模块,用于运行异步写线程,通过所述异步写线程将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据,异步写入到所述缓存代理服务器的磁盘中。
其中,所述异步写线程运行模块包括:
页面高速缓存存储单元缓存子模块,用于将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据缓存到所述页面高速缓存存储单元中;
磁盘写入子模块,用于将所述页面高速缓存存储单元中缓存的数据写入所述缓存代理服务器的磁盘中。
所述目标数据管理模块603还包括:
擦除子模块,用于在多个块高速缓存存储子单元均被存满时,按照被存满的先后顺序,擦除所述多个块高速缓存存储子单元中最先被存满的块高速缓存存储子单元,得到空块高速缓存存储子单元;
第二数据写入请求接收子模块,用于接收所述数据写入单元发送的针对其他数据的数据写入请求;
空块高速缓存存储子单元数据缓存子模块,用于响应于所述数据写入请求,将所述其他数据缓存到所述空块高速缓存存储子单元;
空块高速缓存存储子单元索引数据缓存子模块,用于将所述空块高速缓存存储子单元和所述其他数据之间的索引关系作为所述其他数据的索引数据,缓存到所述空块高速缓存存储子单元。
如图7所示,图7是本申请一实施例示出的一种缓存代理服务器的结构示意图,一种缓存代理服务器,所述缓存代理服务器为kafka集群包括的多个缓存代理服务器中的任一缓存代理服务器,所述缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元,所述缓存代理服务器还包括:
处理器701;
用于存储所述处理器701可执行指令的存储器702;其中,所述处理器701被配置为执行上述任一实施例所提供的一种数据读取方法。
存储器702与处理器701之间通过总线通信连接;存储器702中存储有计算机程序,该计算机程序可在处理器701上运行,进而实现本申请上述任一实施例所述的方法中的步骤。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由服务器的处理器执行时,使得服务器能够执行上述任一实施例所提供的一种数据读取方法。
对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上对本申请所提供的一种数据读取方法、装置、缓存代理服务器及存储介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种数据读取方法,其特征在于,应用于消息系统集群包括的多个缓存代理服务器中的任一缓存代理服务器,所述缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元,所述块高速缓存存储单元采用块级别做高速缓存存储单元,所述方法包括:
接收数据写入单元发送的针对目标数据的数据写入请求;
响应于所述数据写入请求,将所述目标数据缓存到所述块高速缓存存储单元中;
按照先进先出策略对所述块高速缓存存储单元中缓存的数据进行管理;
接收数据读取单元发送的针对所述目标数据的数据读取请求;
响应于所述数据读取请求,查询所述块高速缓存存储单元中是否缓存有所述目标数据;
在所述块高速缓存存储单元中缓存有所述目标数据的情况下,从所述块高速缓存存储单元中读取所述目标数据;
在所述块高速缓存存储单元中未缓存所述目标数据的情况下,从所述页面高速缓存存储单元中或从所述缓存代理服务器的磁盘中读取所述目标数据;
将读取到的所述目标数据返回给所述数据读取单元。
2.根据权利要求1所述的方法,其特征在于,所述块高速缓存存储单元包括多个块高速缓存存储子单元,每个块高速缓存存储子单元用于缓存数据写入单元请求写入的数据,以及所缓存的数据的索引数据;
响应于所述数据读取请求,查询所述块高速缓存存储单元中是否缓存有所述目标数据,包括:
响应于所述数据读取请求,提取所述数据读取请求中携带的所述目标数据的偏移量;
根据所述目标数据的偏移量,查询所述多个块高速缓存存储子单元中是否缓存有所述目标数据的索引数据;
在所述块高速缓存存储单元中缓存有所述目标数据的情况下,从所述块高速缓存存储单元中读取所述目标数据,包括:
在所述多个块高速缓存存储子单元中缓存有所述目标数据的索引数据的情况下,读取所述目标数据的索引数据;
根据所述目标数据的索引数据,从所述多个块高速缓存存储子单元中确定缓存有所述目标数据的目标块高速缓存存储子单元;
从所述目标块高速缓存存储子单元中读取所述目标数据。
3.根据权利要求2所述的方法,其特征在于,响应于所述数据写入请求,将所述目标数据缓存到所述块高速缓存存储单元中,包括:
响应于所述数据写入请求,将所述多个块高速缓存存储子单元中的空块高速缓存存储子单元确定为所述目标块高速缓存存储子单元;
将所述目标数据缓存到所述目标块高速缓存存储子单元;
将所述目标块高速缓存存储子单元和所述目标数据之间的索引关系作为所述目标数据的索引数据,缓存到所述目标块高速缓存存储子单元。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
针对所述多个块高速缓存存储子单元中的任一块高速缓存存储子单元,在该块高速缓存存储子单元被存满时,将该块高速缓存存储子单元添加到刷新队列中;
运行异步写线程,通过所述异步写线程将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据,异步写入到所述缓存代理服务器的磁盘中。
5.根据权利要求4所述的方法,其特征在于,将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据,异步写入到所述缓存代理服务器的磁盘中,包括:
将所述刷新队列中的各个块高速缓存存储子单元所缓存的数据缓存到所述页面高速缓存存储单元中;
将所述页面高速缓存存储单元中缓存的数据写入所述缓存代理服务器的磁盘中。
6.根据权利要求3所述的方法,其特征在于,按照先进先出策略对所述块高速缓存存储单元中缓存的数据进行管理,还包括:
在多个块高速缓存存储子单元均被存满时,按照被存满的先后顺序,擦除所述多个块高速缓存存储子单元中最先被存满的块高速缓存存储子单元,得到空块高速缓存存储子单元;
接收所述数据写入单元发送的针对其他数据的数据写入请求;
响应于所述数据写入请求,将所述其他数据缓存到所述空块高速缓存存储子单元;
将所述空块高速缓存存储子单元和所述其他数据之间的索引关系作为所述其他数据的索引数据,缓存到所述空块高速缓存存储子单元。
7.根据权利要求1所述的方法,其特征在于,在所述块高速缓存存储单元中未缓存所述目标数据的情况下,从所述页面高速缓存存储单元中或从所述缓存代理服务器的磁盘中读取所述目标数据,包括:
在所述块高速缓存存储单元中未缓存所述目标数据的情况下,查询所述页面高速缓存存储单元中是否缓存有所述目标数据;
在所述页面高速缓存存储单元中缓存有所述目标数据的情况下,从所述页面高速缓存存储单元中读取所述目标数据;
在所述页面高速缓存存储单元中未缓存所述目标数据的情况下,从所述缓存代理服务器的磁盘中读取所述目标数据。
8.一种数据读取装置,其特征在于,应用于消息系统集群包括的多个缓存代理服务器中的任一缓存代理服务器,所述缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元,所述块高速缓存存储单元采用块级别做高速缓存存储单元,所述装置包括:
第一数据写入请求接收模块,用于接收数据写入单元发送的针对目标数据的数据写入请求;
目标数据缓存模块,用于响应于所述数据写入请求,将所述目标数据缓存到所述块高速缓存存储单元中;
目标数据管理模块,用于按照先进先出策略对所述块高速缓存存储单元中缓存的数据进行管理;
数据读取请求接收模块,用于接收数据读取单元发送的针对所述目标数据的数据读取请求;
目标数据查询模块,用于响应于所述数据读取请求,查询所述块高速缓存存储单元中是否缓存有所述目标数据;
第一读取模块,用于在所述块高速缓存存储单元中缓存有所述目标数据的情况下,从所述块高速缓存存储单元中读取所述目标数据;
第二读取模块,用于在所述块高速缓存存储单元中未缓存所述目标数据的情况下,从所述页面高速缓存存储单元中或从所述缓存代理服务器的磁盘中读取所述目标数据;
目标数据返回模块,用于将读取到的所述目标数据返回给所述数据读取单元。
9.一种缓存代理服务器,其特征在于,所述缓存代理服务器为消息系统集群包括的多个缓存代理服务器中的任一缓存代理服务器,所述缓存代理服务器的高速缓存存储单元包括块高速缓存存储单元和页面高速缓存存储单元,所述块高速缓存存储单元采用块级别做高速缓存存储单元,所述缓存代理服务器还包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行权利要求1至7中任一项所述的一种数据读取方法。
10.一种非临时性计算机可读存储介质,当所述存储介质中的指令由服务器的处理器执行时,使得服务器能够执行权利要求1-7任一所述的一种数据读取方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910970136.8A CN112650694B (zh) | 2019-10-12 | 2019-10-12 | 一种数据读取方法、装置、缓存代理服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910970136.8A CN112650694B (zh) | 2019-10-12 | 2019-10-12 | 一种数据读取方法、装置、缓存代理服务器及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112650694A CN112650694A (zh) | 2021-04-13 |
CN112650694B true CN112650694B (zh) | 2024-01-12 |
Family
ID=75343047
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910970136.8A Active CN112650694B (zh) | 2019-10-12 | 2019-10-12 | 一种数据读取方法、装置、缓存代理服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112650694B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113849455B (zh) * | 2021-09-28 | 2023-09-29 | 致真存储(北京)科技有限公司 | 一种基于混合式存储器的mcu及缓存数据的方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2415018A1 (en) * | 2002-12-23 | 2004-06-23 | Ibm Canada Limited - Ibm Canada Limitee | Adaptive parallel data clustering when loading a data structure containing data clustered along one or more dimensions |
US8639658B1 (en) * | 2010-04-21 | 2014-01-28 | Symantec Corporation | Cache management for file systems supporting shared blocks |
CN103678523A (zh) * | 2013-11-28 | 2014-03-26 | 华为技术有限公司 | 分布式高速缓存cache数据访问方法和装置 |
CN104391653A (zh) * | 2014-10-31 | 2015-03-04 | 山东超越数控电子有限公司 | 一种基于数据块的高速缓存设计方法 |
CN106648464A (zh) * | 2016-12-22 | 2017-05-10 | 柏域信息科技(上海)有限公司 | 基于云存储的多节点混合块缓存数据读写方法及系统 |
CN108293067A (zh) * | 2015-12-23 | 2018-07-17 | 英特尔公司 | 针对物联网设备管理通信拥塞 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10560544B2 (en) * | 2015-08-25 | 2020-02-11 | Box, Inc. | Data caching in a collaborative file sharing system |
-
2019
- 2019-10-12 CN CN201910970136.8A patent/CN112650694B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2415018A1 (en) * | 2002-12-23 | 2004-06-23 | Ibm Canada Limited - Ibm Canada Limitee | Adaptive parallel data clustering when loading a data structure containing data clustered along one or more dimensions |
US8639658B1 (en) * | 2010-04-21 | 2014-01-28 | Symantec Corporation | Cache management for file systems supporting shared blocks |
CN103678523A (zh) * | 2013-11-28 | 2014-03-26 | 华为技术有限公司 | 分布式高速缓存cache数据访问方法和装置 |
CN104391653A (zh) * | 2014-10-31 | 2015-03-04 | 山东超越数控电子有限公司 | 一种基于数据块的高速缓存设计方法 |
CN108293067A (zh) * | 2015-12-23 | 2018-07-17 | 英特尔公司 | 针对物联网设备管理通信拥塞 |
CN106648464A (zh) * | 2016-12-22 | 2017-05-10 | 柏域信息科技(上海)有限公司 | 基于云存储的多节点混合块缓存数据读写方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112650694A (zh) | 2021-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10599637B2 (en) | Granular buffering of metadata changes for journaling file systems | |
US6883068B2 (en) | Methods and apparatus for implementing a chche replacement scheme | |
US9779027B2 (en) | Apparatus, system and method for managing a level-two cache of a storage appliance | |
US8463846B2 (en) | File bundling for cache servers of content delivery networks | |
US9348752B1 (en) | Cached data replication for cache recovery | |
US6237060B1 (en) | Cache management techniques | |
US20200257450A1 (en) | Data hierarchical storage and hierarchical query method and apparatus | |
US6385699B1 (en) | Managing an object store based on object replacement penalties and reference probabilities | |
US7058763B2 (en) | File system for caching web proxies | |
US8819074B2 (en) | Replacement policy for resource container | |
CN103530387A (zh) | 一种hdfs针对小文件的改进方法 | |
CN107888687B (zh) | 一种基于分布式存储系统的代理客户端存储加速方法及系统 | |
US20130290636A1 (en) | Managing memory | |
CN106528451B (zh) | 针对小文件的二级缓存预取的云存储框架及构建方法 | |
CN1908915A (zh) | 用于管理元数据的方法和系统 | |
CN105915619A (zh) | 顾及访问热度的网络空间信息服务高性能内存缓存方法 | |
CN112650694B (zh) | 一种数据读取方法、装置、缓存代理服务器及存储介质 | |
CN112463073A (zh) | 一种对象存储分布式配额方法、系统、设备和存储介质 | |
CN110413689B (zh) | 一种内存数据库的多节点数据同步方法与装置 | |
JPH07239808A (ja) | 分散データ管理方式 | |
US8533398B2 (en) | Combination based LRU caching | |
CN111787062A (zh) | 面向广域网络文件系统的自适应快速增量预读方法 | |
US11586353B2 (en) | Optimized access to high-speed storage device | |
CN116069752A (zh) | 一种面向分布式文件系统的混合预取方法 | |
CN115080459A (zh) | 缓存管理方法及装置、计算机可读存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |