CN117032588A - 一种数据读取方法、装置及电子设备和存储介质 - Google Patents

一种数据读取方法、装置及电子设备和存储介质 Download PDF

Info

Publication number
CN117032588A
CN117032588A CN202311254706.6A CN202311254706A CN117032588A CN 117032588 A CN117032588 A CN 117032588A CN 202311254706 A CN202311254706 A CN 202311254706A CN 117032588 A CN117032588 A CN 117032588A
Authority
CN
China
Prior art keywords
data
cache
read
reading
strip
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.)
Granted
Application number
CN202311254706.6A
Other languages
English (en)
Other versions
CN117032588B (zh
Inventor
和思扬
王帅阳
贾涛
霍存可
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Metabrain Intelligent Technology Co Ltd
Original Assignee
Suzhou Metabrain Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Metabrain Intelligent Technology Co Ltd filed Critical Suzhou Metabrain Intelligent Technology Co Ltd
Priority to CN202311254706.6A priority Critical patent/CN117032588B/zh
Publication of CN117032588A publication Critical patent/CN117032588A/zh
Application granted granted Critical
Publication of CN117032588B publication Critical patent/CN117032588B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0674Disk device
    • G06F3/0676Magnetic disk device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (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

一种数据读取方法、装置及电子设备和存储介质
技术领域
本申请涉及计算机技术领域,更具体地说,涉及一种数据读取方法、装置及电子设备和存储介质。
背景技术
HDFS(Hadoop生态下的分布式文件系统)作为大数据的底层存储组件,其读性能直接影响上层服务的执行时间,从而影响业务的读效率。HDFS将文件分为block(数据块)进行存储,并在读取目标文件的block过程中,进一步将该block分为固定大小的packet(数据包)分别读取,并通过offset标记进度。为了提升读性能,HDFS目前已提供了预读功能,通过调用内核接口将文件的预读条带加载进缓存,并进一步从缓存中读取数据向客户端发包,从而提升读的效率。但是,HDFS自身无法管理预读缓存,完全交由内核控制会造成不必要的开销。
因此,如何降低预读过程中内核的开销是本领域技术人员需要解决的技术问题。
发明内容
本申请的目的在于提供一种分布式文件系统的数据读取方法、装置及电子设备和存储介质,降低了预读过程中内核的开销。
为实现上述目的,本申请提供了一种分布式文件系统的数据读取方法,应用于所述分布式文件系统的数据节点,所述方法包括:
接收读请求,确定所述读请求对应的目标数据块;
当读取所述目标数据块中的数据条带时,判断所述分布式文件系统的缓存中是否存在所述数据条带对应的缓存数据;其中,所述缓存数据为在当前读取进度之前从磁盘中预读到的所述分布式文件系统的缓存中的数据;
若存在,则基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求;
若不存在,则从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求。
其中,所述判断所述分布式文件系统中的缓存中是否存在所述数据条带对应的缓存数据,包括:
确定所述数据条带在所述目标数据块中的位置,基于所述位置在所述分布式文件系统中的缓存中查找是否存在对应的缓存数据。
其中,所述判断所述分布式文件系统中的缓存中是否存在所述数据条带对应的缓存数据之后,还包括:
当所述缓存中不存在所述数据条带对应的缓存数据时,触发预读操作,并将预读到的数据条带存储至所述缓存中。
其中,所述触发预读操作,包括:
在所述数据条带之后设置预读触发点,当读取到所述预读触发点时,触发预读操作。
其中,在所述数据条带之后设置预读触发点,包括:
在所述数据条带之后的预设长度处设置预读触发点。
其中,在所述数据条带之后的预设长度处设置预读触发点,包括:
在所述数据条带之后的预设长度处设置多个预读触发点。
其中,相邻预读触发点之间的距离为每次预读的预读长度。
其中,所述接收读请求之前,还包括:
通过所述分布式文件系统配置每次预读的预读长度。
其中,所述触发预读操作,包括:
向所述分布式文件系统申请票据;其中,若所述分布式文件系统已发放的票据数量小于票据上限,则向所述数据节点发放所述目标数据块对应的票据;
当接收到所述分布式文件系统发放的票据时,触发预读操作。
其中,从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求之后,还包括:
向所述分布式文件系统归还票据。
其中,所述接收读请求之前,还包括:
通过所述分布式文件系统配置票据上限。
其中,所述触发预读操作,并将预读到的数据条带存储至所述缓存中,包括:
将需要预读的数据条带划分为多个数据包;
开辟多个线程,以利用多个所述线程分别预读所述需要预读的数据条带中的多个数据包并存储至所述缓存中。
其中,所述接收读请求之前,还包括:
通过所述分布式文件系统配置线程数量。
其中,所述将需要预读的数据条带划分为多个数据包,包括:
将需要预读的数据条带划分为所述线程数量个数据包;
相应的,所述开辟多个线程包括:
开辟所述线程数量个线程。
其中,还包括:
当读取进度超过所述缓存中目标数据条带的末尾位置时,将所述缓存中目标数据条带的目标缓存数据判定为过期数据;
清理所述缓存中的所述过期数据。
其中,所述清理所述缓存中的所述过期数据,包括:
当读取到所述预读触发点时,清理所述缓存中的所述过期数据。
其中,所述缓存包括有界队列,所述有界队列存储多个数据条带的缓存数据和所述数据条带在所属数据块中的位置。
其中,从所述磁盘中读取所述目标数据块中的数据条带,包括:
将所述目标数据块中的数据条带划分为多个数据包分别进行读取。
其中,所述接收读请求,包括:
接收客户端的读请求;
相应的,所述基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求,包括:
将所述缓存中所述数据条带对应的缓存数据输出至所述客户端;
相应的,从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求,包括:
从所述磁盘中读取所述目标数据块中的数据条带输出至所述客户端。
为实现上述目的,本申请提供了一种分布式文件系统的数据读取装置,应用于所述分布式文件系统的数据节点,所述装置包括:
确定模块,用于接收读请求,确定所述读请求对应的目标数据块;
判断模块,用于当读取所述目标数据块中的数据条带时,判断所述分布式文件系统的缓存中是否存在所述数据条带对应的缓存数据;其中,所述缓存数据为在当前读取进度之前从磁盘中预读到的所述分布式文件系统的缓存中的数据;
第一响应模块,用于当所述缓存中存在所述数据条带对应的缓存数据时,基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求;
第二响应模块,用于当所述缓存中不存在所述数据条带对应的缓存数据时,从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求。
为实现上述目的,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述数据读取方法的步骤。
为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述数据读取方法的步骤。
通过以上方案可知,本申请提供的一种分布式文件系统的数据读取方法,应用于分布式文件系统的数据节点,所述方法包括:接收读请求,确定所述读请求对应的目标数据块;当读取所述目标数据块中的数据条带时,判断所述分布式文件系统的缓存中是否存在所述数据条带对应的缓存数据;其中,所述缓存数据为在当前读取进度之前从磁盘中预读到的所述分布式文件系统的缓存中的数据;若存在,则基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求;若不存在,则从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求。
在本申请中,在分布式文件系统中部署缓存,用于存储数据节点从数据块中预读的数据条带,也即将相关技术中内核管理预读缓存改进为分布式文件系统的缓存管理预读缓存,降低了预读过程中内核的开销,提升了读性能。本申请还公开了一种分布式文件系统的数据读取装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1为相关技术中分布式文件系统数据节点读取数据的流程示意图;
图2为根据一示例性实施例示出的一种分布式文件系统的数据读取方法的流程图;
图3为根据一示例性实施例示出的另一种分布式文件系统的数据读取方法的流程图;
图4为根据一示例性实施例示出的又一种分布式文件系统的数据读取方法的流程图;
图5为本申请提供的一种应用实施例中分布式文件系统的结构图;
图6为本申请提供的一种应用实施例中数据节点读取数据的流程示意图;
图7为根据一示例性实施例示出的一种分布式文件系统的数据读取装置的结构图;
图8为根据一示例性实施例示出的一种电子设备的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。另外,在本申请实施例中,“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
在相关技术中,HDFS接收客户端的读请求,读取文件的block并将数据返回客户端,主要包含以下基本流程,如图1所示:
步骤1:HDFS接收客户端请求,通过datanode发起读流程;
步骤2:Datanode(数据节点)找到对应文件的目标block,将读的条带分为一个个固定大小的数据packet分别进行读取;
步骤3:对于每个block,在读取的同时会调用内核接口进行预读以提升读packet的性能,预读的流程与细节不可控;
步骤4:packet数据通过输出流不断向前端返回,最终由客户端接收,完成文件block的读取。
相关技术中的预读功能仍有诸多问题,首先对于单个block,预读过程无法人为控制单个条带的并发读,导致性能无法进一步加强;其次,block的并发预读数也无法控制,会导致在大量客户端请求的场景下,绝大多数block的预读线程会被阻塞;另外,内核的预读对于HDFS服务端不可控,HDFS自身无法管理预读缓存,完全交由内核控制会造成不必要的开销。
在本申请中,在分布式文件系统中部署缓存模块,用于存储数据节点从数据块中预读的数据条带,也即将相关技术中内核管理预读缓存改进为缓存模块管理预读缓存,降低了预读过程中内核的开销,提升了读性能。同时,通过队列的方式控制开启预读的block请求数量,同时配置策略,包括同时允许多少个block启用预读、预读长度、每次预读并发数,将策略下发到读流程,可以实现单个数据条带的并发预读,避免不会因为大量的并发预读造成资源拥堵。
本申请实施例公开了一种分布式文件系统的数据读取方法,降低了预读过程中内核的开销。
参见图2,根据一示例性实施例示出的一种分布式文件系统的数据读取方法的流程图,如图2所示,包括:
S101:接收读请求,确定所述读请求对应的目标数据块;
本实施例的执行主体为分布式文件系统的数据节点,在具体实施中,数据节点接收客户端的读请求,发起读流程,确定读请求对应的目标数据块。
S102:当读取所述目标数据块中的数据条带时,判断所述分布式文件系统的缓存中是否存在所述数据条带对应的缓存数据;其中,所述缓存数据为在当前读取进度之前从磁盘中预读到的所述分布式文件系统的缓存中的数据;若存在,则进入S103;若不存在,则进入S104;
在具体实施中,数据节点将目标数据块划分为多个数据条带进行依次读取,在读取某一数据条带时,判断分布式文件系统的缓存中是否存在该数据条带对应的缓存数据;若存在,则进入S103;若不存在,则进入S104。
在分布式系统中可以部署缓存模块,用于存储预读的数据条带的缓存数据以及其在所属数据块中的位置,可以通过有界队列实现,有界队列中的每个元素对应预读的一个数据条带的缓存数据以及其在所属数据块中的位置。
作为一种可行的实施方式,所述判断所述分布式文件系统中的缓存中是否存在所述数据条带对应的缓存数据,包括:确定所述数据条带在所述目标数据块中的位置,基于所述位置在所述分布式文件系统中的缓存中查找是否存在对应的缓存数据。在具体实施中,在读取某一数据条带时,可以基于其在目标数据块中的位置在缓存中查找是否存在对应的缓存数据。
S103:基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求;
在具体实施中,如果缓存中存在数据条带对应的缓存数据,则直接将缓存中数据条带对应的缓存数据输出至客户端。
S104:从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求。
在具体实施中,如果缓存模块中不存在数据条带对应的缓存数据,则采用传统的读流程,也即从磁盘中读取目标数据块中的数据条带输出至客户端。
作为一种可行的实施方式,从所述磁盘中读取所述目标数据块中的数据条带,包括:将所述目标数据块中的数据条带划分为多个数据包分别进行读取。在具体实施中,数据节点可以将需要读取的数据条带划分为多个数据包,利用多个线程并行读取,以提高效率。
作为一种优选实施方式,还包括:当所述缓存中不存在所述数据条带对应的缓存数据时,触发预读操作,并将预读到的数据条带存储至所述缓存中。
在具体实施中,如果缓存中不存在数据条带对应的缓存数据,说明目标数据块是一个新的数据块,触发预读操作,并将预读到的数据条带存储至缓存中。
在本申请实施例中,在分布式文件系统中部署缓存,用于存储数据节点从数据块中预读的数据条带,也即将相关技术中内核管理预读缓存改进为分布式文件系统的缓存管理预读缓存,降低了预读过程中内核的开销,提升了读性能。
本申请实施例公开了一种数据读取方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
参见图3,根据一示例性实施例示出的另一种数据读取方法的流程图,如图3所示,包括:
S201:接收读请求,确定所述读请求对应的目标数据块;
本实施例的执行主体为分布式文件系统的数据节点,在具体实施中,数据节点接收客户端的读请求,发起读流程,确定读请求对应的目标数据块。
S202:当读取所述目标数据块中的数据条带时,判断所述分布式文件系统的缓存中是否存在所述数据条带对应的缓存数据;其中,所述缓存数据为在当前读取进度之前从磁盘中预读到的所述分布式文件系统的缓存中的数据;若存在,则进入S203;若不存在,则进入S204;
在具体实施中,数据节点将目标数据块划分为多个数据条带进行依次读取,在读取某一数据条带时,判断缓存中是否存在该数据条带对应的缓存数据;若存在,则进入S203;若不存在,则进入S204。
S203:基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求;
在具体实施中,如果缓存中存在数据条带对应的缓存数据,则直接将缓存中数据条带对应的缓存数据输出至客户端。
S204:在所述数据条带之后设置预读触发点,当读取到所述预读触发点时,触发预读操作,并将预读到的数据条带存储至所述缓存中;
在具体实施中,如果缓存中不存在数据条带对应的缓存数据,则数据条带之后设置预读触发点,当读取到该预读触发点时,对接下来一个预读长度的数据进行并发预读,并将预读到的数据条带存储至缓存中。
作为一种可行的实施方式,可以在数据条带之后的预设长度处设置预读触发点,该预设长度可以在接收读请求之前,通过分布式文件系统的并发管理模块进行配置。
作为一种优选的实施方式,可以在数据条带之后的预设长度处设置多个预读触发点,相邻预读触发点之间的距离为每次预读的预读长度,设置预读触发点的数量和预读长度同样可以通过并发管理模块进行配置。也即,所述接收读请求之前,还包括:通过所述分布式文件系统配置每次预读的预读长度。
作为一种优选的实施方式,所述触发预读操作,并将预读到的数据条带存储至所述缓存中,包括:将需要预读的数据条带划分为多个数据包;开辟多个线程,以利用多个所述线程分别预读所述需要预读的数据条带中的多个数据包并存储至所述缓存中。
在具体实施中,预读功能会根据预读长度开启多个线程,将本段预读长度的数据条带进行切分,每个线程负责读一个数据包,并行异步将读取的数据封装传入缓存,每一个缓存数据包含数据本体以及数据的起始位置标记。线程数量同样可以通过分布式文件系统的并发管理模块进行配置。也即,所述接收读请求之前,还包括:通过所述分布式文件系统配置线程数量;相应的,所述将需要预读的数据条带划分为多个数据包,包括:将需要预读的数据条带划分为所述线程数量个数据包;相应的,所述开辟多个线程包括:开辟所述线程数量个线程。
作为一种优选的实施方式,还包括:当读取进度超过所述缓存中目标数据条带的末尾位置时,将所述缓存中目标数据条带的目标缓存数据判定为过期数据;清理所述缓存中的所述过期数据。
在具体实施中,缓存负责所有缓存数据的生命周期,当读取进度超过某一目标数据条带的末尾位置,则将缓存中目标数据条带的目标缓存数据视为过期数据,清理缓存中的过期数据,以保证集群缓存开销维持在正常水平。作为一种可行的实施方式,可以当读取到所述预读触发点时,清理所述缓存中的所述过期数据。
S205:从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求。
在具体实施中,如果缓存中不存在数据条带对应的缓存数据,则采用传统的读流程,也即从磁盘中读取目标数据块中的数据条带输出至客户端。
由此可见,本实施例通过多个线程对数据条带进行并发预读,提高了预读效率。
本申请实施例公开了一种数据读取方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
参见图4,根据一示例性实施例示出的又一种数据读取方法的流程图,如图4所示,包括:
S301:接收读请求,确定所述读请求对应的目标数据块;
本实施例的执行主体为分布式文件系统的数据节点,在具体实施中,数据节点接收客户端的读请求,发起读流程,确定读请求对应的目标数据块。
S302:当读取所述目标数据块中的数据条带时,判断所述分布式文件系统的缓存中是否存在所述数据条带对应的缓存数据;其中,所述缓存数据为在当前读取进度之前从磁盘中预读到的所述分布式文件系统的缓存中的数据;若存在,则进入S303;若不存在,则进入S304;
在具体实施中,数据节点将目标数据块划分为多个数据条带进行依次读取,在读取某一数据条带时,判断缓存中是否存在该数据条带对应的缓存数据;若存在,则进入S303;若不存在,则进入S304。
S303:基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求;
在具体实施中,如果缓存中存在数据条带对应的缓存数据,则直接将缓存中数据条带对应的缓存数据输出至客户端。
S304:向所述分布式文件系统申请票据;其中,若所述分布式文件系统已发放的票据数量小于票据上限,则向所述数据节点发放所述目标数据块对应的票据;
S305:当接收到所述分布式文件系统发放的票据时,触发预读操作,并将预读到的数据条带存储至所述缓存中;
在本实施例中,触发预读之前需要向分布式文件系统的缓存模块申请票据,票据可以理解为预读凭证,只有获取到预读凭证的数据块才能出发预读。如果分布式文件系统已发放的票据数量小于票据上限,则向数据节点发放目标数据块对应的票据,数据节点开启预读功能,如果分布式文件系统已发放的票据数量达到票据上限,则不会向数据节点发放票据,直至有票据归还,数据节点不再开启预读功能。票据上限同样可以通过分布式文件系统的并发管理模块进行配置。也即,所述接收读请求之前,还包括:通过所述分布式文件系统配置票据上限。
S306:从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求;
在具体实施中,如果缓存中不存在数据条带对应的缓存数据,则采用传统的读流程,也即从磁盘中读取目标数据块中的数据条带输出至客户端。
S307:向所述分布式文件系统归还票据。
在具体实施中,当完成本次读任务之后,数据节点归还票据。
由此可见,本实施例通过控制同时启动预读功能的数据块数量,保证集群不会因为大量的并发预读造成资源拥堵。
下面介绍本申请提供的一种应用实施例,如图5所示,在分布式文件系统中新增两个模块,分别为并发控制模块与缓存管理模块,前者用来控制datanode的读并发,包括单个条带的读并发,以及大量客户端请求下,允许启用预读功能的block数量,以防止大量的block同时预读造成过量集群开销。后者用于保存每个预读条带的数据以及起始位置;
Datanode在读block之前,并发管理模块会设置特定的预读长度,并将该长度的条带规划为多段以启用并发读提升效率,将这些设置向下传入到具体的读流程按规划执行。在读流程的执行过程中,预读功能会根据预读长度开启多个线程分段并发读取,将预读的数据交由缓存管理器进行维护,每一个缓存包含数据本体以及数据的起始位置标记。之后每次读到下一个packet时,会优先查找缓存下对应位置的packet数据,并直接返回前端,不再进行磁盘的读取。
并发管理模块用于控制以下参数:同时允许多少个block启用预读、以及每个block单次预读的长度和线程数。每次block数据读取,需要向该模块申请策略并实施具体的读操作。因此,任务管理器至少需要开发以下功能:
a. 缓存管理模块实现一个有界队列,该队列用于缓冲block的预读任务,每当有新的block读请求,需要先从该队列申请一个票据,当完成本次读任务,则归还票据。若队列内票据取完,则之后的block读任务不再开启预读,直到有票据归还。以保证集群不会因为大量的并发预读造成资源拥堵;
b. 缓存管理模块可根据业务需求,配置每次预读的长度,以及该长度下启用的并发数。对功能a中已经获取票据的读任务,将这两个参数作为策略下发到具体的读流程。
针对HDFS现有的读流程进行改造,改造过程主要为以下几个方面:
a. Datanode接收客户端请求,读取目标block的每个packet数据条带时,不再直接调用现有的读流程,而是优先从缓存中查询该位置的数据缓存,若有,则直接获取并向客户端输出,若没有,则采用传统的读流程;
b. 基于上述过程a,对于一个新的block而言,缓存中没有相关记录,因此刚开始会触发正常读流程。在读的过程中,会在当前偏移量之后特定距离外,设置多个预读触发点,这些触发点之间的距离即是一次预读的长度。每到达一个新的触发点,会对接下来一个预读长度的数据进行并发预读;
c. 在执行并发预读时,根据并发管理模块下发的策略,创建多个线程任务,将本段预读长度的条带进行切分,每个线程负责读一个子条带,并异步将读取的数据封装传入缓存管理模块。
缓存管理模块会申请内存空间用于存储预读线程返回的数据条带,并且标记该条带的起始位置,以方便datanode直接查找目标数据。此外,该模块负责所有缓存数据的生命周期。当读取进度超过该缓存的末尾位置,则视为过期缓存,该模块会在下一次预读触发的同时,清除之前的过期条带,以保证集群缓存开销维持在正常水平。
基于上述内容,数据节点读取数据的流程如图6所示,包括以下步骤:
步骤1:DataNode接收客户端读请求,查询缓存数据,若无数据则采取常规的读操作;
步骤2:并发管理模块根据票据队列是否有余,决定当前block是否开启预读,并确定预读长度与每次预读的线程数;
步骤3:读文件过程中,在当前进度前方设置多个预读触发点,每当到达预读触发点时开启下次预读;
步骤4:预读过程中,开启多个线程任务将预读条带分段读,并异步将数据提交缓存;
步骤5:缓存管理模块维护缓存的生命周期,清除过期数据。
本实施例可以应用于HDFS,相较于传统的读流程,可更进一步解放性能,同时具有更高的可控性以及更合理的资源利用,为数据读取的高效率、高吞吐量、低延迟等需求提供了更有利的保证。
下面对本申请实施例提供的一种数据读取装置进行介绍,下文描述的一种数据读取装置与上文描述的一种数据读取方法可以相互参照。
参见图7,根据一示例性实施例示出的一种数据读取装置的结构图,如图7所示,包括:
确定模块100,用于接收读请求,确定所述读请求对应的目标数据块;
判断模块200,用于当读取所述目标数据块中的数据条带时,判断所述分布式文件系统的缓存中是否存在所述数据条带对应的缓存数据;其中,所述缓存数据为在当前读取进度之前从磁盘中预读到的所述分布式文件系统的缓存中的数据;
第一响应模块300,用于当所述缓存中存在所述数据条带对应的缓存数据时,基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求;
第二响应模块400,用于当所述缓存中不存在所述数据条带对应的缓存数据时,从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求。
在本申请实施例中,在分布式文件系统中部署缓存,用于存储数据节点从数据块中预读的数据条带,也即将相关技术中内核管理预读缓存改进为分布式文件系统的缓存管理预读缓存,降低了预读过程中内核的开销,提升了读性能。
在上述实施例的基础上,作为一种优选实施方式,所述判断模块200具体用于:确定所述数据条带在所述目标数据块中的位置,基于所述位置在所述分布式文件系统中的缓存中查找是否存在对应的缓存数据。
在上述实施例的基础上,作为一种优选实施方式,还包括:
预读模块,用于当所述缓存中不存在所述数据条带对应的缓存数据时,触发预读操作,并将预读到的数据条带存储至所述缓存中。
在上述实施例的基础上,作为一种优选实施方式,所述预读模块具体用于:当所述缓存中不存在所述数据条带对应的缓存数据时,在所述数据条带之后设置预读触发点,当读取到所述预读触发点时,触发预读操作,并将预读到的数据条带存储至所述缓存中。
在上述实施例的基础上,作为一种优选实施方式,所述预读模块具体用于:当所述缓存中不存在所述数据条带对应的缓存数据时,在所述数据条带之后的预设长度处设置预读触发点,当读取到所述预读触发点时,触发预读操作,并将预读到的数据条带存储至所述缓存中。
在上述实施例的基础上,作为一种优选实施方式,所述预读模块具体用于:当所述缓存中不存在所述数据条带对应的缓存数据时,在所述数据条带之后的预设长度处设置多个预读触发点,当读取到所述预读触发点时,触发预读操作,并将预读到的数据条带存储至所述缓存中。
在上述实施例的基础上,作为一种优选实施方式,相邻预读触发点之间的距离为每次预读的预读长度。
在上述实施例的基础上,作为一种优选实施方式,还包括:
第一配置模块,用于通过所述分布式文件系统配置每次预读的预读长度。
在上述实施例的基础上,作为一种优选实施方式,所述预读模块具体用于:当所述缓存中不存在所述数据条带对应的缓存数据时,向所述分布式文件系统申请票据;其中,若所述分布式文件系统已发放的票据数量小于票据上限,则向所述数据节点发放所述目标数据块对应的票据;当接收到所述分布式文件系统发放的票据时,触发预读操作,并将预读到的数据条带存储至所述缓存中。
在上述实施例的基础上,作为一种优选实施方式,还包括:
归还模块,用于在从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求之后,向所述分布式文件系统归还票据。
在上述实施例的基础上,作为一种优选实施方式,还包括:
第二配置模块,用于通过所述分布式文件系统配置票据上限。
在上述实施例的基础上,作为一种优选实施方式,所述预读模块具体用于:当所述缓存中不存在所述数据条带对应的缓存数据时,将需要预读的数据条带划分为多个数据包;开辟多个线程,以利用多个所述线程分别预读所述需要预读的数据条带中的多个数据包并存储至所述缓存中。
在上述实施例的基础上,作为一种优选实施方式,还包括:
第三配置模块,用于通过所述分布式文件系统配置线程数量。
在上述实施例的基础上,作为一种优选实施方式,所述预读模块具体用于:当所述缓存中不存在所述数据条带对应的缓存数据时,将需要预读的数据条带划分为所述线程数量个数据包;开辟所述线程数量个线程,以利用所述线程数量个线程分别预读所述需要预读的数据条带中的所述线程数量个数据包并存储至所述缓存中。
在上述实施例的基础上,作为一种优选实施方式,还包括:
判定模块,用于当读取进度超过所述缓存中目标数据条带的末尾位置时,将所述缓存中目标数据条带的目标缓存数据判定为过期数据;
清理模块,用于清理所述缓存中的所述过期数据。
在上述实施例的基础上,作为一种优选实施方式,所述清理模块具体用于:当读取到所述预读触发点时,清理所述缓存中的所述过期数据。
在上述实施例的基础上,作为一种优选实施方式,所述缓存包括有界队列,所述有界队列存储多个数据条带的缓存数据和所述数据条带在所属数据块中的位置。
在上述实施例的基础上,作为一种优选实施方式,所述第二响应模块400具体用于:当所述缓存中不存在所述数据条带对应的缓存数据时,将所述目标数据块中的数据条带划分为多个数据包分别进行读取,以响应所述读请求。
在上述实施例的基础上,作为一种优选实施方式,所述确定模块100具体用于:接收客户端的读请求,确定所述读请求对应的目标数据块;
相应的,所述第一响应模块300具体用于:当所述缓存中存在所述数据条带对应的缓存数据时,将所述缓存中所述数据条带对应的缓存数据输出至所述客户端;
相应的,所述第二响应模块400具体用于:当所述缓存中不存在所述数据条带对应的缓存数据时,从所述磁盘中读取所述目标数据块中的数据条带输出至所述客户端。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
基于上述程序模块的硬件实现,且为了实现本申请实施例的方法,本申请实施例还提供了一种电子设备,图8为根据一示例性实施例示出的一种电子设备的结构图,如图8所示,电子设备包括:
通信接口1,能够与其它设备比如网络设备等进行信息交互;
处理器2,与通信接口1连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的数据读取方法。而所述计算机程序存储在存储器3上。
当然,实际应用时,电子设备中的各个组件通过总线系统4耦合在一起。可理解,总线系统4用于实现这些组件之间的连接通信。总线系统4除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图8中将各种总线都标为总线系统4。
本申请实施例中的存储器3用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。
可以理解,存储器3可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本申请实施例描述的存储器3旨在包括但不限于这些和任意其它适合类型的存储器。
上述本申请实施例揭示的方法可以应用于处理器2中,或者由处理器2实现。处理器2可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器2中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2可以是通用处理器、DSP,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器2可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器3,处理器2读取存储器3中的程序,结合其硬件完成前述方法的步骤。
处理器2执行所述程序时实现本申请实施例的各个方法中的相应流程,为了简洁,在此不再赘述。
在示例性实施例中,本申请实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器3,上述计算机程序可由处理器2执行,以完成前述方法所述步骤。计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、Flash Memory、磁表面存储器、光盘、CD-ROM等存储器。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (22)

1.一种数据读取方法,其特征在于,应用于分布式文件系统的数据节点,所述方法包括:
接收读请求,确定所述读请求对应的目标数据块;
当读取所述目标数据块中的数据条带时,判断所述分布式文件系统的缓存中是否存在所述数据条带对应的缓存数据;其中,所述缓存数据为在当前读取进度之前从磁盘中预读到的所述分布式文件系统的缓存中的数据;
若存在,则基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求;
若不存在,则从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求。
2.根据权利要求1所述数据读取方法,其特征在于,所述判断所述分布式文件系统中的缓存中是否存在所述数据条带对应的缓存数据,包括:
确定所述数据条带在所述目标数据块中的位置,基于所述位置在所述分布式文件系统中的缓存中查找是否存在对应的缓存数据。
3.根据权利要求1所述数据读取方法,其特征在于,所述判断所述分布式文件系统中的缓存中是否存在所述数据条带对应的缓存数据之后,还包括:
当所述缓存中不存在所述数据条带对应的缓存数据时,触发预读操作,并将预读到的数据条带存储至所述缓存中。
4.根据权利要求3所述数据读取方法,其特征在于,所述触发预读操作,包括:
在所述数据条带之后设置预读触发点,当读取到所述预读触发点时,触发预读操作。
5.根据权利要求4所述数据读取方法,其特征在于,在所述数据条带之后设置预读触发点,包括:
在所述数据条带之后的预设长度处设置预读触发点。
6.根据权利要求5所述数据读取方法,其特征在于,在所述数据条带之后的预设长度处设置预读触发点,包括:
在所述数据条带之后的预设长度处设置多个预读触发点。
7.根据权利要求6所述数据读取方法,其特征在于,相邻预读触发点之间的距离为每次预读的预读长度。
8.根据权利要求7所述数据读取方法,其特征在于,所述接收读请求之前,还包括:
通过所述分布式文件系统配置每次预读的预读长度。
9.根据权利要求3所述数据读取方法,其特征在于,所述触发预读操作,包括:
向所述分布式文件系统申请票据;其中,若所述分布式文件系统已发放的票据数量小于票据上限,则向所述数据节点发放所述目标数据块对应的票据;
当接收到所述分布式文件系统发放的票据时,触发预读操作。
10.根据权利要求9所述数据读取方法,其特征在于,从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求之后,还包括:
向所述分布式文件系统归还票据。
11.根据权利要求9所述数据读取方法,其特征在于,所述接收读请求之前,还包括:
通过所述分布式文件系统配置票据上限。
12.根据权利要求3所述数据读取方法,其特征在于,所述触发预读操作,并将预读到的数据条带存储至所述缓存中,包括:
将需要预读的数据条带划分为多个数据包;
开辟多个线程,以利用多个所述线程分别预读所述需要预读的数据条带中的多个数据包并存储至所述缓存中。
13.根据权利要求12所述数据读取方法,其特征在于,所述接收读请求之前,还包括:
通过所述分布式文件系统配置线程数量。
14.根据权利要求13所述数据读取方法,其特征在于,所述将需要预读的数据条带划分为多个数据包,包括:
将需要预读的数据条带划分为所述线程数量个数据包;
相应的,所述开辟多个线程包括:
开辟所述线程数量个线程。
15.根据权利要求4所述数据读取方法,其特征在于,还包括:
当读取进度超过所述缓存中目标数据条带的末尾位置时,将所述缓存中目标数据条带的目标缓存数据判定为过期数据;
清理所述缓存中的所述过期数据。
16.根据权利要求15所述数据读取方法,其特征在于,所述清理所述缓存中的所述过期数据,包括:
当读取到所述预读触发点时,清理所述缓存中的所述过期数据。
17.根据权利要求1所述数据读取方法,其特征在于,所述缓存包括有界队列,所述有界队列存储多个数据条带的缓存数据和所述数据条带在所属数据块中的位置。
18.根据权利要求1所述数据读取方法,其特征在于,从所述磁盘中读取所述目标数据块中的数据条带,包括:
将所述目标数据块中的数据条带划分为多个数据包分别进行读取。
19.根据权利要求1所述数据读取方法,其特征在于,所述接收读请求,包括:
接收客户端的读请求;
相应的,所述基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求,包括:
将所述缓存中所述数据条带对应的缓存数据输出至所述客户端;
相应的,从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求,包括:
从所述磁盘中读取所述目标数据块中的数据条带输出至所述客户端。
20.一种数据读取装置,其特征在于,应用于分布式文件系统的数据节点,所述装置包括:
确定模块,用于接收读请求,确定所述读请求对应的目标数据块;
判断模块,用于当读取所述目标数据块中的数据条带时,判断所述分布式文件系统的缓存中是否存在所述数据条带对应的缓存数据;其中,所述缓存数据为在当前读取进度之前从磁盘中预读到的所述分布式文件系统的缓存中的数据;
第一响应模块,用于当所述缓存中存在所述数据条带对应的缓存数据时,基于所述缓存中所述数据条带对应的缓存数据直接响应所述读请求;
第二响应模块,用于当所述缓存中不存在所述数据条带对应的缓存数据时,从所述磁盘中读取所述目标数据块中的数据条带,以响应所述读请求。
21.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至19任一项所述数据读取方法的步骤。
22.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至19任一项所述数据读取方法的步骤。
CN202311254706.6A 2023-09-26 2023-09-26 一种数据读取方法、装置及电子设备和存储介质 Active CN117032588B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311254706.6A CN117032588B (zh) 2023-09-26 2023-09-26 一种数据读取方法、装置及电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311254706.6A CN117032588B (zh) 2023-09-26 2023-09-26 一种数据读取方法、装置及电子设备和存储介质

Publications (2)

Publication Number Publication Date
CN117032588A true CN117032588A (zh) 2023-11-10
CN117032588B CN117032588B (zh) 2024-02-09

Family

ID=88641298

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311254706.6A Active CN117032588B (zh) 2023-09-26 2023-09-26 一种数据读取方法、装置及电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN117032588B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109739570A (zh) * 2018-12-24 2019-05-10 新华三技术有限公司 一种数据读取方法、服务器控制设备、服务器及计算机可读存储介质
CN114860625A (zh) * 2022-03-31 2022-08-05 网宿科技股份有限公司 数据访问方法、装置、设备及可读存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109739570A (zh) * 2018-12-24 2019-05-10 新华三技术有限公司 一种数据读取方法、服务器控制设备、服务器及计算机可读存储介质
CN114860625A (zh) * 2022-03-31 2022-08-05 网宿科技股份有限公司 数据访问方法、装置、设备及可读存储介质

Also Published As

Publication number Publication date
CN117032588B (zh) 2024-02-09

Similar Documents

Publication Publication Date Title
US7500063B2 (en) Method and apparatus for managing a cache memory in a mass-storage system
CN101763437B (zh) 高速缓冲存储实现方法及装置
US9898338B2 (en) Network computer system and method for dynamically changing execution sequence of application programs
US10976956B2 (en) Non-volatile memory persistence method and computing device
CN110727685B (zh) 一种基于Cassandra数据库的数据压缩方法、设备以及存储介质
US10382551B2 (en) Cloud file processing method and apparatus
CN105138481A (zh) 存储数据的处理方法、装置和系统
US20110246667A1 (en) Processing unit, chip, computing device and method for accelerating data transmission
CN110650182B (zh) 网络缓存方法、装置、计算机设备及存储介质
US6614709B2 (en) Method and apparatus for processing commands in a queue coupled to a system or memory
CN111061690B (zh) 一种基于rac的数据库日志文件读取方法和装置
CN116049085A (zh) 一种数据处理系统及方法
US20220214832A1 (en) Prefetching metadata in a storage system
CN117032588B (zh) 一种数据读取方法、装置及电子设备和存储介质
CN101853218A (zh) 用于磁盘阵列的读取方法和系统
CN112153060A (zh) Smb协议服务器的通信控制方法、系统及相关组件
US20160085683A1 (en) Data receiving device and data receiving method
US20170262368A1 (en) Linked-list-based method and device for application caching management
CN105490956A (zh) 一种网络请求处理方法及装置
CN113821164B (zh) 一种分布式存储系统的对象聚合方法和装置
US11592986B2 (en) Methods for minimizing fragmentation in SSD within a storage system and devices thereof
CN114157619A (zh) 报文缓存管理方法、装置及网络处理器
CN109408412B (zh) 内存预取控制方法、装置及设备
CN107273188B (zh) 一种虚拟机中央处理单元cpu绑定方法及装置
CN112748989A (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