CN111475535B - 数据存储、访问方法及装置 - Google Patents
数据存储、访问方法及装置 Download PDFInfo
- Publication number
- CN111475535B CN111475535B CN202010155926.3A CN202010155926A CN111475535B CN 111475535 B CN111475535 B CN 111475535B CN 202010155926 A CN202010155926 A CN 202010155926A CN 111475535 B CN111475535 B CN 111475535B
- Authority
- CN
- China
- Prior art keywords
- node
- data
- target
- redis
- slot
- 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
- 238000013500 data storage Methods 0.000 title claims abstract description 83
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000013507 mapping Methods 0.000 claims description 3
- 230000002776 aggregation Effects 0.000 abstract description 6
- 238000004220 aggregation Methods 0.000 abstract description 6
- 238000012545 processing Methods 0.000 abstract description 2
- 230000006872 improvement Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000005012 migration Effects 0.000 description 4
- 238000013508 migration Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 2
- 101100346656 Drosophila melanogaster strat gene Proteins 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003203 everyday effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- XDDAORKBJWWYJS-UHFFFAOYSA-N glyphosate Chemical compound OC(=O)CNCP(O)(O)=O XDDAORKBJWWYJS-UHFFFAOYSA-N 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
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/2455—Query execution
- G06F16/24552—Database cache management
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- 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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例涉及数据处理技术领域,公开了一种数据存储、访问方法及装置。数据存储方法应用于Redis集群,Redis集群被划分为多个节点族,方法包括:根据待存储的空间数据的空间位置信息与各节点族中槽的数量,确定空间数据对应的第一目标节点族的编号;根据第一目标节点族的编号与空间位置信息,确定第一目标节点族中的第一目标槽的槽号;根据确定的槽号,将空间数据存入槽号对应的第一目标槽。本发明中,能够尽可能的将空间位置相近的空间数据存储到相同的节点族中相同槽中,加强了空间数据在空间位置上的聚集性,方便用户进行近邻查询,提升了数据访问效率。
Description
技术领域
本发明实施例涉及数据处理技术领域,特别涉及一种数据存储、访问方法及装置。
背景技术
随着移动互联网的发展,用户每天在使用电子设备时都会产生大量的带有空间位置信息的数据,这类数据可以称为空间数据。用户访问空间数据效率直接影响着用户的使用体验,数据缓存是提升数据访问效率的一种有效工具,Redis作为主流的内存数据库被广泛使用为缓存数据库以提升互联网场景下的数据访问效率。
发明人发现现有技术中至少存在如下问题:在使用Redis缓存数据库时,能够将空间数据分布缓存到Redis集群中,但在用户需要查询某一空间位置附近的数据时,需要先遍历所有Redis节点中的数据,数据查询效率低。
发明内容
本发明实施方式的目的在于提供一种数据存储、访问方法及装置,能够尽可能的将空间位置相近的空间数据存储到相同的节点族中相同槽中,加强了空间数据在空间位置上的聚集性,方便用户进行近邻查询,提升了数据访问效率。
为解决上述技术问题,本发明的实施方式提供了一种数据存储方法,应用于Redis集群,Redis集群被划分为多个节点族,方法包括:根据待存储的空间数据的空间位置信息与各节点族中槽的数量,确定空间数据对应的第一目标节点族的编号;根据第一目标节点族的编号与空间位置信息,确定第一目标节点族中的第一目标槽的槽号;根据确定的槽号,将空间数据存入槽号对应的第一目标槽。
本发明的实施方式还提供了一种数据访问方法,应用于Redis集群,Redis集群采用上述的数据存储方法存储空间数据,Redis集群被划分为多个节点族,数据访问方法包括:根据待查询的空间数据的空间位置信息与各节点族中槽的数量,确定空间数据对应的第二目标节点族的编号;根据第二目标节点族的编号与空间位置信息,确定第二目标节点族中的第三目标槽的槽号;从槽号对应的第三目标槽中读取空间数据。
本发明的实施方式还提供了一种数据存储装置,包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述的数据存储方法。
本发明的实施方式还提供了一种数据访问装置,包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述的数据访问方法。
本发明实施方式相对于现有技术而言,对于待存储的空间数据,首先根据该空间数据的空间位置信息与Redis集群中各节点族中槽的数量,确定该空间数据需要存储到的第一目标节点族的编号,该第一目标节点族与空间数据的空间位置信息相关,从而使得每个节点族中只存储一个固定空间区域内的空间数据;继而,根据第一目标节点族的编号与空间位置信息,可以确定空间数据存储到第一目标节点族中的第一目标槽的槽号,第一目标槽同样与空间数据的空间位置信息相关,从而使得空间位置信息相近的空间数据存储能够存储到同一个槽中。由此,能够尽可能的将空间位置相近的空间数据存储到相同的节点族中相同槽中,加强了空间数据在空间位置上的聚集性,方便用户进行近邻查询,提升了数据访问效率。
另外,根据第一目标节点族的编号与空间位置信息,确定第一目标节点族中的第一目标槽的槽号,包括:根据第一目标节点族的编号,获取第一目标节点族中槽的槽号的最大值与最小值;根据第一目标节点族中槽的槽号的最大值与最小值、空间位置信息以及空间数据的文本信息,得到第一目标节点族中的第一目标槽的槽号。本实施方式提供了一种根据第一目标节点族的编号与空间位置信息,确定第一目标节点族中的第一目标槽的槽号的具体实现方式,第一目标槽的编号与空间数据的空间位置信息与文本信息相关,使得相邻的空间位置与相似的文本信息可以存储到相同的槽。
另外,每个节点族包含至少一Redis节点,方法还包括:判断节点族中各Redis节点的数据存储量是否达到第一预设阈值;若节点族中存在任一Redis节点的数据存储量达到第一预设阈值,对于数据存储量达到第一预设阈值的第一Redis节点,获取第一Redis节点中数据存储量达到第二预设阈值的第二目标槽;将第二目标槽迁移到数据存储量未达到第一预设阈值的第二Redis节点,第二Redis节点与第一Redis节点属于同一节点族。本实施例中,能够保持Redis集群中多个Redis节点之间的数据存储平衡,从而能够有效的避免Redis集群的数据访问倾斜。
另外,在将目标槽迁移到第一目标节点族中的第二Redis节点之前,还包括:判断第二Redis节点中被迁入第二目标槽后的数据存储量是否达到第一预设阈值;若第二Redis节点中被迁入第二目标槽后的数据存储量达到第一预设阈值,在第一Redis节点所属的节点族中新增目标Redis节点,并将第二目标槽迁移到目标Redis节点中;若第二Redis节点中被迁入第二目标槽后的数据存储量未达到第一预设阈值,进入将第二目标槽迁移到数据存储量未达到第一预设阈值的第二Redis节点的步骤。本实施例中,当第二Redis节点中被迁入第二目标槽后的数据存储量达到第一预设阈值时,将第二目标槽迁移到在第一Redis节点所属的节点族中新增的目标Redis节点中,从而可以保持Redis集群中多个Redis节点之间的数据存储平衡。
另外,根据确定的槽号,将空间数据存入槽号对应的第一目标槽,包括:根据空间数据的空间位置信息与空间数据的文本信息,得到空间数据的键值;采用键值-空间数据的数据结构,将空间数据存储到槽号对应的第一目标槽。本实施方式提供了一种根据确定的槽号,将空间数据存入槽号对应的第一目标槽的具体实现方式。
另外,每个节点族包含至少一Redis节点,方法还包括:获取各Redis节点的负载信息,并判断是否存在至少一Redis节点的负载超过第三预设阈值;若存在至少一Redis节点的负载超过第三预设阈值,对于负载超过第三预设阈值的每个Redis节点,拷贝Redis节点的镜像,并根据镜像在Redis集群中新增镜像Redis节点。本实施例中,由于节点族与空间区域相对应,使得负载超过第三预设阈值的Redis集中在单个节点族中,采用本实施例中的Redis集群的伸缩方法,只需拷贝热点访问节点的镜像来启用新的Redis节点,缩小了节点拷贝的规模,节约了Redis集群的系统资源,提升了Redis集群的伸缩效率。
另外,Redis集群根据空间数据的空间位置信息与空间数据的文本信息,得到空间数据的键值,并采用键值-空间数据的数据结构,将空间数据存储到槽号对应的第一目标槽;从槽号对应的第三目标槽中读取空间数据,包括:根据空间数据的空间位置信息与空间数据的文本信息,获取空间数据的键值;根据空间数据的键值,从槽号对应的第三目标槽中读取空间数据。本实施方式提供一种从槽号对应的第三目标槽中读取空间数据的具体实现方式。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是根据本发明第一实施方式中的数据存储方法应用的Redis集群的示意图;
图2是根据本发明第一实施方式中的数据存储方法的具体流程图;
图3是根据本发明第一实施方式中的空间区域的划分示意图;
图4是根据本发明第二实施方式中的数据存储方法的具体流程图;
图5是根据本发明第三实施方式中的数据存储方法的具体流程图;
图6是根据本发明第三实施方式中的Redis集群的示意图;
图7是根据本发明第四实施方式中的数据访问方法的具体流程图;
图8是图7中数据访问方法的步骤403的具体流程图;
图9是根据本发明第五实施方式中的数据访问方法的具体流程图;
图10是根据本发明第五实施方式中的Redis集群的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。
本发明的第一实施方式涉及一种数据存储方法,应用于Redis集群,Redis集群被划分为多个节点族,每个节点族中包含多个Redis节点(即服务器节点),每个Redis节点维护至少一槽,由此可知每个节点族包括多个槽;其中,Redis集群中有16384个槽,节点族的数量一般设置为偶数个,从而能够将16384槽均匀的分布在多个节点族中。举例来说,请参考图1,Redis被划分为4个节点族,分别为节点族1至节点族4,节点族1包括2个Redis节点,分别为Rnode1-1与Rnode1-2,节点族2包括3个Redis节点,分别为Rnode2-1、Rnode2-2以及Rnode2-3,节点族3包括两个Redis节点,分别为Rnode3-1与Rnode3-2,节点族4包括3个Redis节点,分别为Rnode4-1、Rnode4-2以及Rnode4-3,每个节点族的槽的数量为16384/4=4096个,节点族1包含槽0至槽4095、节点族2包含槽4096至槽8191、节点族3包含槽8192至槽12287、节点族4包含槽12288至槽16384,每个节点族中的各Redis节点维护的槽的数量可以按需设定。
本实施方式的数据存储方法的具体流程如图2所示。
步骤101,根据待存储的空间数据的空间位置信息与各节点族中槽的数量,确定空间数据对应的第一目标节点族的编号。
具体而言,当用户使用电子设备(例如手机)中需要记录用户位置轨迹的应用程序时,该应用程序所对应的Redis集群中的Redis节点能够读取用户的电子设备生成的空间数据,该空间数据至少包括用户的空间位置信息。Redis节点在读取某个用户的空间数据后,需要对其进行存储,先根据空间数据的空间位置信息与各节点族包含的槽的数量,得到该空间数据需要存储到的节点族的编号,即第一目标节点族的编号,第一目标节点族与空间数据的空间位置信息相关,从而使得每个节点族中只存储一个固定空间区域内的空间数据。对空间区域进行划分时需要结合Redis集群的节点族的划分,以图1中的Redis集群为例,请参考图3,则将一个空间区域被划分为A、B、C、D这4个区域,基于本步骤中定位空间数据对应的节点族的方法,可以使得A区域内的空间数据存储在节点族1中、B区域内的空间数据存储在节点族2中、C区域内的空间数据存储在节点族3中、D区域内的空间数据存储在节点族4中。
在一个例子中,根据空间数据的空间位置信息与各节点族中槽的数量,计算得到空间数据对应的第一目标节点族的编号的计算公式如下:
node_race_code=roundup(geohash(x,y)/race_num) 公式(1)
其中,node_race_code表示空间数据对应的第一目标节点族的编号,(x,y)表示空间数据的空间位置信息,race_num表示各节点族中槽的数量。本实施例中,通过geohash算法对空间位置信息的空间坐标(x,y)进行处理后,能够得到一个一维的整数,geohash对空间坐标进行映射时,空间位置越近映射值之间的差越小,从而可以较好的表征空间位置关系的远近。
race_num表示各节点族的槽的数量,race_num=16384/num,num表示Redis集群被划分的节点族的数量,例如图1中Redis集群被划分为4个节点族,则race_num为4096。
在上述公式(1)中,利用geohash(x,y)的值除以节点族的槽数race_num,再通过取整函数roundup,便可以得到第一目标节点族的编号node_race_code的值。以图1中的Redis集群为例,race_num为4096,所有geohash(x,y)的值小于4096的空间数据,都会存储在节点族1中;节点族2至节点族4依次类推可得,在此不再赘述。
步骤102,根据第一目标节点族的编号与空间位置信息,确定第一目标节点族中的第一目标槽的槽号。
具体而言,Redis节点在确定了空间数据需要存储第一目标节点族后,根据第一目标节点族的相关信息与该空间数据的空间位置信息,从第一目标节点族中选定空间数据需要存储的槽的槽号,即第一目标槽的槽号,第一目标槽同样与空间数据的空间位置信息相关,从而使得空间位置信息相近的空间数据存储能够存储到同一个槽中。
步骤103,根据确定的槽号,将空间数据存入槽号对应的第一目标槽。
具体而言,Redis节点在确定了空间数据存储的第一目标节点族的第一目标槽的槽号后,将该空间数据发送到负责维护该第一目标槽的Redis节点,该Redis节点将该空间数据存储到第一目标槽中。
本实施方式相对于现有技术而言,对于待存储的空间数据,首先根据该空间数据的空间位置信息与Redis集群中各节点族中槽的数量,确定该空间数据需要存储到的第一目标节点族的编号,该第一目标节点族与空间数据的空间位置信息相关,从而使得每个节点族中只存储一个固定空间区域内的空间数据;继而,根据第一目标节点族的编号与空间位置信息,可以确定空间数据存储到第一目标节点族中的第一目标槽的槽号,第一目标槽同样与空间数据的空间位置信息相关,从而使得空间位置信息相近的空间数据存储能够存储到同一个槽中。由此,能够尽可能的将空间位置相近的空间数据存储到相同的节点族中相同槽中,加强了空间数据在空间位置上的聚集性,方便用户进行近邻查询,提升了数据访问效率。
本发明的第二实施方式涉及一种数据存储方法,本实施方式是在第一实施方式基础上的改进,主要改进之处在于:能够尽可能的将文本信息相似的空间数据存储到同一个槽。
本实施方式的数据存储方法的具体流程如图4所示。
步骤201,根据待存储的空间数据的空间位置信息与各节点族中槽的数量,确定空间数据对应的第一目标节点族的编号。
具体而言,本步骤与第一实施例中步骤101大致相同,在此不再赘述。
步骤202,包括以下子步骤:
子步骤2021,根据第一目标节点族的编号,获取第一目标节点族中槽的槽号的最大值与最小值。
具体而言,Redis集群中各节点族所包含的槽的槽号的最大值dmax与最小值dmin在Redis集群中槽分配完毕时便可以确定,可以缓存在各Redis节点中。因此,在确定了第一目标节点族的编号后,便可以得到第一目标节点族中槽的槽号的最大值dmax与最小值dmin。
子步骤2022,根据第一目标节点族中槽的槽号的最大值与最小值、空间位置信息以及空间数据的文本信息,得到第一目标节点族中的第一目标槽的槽号。
具体而言,根据第一目标节点族中槽的槽号的最大值dmax、最小值dmin、表征空间数据的空间位置信息的空间坐标(x,y)以及空间数据的文本信息text,计算得到第一目标节点族中第一目标槽的槽号的计算公式如下:
Dloc=dmin+(crc16(x,y)+crc16(text))%(dmax-dmin) 公式(2)
其中,Dloc表示第一目标节点族中的第一目标槽的槽号,dmin表示第一目标节点族中槽的槽号的最小值,dmax表示第一目标节点族中槽的槽号的最大值,(x,y)表示空间数据的空间位置信息,text表示空间数据的文本信息。
在上述公式(2)中,先利用crc16将空间坐标(x,y)以及文本信息text映射为整数,从而可以融合空间数据中的空间坐标(x,y)与文本信息text,使得相邻的空间位置与相似的文本信息能够计算出相似的值,再将二者相加对第一目标节点族的槽号的最大值与最小值的差值(dmax-dmin)求模,可以得到空间数据存储的槽号的偏移量,继而将槽号的最小值dmin与偏移量求和,得到空间数据存储到的第一目标槽的槽号,第一目标槽的槽号与空间数据的空间位置信息与文本信息相关,使得相邻的空间位置与相似的文本信息可以存储到相同的槽。
步骤203,包括以下子步骤:
子步骤2031,根据空间数据的空间位置信息与空间数据的文本信息,得到空间数据的键值。
子步骤2032,采用键值-空间数据的数据结构,将空间数据存储到槽号对应的第一目标槽。
具体而言,在确定了空间数据存储的第一目标节点族的第一目标槽的槽号后,可以根据空间数据的的空间位置信息与空间数据的文本信息,得到空间数据的键值;具体的,可以用空间坐标(x,y)来表征空间位置信息,空间数据的文本信息记作text,继而可以根据以下公式计算的空间数据的键值Key。
Key=strcat(crc16(x,y),crc16(text)) 公式(3)
在上述公式(3)中,利用crc16将空间坐标(x,y)以及文本信息text映射为整数,再将这两个值作字符串拼接形成Key,使得Key中既包含空间数据的空间位置信息,也包含了空间数据的文本信息,使得具有相同的空间位置与文本信息的空间数据存储到同一个Key-Vaule数据结构中,Vaule表示空间数据。
然后,将空间数据发送到负责维护该第一目标槽的Redis节点,该Redis节点,在负责维护该第一目标槽的Redis节点在接收到空间数据后,以Key-Vaule数据结构将该空间数据存储到第一目标槽中,以便于在查询时提取相似空间位置与文本信息的空间数据,提升了数据访问效率。
本实施方式相对于第一实施方式而言,使得相邻的空间位置与相似的文本信息可以存储到相同的槽,加强了空间数据在文本信息上的聚集性,方便用户进行相似文本信息的空间数据的查询,进一步提升了数据访问效率。
本发明第三实施方式涉及一种数据存储方法,本实施方式是在第一实施方式基础上的改进,主要改进之处在于:实现了多个Redis节点的数据存储平衡。
本实施方式的数据存储方法的具体流程如图5所示。
其中,步骤301至步骤303与步骤101至步骤103大致相同,在此不再赘述,主要不同之处在于,增加了步骤304至步骤308,具体如下:
步骤304,判断节点族中各Redis节点的数据存储量是否达到第一预设阈值。若是,则进入步骤305;若否,则直接结束。
具体而言,Redis集群中各节点族所包含的Redis节点之间均相连,每个Redis节点可以按照预设频率向所属节点族中其他的Redis节点发送自身的状态信息,该状态信息中包括Redis节点自身的数据存储量与其维护的各槽的数据存储量,从而每个Redis节点中均存储着所属节点族中全部Redis节点的数据存储量。以Redis集群中任一节点族中的一个Redis节点为例,其可以按照预设周期遍历该节点族中所有的Redis节点的数据存储量,判断是否存在任一Redis节点的数据存储量达到第一预设阈值;若存在,则进入步骤305;若不存在,则判定该节点族中的多个Redis节点的数据存储平衡,直接结束。
步骤305,对于数据存储量达到第一预设阈值的第一Redis节点,获取第一Redis节点中数据存储量达到第二预设阈值的第二目标槽。
具体而言,仍以任一节点族为例,该节点族中数据存储量达到第一预设阈值的为第一Redis节点、数据存储量未达到第一预设阈值的为第二Redis节点,对该节点族中的每个第一Redis节点,遍历该第一Redis节点维护的各槽的数据存储量,获取第一Redis节点中数据存储量达到第二预设阈值的槽,即为第二目标槽,第二目标槽的数量可以为一个或多个。
步骤306,判断第二Redis节点中被迁入第二目标槽后的数据存储量是否达到第一预设阈值。若是,则进入步骤307;若否,则进入步骤308。
具体而言,以任一节点族中的一个第一Redis节点为例,从其所属的节点族中寻找数据存储量未达到第一预设阈值的第二Redis节点,对于第一Redis节点中的第二目标槽,需要将该第一Redis节点下的第二目标槽迁移到第二Redis节点中,以达到数据存储量的平衡。
在进行第二目标槽的迁移之前,需要判断该第二Redis节点中迁入第二目标槽后的数据存储量是否达到第一预设阈值,若该第二Redis节点中迁入第二目标槽后的数据存储量达到第一预设阈值,则说明无法进行第二目标槽的迁移,进入步骤307;反之,则说明可以进行进行第二目标槽的迁移,进入步骤308。需要说明的是,本步骤中,若需要将多个第二目标槽迁入到同一个第二Redis节点中,则需要判断该第二Redis节点中迁入多个第二目标槽后的数据存储量是否达到第一预设阈值,具体判断过程与上述过程类似,再次不再赘述。需要说明的是,多个第二目标槽可以分别迁移到不同的第二Redis节点中。
步骤307,在第一Redis节点所属的节点族中新增目标Redis节点,并将第二目标槽迁移到目标Redis节点中。
具体而言,由于与第一Redis节点同一节点族的第二Redis节点不支持第二目标槽的迁移,因此需要新增一目标Redis节点,Redis集群一般由Docker容器来运行,此时Docker容器在第一Redis节点所属的节点族中新增一个目标Redis节点,该目标Redis节点的数据存储量为0,此时将第一Redis节点中的第二目标槽全部迁移到新增的目标Redis节点中。请参考图6,Redis集群中节点族1中的Rnode1-1为第一Redis节点,本步骤中在节点族1中新增Redis节点Rnode1-3,并将Rnode1-1中的第二目标槽迁移到Rnode1-3。
步骤308,将第二目标槽迁移到数据存储量未达到第一预设阈值的第二Redis节点。
具体而言,以图3为例,Redis集群中节点族1中的Rnode1-1为第一Redis节点,Rnode1-2为第二Redis节点,本步骤中将Rnode1-1中的第二目标槽迁移到Rnode1-2。
本实施方式相对于第一实施方式而言,能够保持Redis集群的各节点族中多个Redis节点之间的数据存储平衡,从而能够有效的避免Redis集群的数据访问倾斜。本实施方式还可以作为在第二实施例基础上的改进,可以达到同样的技术效果。
本发明第四实施方式涉及一种数据访问方法,应用于Redis集群,Redis集群被划分为多个节点族,每个节点族中包含多个Redis节点(即服务器节点),每个Redis节点维护至少一槽,由此可知每个节点族包括多个槽;其中,Redis集群中有16384个槽,节点族的数量一般设置为偶数个,从而能够将16384槽均匀的分布在多个节点族中。举例来说,请参考图1,Redis被划分为4个节点族,分别为节点族1至节点族4,节点族1包括2个Redis节点,分别为Rnode1-1与Rnode1-2,节点族2包括3个Redis节点,分别为Rnode2-1、Rnode2-2以及Rnode2-3,节点族3包括两个Redis节点,分别为Rnode3-1与Rnode3-2,节点族4包括3个Redis节点,分别为Rnode4-1、Rnode4-2以及Rnode4-3,每个节点族的槽的数量为16384/4=4096个,节点族1包含槽0至槽4095、节点族2包含槽4096至槽8191、节点族3包含槽8192至槽12287、节点族4包含槽12288至槽16384,每个节点族中的各Redis节点维护的槽的数量可以按需设定。
本实施方式的数据查询方法的具体流程如图7所示,本实施方式与第一实施方式相对于,本实施例中的Redis节点按照第一至第三实施例中任一项的数据存储方法进行数据的存储。
子步骤401,根据待查询的空间数据的空间位置信息与各节点族中槽的数量,确定空间数据对应的第二目标节点族的编号。
具体而言,当用户通过电子设备(例如手机)查询自己的空间数据时,电子设备将包括待查询的空间数据的空间位置信息的查询请求发送到Redis节点中,Redis节点则根据待查询的空间位置信息与各节点族包含的槽的数量,得到该空间数据所存储的节点族的编号,即第二目标节点族的编号。需要说明的是,本实施例中,可以根据待查询的空间数据的空间位置信息与各节点族中槽的数量,计算得到空间数据对应的第二目标节点族的编号,第二目标节点族的编号的计算公式与第一实施例中的公式(1)类似,在此不再赘述。
步骤402,根据第二目标节点族的相关信息与空间位置信息,确定第二目标节点族中的第三目标槽的槽号。
具体而言,Redis节点在确定了空间数据所存储第二目标节点族后,根据第二目标节点族的编号与待查询的空间数据的空间位置信息,从第二目标节点族中确定空间数据所存储的槽的槽号,即第三目标槽的槽号。
需要说明的是,本步骤中,Redis集群中各节点族所包含的槽的槽号的最大值dmax与最小值dmin在Redis集群中槽分配完毕时便可以确定,可以缓存在各Redis节点中。因此,在确定了第一目标节点族的编号后,便可以得到第二目标节点族中槽的槽号的最大值dmax与最小值dmin。
在一个例子中,Redis节点可以根据第二目标节点族中槽的槽号的最大值dmax、最小值dmin、表征待查询的空间数据的空间位置信息的空间坐标(x,y)以及待查询的空间数据的文本信息text,计算得到第二目标节点族中第三目标槽的槽号,计算公式与第二实施例中的公式(2)类似,在此不再赘述。
步骤403,从槽号对应的第三目标槽中读取空间数据。
具体而言,Redis节点在确定了空间数据所存储的第二目标节点族的第三目标槽的槽号后,可以根据第三目标槽的槽号从负责维护第二目标槽的Redis节点中读取第三目标槽中的空间数据。
在一个例子中,请参考图8,步骤403包括以下子步骤:
子步骤4031,根据空间数据的空间位置信息与空间数据的文本信息,获取空间数据的键值。
具体而言,将包括该待查询的空间数据以及第三目标槽的槽号的查询请求发送到负责维护该第三目标槽的Redis节点,该Redis节点可以根据空间数据的空间位置信息与空间数据的文本信息,计算得到空间数据的键值Key,可以用空间坐标(x,y)来表征空间位置信息,空间数据的文本信息记作text,其具体计算公式与第二实施例中的公式(3)类似,在此不再赘述。
子步骤4032,根据空间数据的键值,从槽号对应的第三目标槽中读取空间数据。
具体而言,由于Redis节点的槽中是按照Key-Vaule数据结构来存储空间数据的,因此,在获取的空间数据的键值后,便可以按照Key-Vaule数据结构所映射的对应关系,从第二目标槽中读取键值Key对应的空间数据Vaule,并返回到用户的电子设备。
本实施方式相对于第一实施方式而言,Redis节点在存储空间数据时,尽可能的将空间位置相近的空间数据存储到相同的节点族中相同槽中,加强了空间数据在空间位置上的聚集性,从而在数据查询时,方便用户进行近邻查询,提升了数据访问效率。
本发明的第五实施方式涉及一种数据查询方法,本实施方式是在第四实施方式基础上的改进,主要改进之处在于:能够对热点访问的Redis点进行负载均衡。
本实施方式的数据查询方法的具体流程如图9所示。
其中,步骤501至步骤503与步骤401至步骤403大致相同,在此不再赘述,主要不同之处在于,增加了步骤504与步骤505,具体如下:
步骤504,获取各Redis节点的负载信息,并判断是否存在至少一Redis节点的负载超过第三预设阈值。
具体而言,Redis集群中各Redis节点之间均相连,每个Redis节点可以按照预设频率向其他的Redis节点发送自身的状态信息,该状态信息中包括Redis节点自身的负载信息(即访问Redis节点的请求数),从而每个Redis节点中均存储着Redis集群中全部Redis节点的负载信息。以Redis集群中的一个Redis节点为例,其可以按照预设周期轮询Redis集群中所有的Redis节点的负载信息,判断是否存在至少一Redis节点的负载超过第三预设阈值,若存在至少一Redis节点的负载超过第三预设阈值,则说明负载超过第三预设阈值的Redis节点为热点访问节点,进入步骤505;反之,则说明Redis集群中所有的Redis节点的负载均正常,直接结束。
步骤505,对于负载超过第三预设阈值的每个Redis节点,拷贝Redis节点的镜像,并根据镜像在Redis集群中新增镜像Redis节点。
具体而言,Redis集群一般由Docker容器来运行,请参考图10,以Redis集群中节点族2中的Redis节点Rnode2-3的负载超过第三预设阈值为例,Docker容器拷贝Rnode2-3的镜像,并利用该镜像在Redis集群中新增镜像Redis节点Rnode2-3-1,并利用Rnode2-3-1提供服务,以分摊Rnode2-3的负载压力。
在一个例子中,若在某次轮询Redis集群中所有的Redis节点的负载信息时,发现上一次轮询中发现的负载超过第三预设阈值的某个Redis节点的负载恢复到小于第三预设阈值,则删除该Redis节点的镜像节点,适应性的减小了Redis集群的资源消耗。
本实施方式相对于第四实施方式而言,由于节点族与空间区域相对应,使得负载超过第三预设阈值的Redis集中在单个节点族中,采用本实施例中的Redis集群的伸缩方法,只需拷贝热点访问节点的镜像来启用新的Redis节点,缩小了节点拷贝的规模,节约了Redis集群的系统资源,提升了Redis集群的伸缩效率。
本发明的第六实施方式涉及一种数据存储装置,应用于Redis集群,Redis集群被划分为多个节点族,每个节点族中包含多个Redis节点(即服务器节点),每个Redis节点维护至少一槽;其中,Redis集群中有16384个槽,节点族的数量一般设置为偶数个,从而能够将16384槽均匀的分布在多个节点族中。
本实施例中数据存储装置包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行第一至第三实施例中任一项的数据存储方法。
本发明的第七实施方式涉及一种数据访问装置,应用于Redis集群,Redis集群被划分为多个节点族,每个节点族中包含多个Redis节点(即服务器节点),每个Redis节点维护至少一槽;其中,Redis集群中有16384个槽,节点族的数量一般设置为偶数个,从而能够将16384槽均匀的分布在多个节点族中。
本实施例中数据存储装置包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行第四或第五实施例中数据访问方法。
本发明的第八实施方式涉及一种Redis节点,应用于Redis集群,Redis集群被划分为多个节点族,每个节点族中包含多个Redis节点(即服务器节点),每个Redis节点维护至少一槽;其中,Redis集群中有16384个槽,节点族的数量一般设置为偶数个,从而能够将16384槽均匀的分布在多个节点族中。Redis节点包括第六实施例中的数据存储装置与第七实施例中的数据访问装置。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (10)
1.一种数据存储方法,其特征在于,应用于Redis集群,所述Redis集群被划分为多个节点族,每个所述节点族只存储一个固定空间区域内的空间数据;所述方法包括:
根据待存储的空间数据的空间位置信息与各所述节点族中槽的数量,确定所述空间数据对应的第一目标节点族的编号;
根据所述第一目标节点族的编号与所述空间位置信息,确定所述第一目标节点族中的第一目标槽的槽号;
根据确定的所述槽号,将所述空间数据存入所述槽号对应的第一目标槽。
2.根据权利要求1所述的数据存储方法,其特征在于,所述根据所述第一目标节点族的编号与所述空间位置信息,确定所述第一目标节点族中的第一目标槽的槽号,包括:
根据所述第一目标节点族的编号,获取所述第一目标节点族中槽的槽号的最大值与最小值;
根据所述第一目标节点族中槽的槽号的最大值与最小值、所述空间位置信息以及所述空间数据的文本信息,得到所述第一目标节点族中的第一目标槽的槽号;
其中,所述根据所述第一目标节点族中槽的槽号的最大值与最小值、所述空间位置信息以及所述空间数据的文本信息,得到所述第一目标节点族中的第一目标槽的槽号,具体包括:
利用crc16将所述空间位置信息以及所述空间数据的文本信息映射为整数,再将映射后得到的整数相加,将相加结果对所述第一目标节点族的槽号的最大值与最小值的差值求模,得到所述空间数据存储的槽号的偏移量,继而将所述槽号的最小值与所述偏移量求和,得到所述空间数据存储到的第一目标槽的槽号。
3.根据权利要求1所述的数据存储方法,其特征在于,每个所述节点族包含至少一Redis节点,所述方法还包括:
判断所述节点族中各所述Redis节点的数据存储量是否达到第一预设阈值;
若所述节点族中存在任一所述Redis节点的数据存储量达到第一预设阈值,对于数据存储量达到第一预设阈值的第一Redis节点,获取所述第一Redis节点中数据存储量达到第二预设阈值的第二目标槽;
将所述第二目标槽迁移到数据存储量未达到第一预设阈值的第二Redis节点,所述第二Redis节点与所述第一Redis节点属于同一所述节点族。
4.根据权利要求3所述的数据存储方法,其特征在于,在所述将所述第二目标槽迁移到第一目标节点族中的第二Redis节点之前,还包括:
判断所述第二Redis节点中被迁入所述第二目标槽后的数据存储量是否达到第一预设阈值;
若所述第二Redis节点中被迁入所述第二目标槽后的数据存储量达到第一预设阈值,在所述第一Redis节点所属的所述节点族中新增目标Redis节点,并将所述第二目标槽迁移到所述目标Redis节点中;若所述第二Redis节点中被迁入所述第二目标槽后的数据存储量未达到第一预设阈值,进入所述将所述第二目标槽迁移到数据存储量未达到第一预设阈值的第二Redis节点的步骤。
5.根据权利要求1所述的数据存储方法,其特征在于,所述根据确定的所述槽号,将所述空间数据存入所述槽号对应的第一目标槽,包括:
根据所述空间数据的空间位置信息与所述空间数据的文本信息,得到所述空间数据的键值;
采用键值-空间数据的数据结构,将所述空间数据存储到所述槽号对应的第一目标槽。
6.一种数据访问方法,其特征在于,应用于Redis集群,所述Redis集群采用权利要求1至5中任一项所述的数据存储方法存储空间数据,所述Redis集群被划分为多个节点族,所述数据访问方法包括:
根据待查询的空间数据的空间位置信息与各所述节点族中槽的数量,确定所述空间数据对应的第二目标节点族的编号;
根据所述第二目标节点族的编号与所述空间位置信息,确定所述第二目标节点族中的第三目标槽的槽号;
从所述槽号对应的所述第三目标槽中读取所述空间数据。
7.根据权利要求6所述的数据访问方法,其特征在于,每个所述节点族包含至少一Redis节点,所述方法还包括:
获取各所述Redis节点的负载信息,并判断是否存在至少一所述Redis节点的负载超过第三预设阈值;
若存在至少一所述Redis节点的负载超过第三预设阈值,对于负载超过第三预设阈值的每个所述Redis节点,拷贝所述Redis节点的镜像,并根据所述镜像在所述Redis集群中新增镜像Redis节点。
8.根据权利要求6所述的数据访问方法,其特征在于,所述Redis集群根据所述空间数据的空间位置信息与所述空间数据的文本信息,得到所述空间数据的键值,并采用键值-空间数据的数据结构,将所述空间数据存储到所述槽号对应的第一目标槽;
所述从所述槽号对应的所述第三目标槽中读取所述空间数据,包括:
根据所述空间数据的空间位置信息与所述空间数据的文本信息,获取所述空间数据的键值;
根据所述空间数据的键值,从所述槽号对应的所述第三目标槽中读取所述空间数据。
9.一种数据存储装置,其特征在于,包括:至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至5中任一项所述的数据存储方法。
10.一种数据访问装置,其特征在于,包括:至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求6至8任一项所述的数据访问方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010155926.3A CN111475535B (zh) | 2020-03-09 | 2020-03-09 | 数据存储、访问方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010155926.3A CN111475535B (zh) | 2020-03-09 | 2020-03-09 | 数据存储、访问方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111475535A CN111475535A (zh) | 2020-07-31 |
CN111475535B true CN111475535B (zh) | 2024-02-06 |
Family
ID=71748069
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010155926.3A Active CN111475535B (zh) | 2020-03-09 | 2020-03-09 | 数据存储、访问方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111475535B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113656332B (zh) * | 2021-08-20 | 2023-05-26 | 中国科学院上海高等研究院 | 基于合并地址差值序列的cpu缓存数据预取方法 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6363396B1 (en) * | 1998-12-21 | 2002-03-26 | Oracle Corporation | Object hashing with incremental changes |
WO2009076854A1 (zh) * | 2007-12-03 | 2009-06-25 | Tencent Technology (Shenzhen) Company Limited | 数据缓存系统和大容量缓存的实现方法 |
US8768981B1 (en) * | 2010-08-27 | 2014-07-01 | Disney Enterprises, Inc. | System and method for distributing and accessing files in a distributed storage system |
CN105404679A (zh) * | 2015-11-24 | 2016-03-16 | 华为技术有限公司 | 数据处理方法和装置 |
CN106572181A (zh) * | 2016-11-08 | 2017-04-19 | 深圳市中博睿存科技有限公司 | 基于集群文件系统的对象存储接口负载均衡方法和系统 |
CN107423422A (zh) * | 2017-08-01 | 2017-12-01 | 武大吉奥信息技术有限公司 | 基于网格的空间数据分布式存储及检索方法和系统 |
CN109063194A (zh) * | 2018-08-30 | 2018-12-21 | 广东南方数码科技股份有限公司 | 基于空间编码的数据检索方法及装置 |
CN109067649A (zh) * | 2018-07-31 | 2018-12-21 | 平安科技(深圳)有限公司 | 节点处理方法及装置、存储介质和电子设备 |
CN109087645A (zh) * | 2018-10-24 | 2018-12-25 | 科大讯飞股份有限公司 | 一种解码网络生成方法、装置、设备及可读存储介质 |
CN109597834A (zh) * | 2018-10-22 | 2019-04-09 | 平安科技(深圳)有限公司 | 基于redis的海量数据存储方法、装置、介质和设备 |
CN109769028A (zh) * | 2019-01-25 | 2019-05-17 | 深圳前海微众银行股份有限公司 | Redis集群管理方法、装置、设备及可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI361404B (en) * | 2008-02-18 | 2012-04-01 | Ind Tech Res Inst | Storage and search method for flag event on two-dimensional space |
-
2020
- 2020-03-09 CN CN202010155926.3A patent/CN111475535B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6363396B1 (en) * | 1998-12-21 | 2002-03-26 | Oracle Corporation | Object hashing with incremental changes |
WO2009076854A1 (zh) * | 2007-12-03 | 2009-06-25 | Tencent Technology (Shenzhen) Company Limited | 数据缓存系统和大容量缓存的实现方法 |
US8768981B1 (en) * | 2010-08-27 | 2014-07-01 | Disney Enterprises, Inc. | System and method for distributing and accessing files in a distributed storage system |
CN105404679A (zh) * | 2015-11-24 | 2016-03-16 | 华为技术有限公司 | 数据处理方法和装置 |
CN106572181A (zh) * | 2016-11-08 | 2017-04-19 | 深圳市中博睿存科技有限公司 | 基于集群文件系统的对象存储接口负载均衡方法和系统 |
CN107423422A (zh) * | 2017-08-01 | 2017-12-01 | 武大吉奥信息技术有限公司 | 基于网格的空间数据分布式存储及检索方法和系统 |
CN109067649A (zh) * | 2018-07-31 | 2018-12-21 | 平安科技(深圳)有限公司 | 节点处理方法及装置、存储介质和电子设备 |
CN109063194A (zh) * | 2018-08-30 | 2018-12-21 | 广东南方数码科技股份有限公司 | 基于空间编码的数据检索方法及装置 |
CN109597834A (zh) * | 2018-10-22 | 2019-04-09 | 平安科技(深圳)有限公司 | 基于redis的海量数据存储方法、装置、介质和设备 |
CN109087645A (zh) * | 2018-10-24 | 2018-12-25 | 科大讯飞股份有限公司 | 一种解码网络生成方法、装置、设备及可读存储介质 |
CN109769028A (zh) * | 2019-01-25 | 2019-05-17 | 深圳前海微众银行股份有限公司 | Redis集群管理方法、装置、设备及可读存储介质 |
Non-Patent Citations (1)
Title |
---|
李凤华 ; 李丁焱 ; 金伟 ; 王竹 ; 郭云川 ; 耿魁 ; .面向海量电子凭据的分层可扩展存储架构.通信学报.2019,(05),83-91. * |
Also Published As
Publication number | Publication date |
---|---|
CN111475535A (zh) | 2020-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112100293A (zh) | 数据处理方法、数据访问方法、装置及计算机设备 | |
US20160306741A1 (en) | Data Migration Method and Apparatus, and Processor | |
CN110245135B (zh) | 一种基于numa架构的大规模流式图数据更新方法 | |
CN110781156A (zh) | 一种数据节点的分配方法、设备及介质 | |
CN111124309B (zh) | 一种分片映射关系确定方法、装置、设备及存储介质 | |
CN111475535B (zh) | 数据存储、访问方法及装置 | |
CN107918527B (zh) | 存储空间分配方法及装置以及文件存储方法及装置 | |
CN109213774B (zh) | 数据的存储方法及装置、存储介质、终端 | |
CN111506682B (zh) | 地图数据处理方法、数据查询方法、装置、电子设备 | |
US10095630B2 (en) | Sequential access to page metadata stored in a multi-level page table | |
CN111353012B (zh) | 空间文本数据缓存处理方法、装置、电子设备及存储介质 | |
CN115964002B (zh) | 一种电能表终端档案管理方法、装置、设备及介质 | |
CN110633053B (zh) | 存储容量均衡方法、对象存储方法及装置 | |
CN113905252B (zh) | 直播间的数据存储方法、装置、电子设备及存储介质 | |
CN111078160B (zh) | 基于调用比例及响应时长的数据迁移存储方法及装置 | |
CN113419792A (zh) | 一种事件处理方法、装置、终端设备和存储介质 | |
CN115129709A (zh) | 一种数据处理方法、服务端及系统 | |
KR102054068B1 (ko) | 그래프 스트림에 대한 실시간 분산 저장을 위한 분할 방법 및 분할 장치 | |
CN116010677B (zh) | 空间索引方法、装置及其电子设备 | |
CN111506790B (zh) | 抽取对象确定及数据刷新方法、系统、设备和存储介质 | |
CN116561374B (zh) | 基于半结构化存储的资源确定方法、装置、设备及介质 | |
KR102137892B1 (ko) | Geo-location 속성을 이용한 Geo-query 기반 리소스 검색 방법 | |
CN117075966B (zh) | 指令处理方法、装置、设备及可读存储介质 | |
CN117688194A (zh) | 一种基于Redis缓存的矢量切片出图管理方法 | |
CN117573676A (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 |