CN110737663A - 一种数据存储方法、装置、设备及存储介质 - Google Patents

一种数据存储方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN110737663A
CN110737663A CN201910979709.3A CN201910979709A CN110737663A CN 110737663 A CN110737663 A CN 110737663A CN 201910979709 A CN201910979709 A CN 201910979709A CN 110737663 A CN110737663 A CN 110737663A
Authority
CN
China
Prior art keywords
node
target object
data
target
fragment
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
CN201910979709.3A
Other languages
English (en)
Other versions
CN110737663B (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201910979709.3A priority Critical patent/CN110737663B/zh
Publication of CN110737663A publication Critical patent/CN110737663A/zh
Application granted granted Critical
Publication of CN110737663B publication Critical patent/CN110737663B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种数据存储方法、装置、设备及存储介质,所述方法包括:接收目标对象中数据的存储请求,所述存储请求携带所述目标对象的属性信息;根据所述目标对象的属性信息,确定所述目标对象的路由键;根据所述目标对象的路由键,确定所述目标对象的分片号码;根据所述目标对象的分片号码查询分片树,确定所述目标对象中数据的目标存储节点;基于所述目标存储节点,对所述目标对象中数据进行存储。本申请构建了可实现节点标识信息后缀匹配和精确匹配的分片树,通过目标对象的属性信息,确定目标存储节点,实现了对数据进行分片存储,并且可以对重要用户的数据进行单独分片存储,从而加快数据的读取速度,便于用户快速查询数据。

Description

一种数据存储方法、装置、设备及存储介质
技术领域
本申请涉及互联网通信技术领域,尤其涉及一种数据存储方法、装置、设备及存储介质。
背景技术
传统的关系型数据库大多采用B+树类型的索引结果,数据量的不断增大导致索引深度也不断增大,从而使得磁盘访问的IO次数增加,进而导致查询性能的下降;为了适应数据量的增大,通常只能通过不断地优化数据库来解决数据量的问题。同时,高并发访问请求也使得集中式数据存储成为***的瓶颈。在大数据时代中,单一的数据存储方法已经无法承受高访问次数的需求,尤其会影响特殊VIP用户的数据访问体验。
因此,有必要提供一种数据存储方法、装置、设备及存储介质,实现对数据进行分片存储,并且可以对重要用户的数据进行单独分片存储,从而加快数据的读取速度,便于用户快速查询数据。
发明内容
本申请提供了一种数据存储方法、装置、设备及存储介质,可以实现对数据进行分片存储,并且可以对重要用户的数据进行单独分片存储,从而加快数据的读取速度,便于用户快速查询数据。
一方面,本申请提供了一种数据存储方法,所述方法包括:
接收目标对象中数据的存储请求,所述存储请求携带所述目标对象的属性信息;
根据所述目标对象的属性信息,确定所述目标对象的路由键;
根据所述目标对象的路由键,确定所述目标对象的分片号码;
根据所述目标对象的分片号码查询分片树,确定所述目标对象中数据的目标存储节点;
基于所述目标存储节点,对所述目标对象中数据进行存储;
其中,所述分片树的构建方法包括:
获取第一样本对象的分片号码与第二样本对象的分片号码;
将所述第一样本对象的分片号码的后N位字符作为第一节点的标识信息,N为正整数;
将所述第二样本对象的分片号码作为第二节点的标识信息;
基于所述第一节点的标识信息与所述第二节点的标识信息,构建所述分片树。
另一方面提供了一种数据存储装置,所述装置包括:
存储请求接收模块,用于接收目标对象中数据的存储请求,所述存储请求携带所述目标对象的属性信息;
路由键确定模块,用于根据所述目标对象的属性信息,确定所述目标对象的路由键;
分片号码确定模块,用于根据所述目标对象的路由键,确定所述目标对象的分片号码;
目标存储节点确定模块,用于根据所述目标对象的分片号码查询分片树,确定所述目标对象中数据的目标存储节点;
数据存储模块,用于基于所述目标存储节点,对所述目标对象中数据进行存储;
分片号码获取模块,用于获取第一样本对象的分片号码与第二样本对象的分片号码;
第一标识信息确定模块,用于将所述第一样本对象的分片号码的后N位字符作为第一节点的标识信息,N为正整数;
第二标识信息确定模块,用于将所述第二样本对象的分片号码作为第二节点的标识信息;
分片树构建模块,用于基于所述第一节点的标识信息与所述第二节点的标识信息,构建分片树。
另一方面提供了一种数据存储设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上所述的数据存储方法。
另一方面提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的数据存储方法。
本申请提供的数据存储方法、装置、设备及存储介质,具有如下技术效果:
本申请构建了可实现节点标识信息后缀匹配和精确匹配的分片树,通过目标对象的属性信息,确定目标对象的路由键,并进一步确定目标对象的分片号码,通过所述分片号码查询分片树,确定目标存储节点,实现了对数据进行分片存储,并且可以对重要用户的数据进行单独分片存储,从而加快数据的读取速度,便于用户快速查询数据。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
图1是本申请实施例提供的一种数据存储***的示意图;
图2是本申请实施例提供的一种数据存储方法的流程示意图;
图3是本申请实施例提供的一种确定目标对象中数据的目标存储节点的方法的流程示意图;
图4是本申请实施例提供的一种构建目标存储节点的子节点的方法的流程示意图;
图5是本申请实施例提供的一种构建分片树的方法的流程示意图;
图6是本申请实施例提供的一种分片树节点的结构示意图;
图7是本申请实施例提供的一种分片树的结构示意图;
图8是本申请实施例提供的另一种分片树的结构示意图;
图9是本申请实施例提供的一种存储节点的结构示意图;
图10是本申请实施例提供的一种数据存储装置的结构示意图;
图11是本申请实施例提供的一种服务器的结构示意图;
图12是本申请实施例提供的一种区块链***的结构示意图;
图13是本申请实施例提供的区块结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参阅图1,图1是本申请实施例提供的一种数据存储***的示意图,如图1所示,该数据存储***可以至少包括服务器01和客户端02。
具体的,本说明书实施例中,所述服务器01可以包括一个独立运行的服务器,或者分布式服务器,或者由多个服务器组成的服务器集群。服务器01可以包括有网络通信单元、处理器和存储器等等。具体的,所述服务器01可以用于存储数据。
具体的,本说明书实施例中,所述客户端02可以包括智能手机、台式电脑、平板电脑、笔记本电脑、数字助理、智能可穿戴设备等类型的实体设备,也可以包括运行于实体设备中的软体,例如一些服务商提供给用户的网页页面,也可以为该些服务商提供给用户的应用。具体的,所述客户端02可以用于向所述服务器01发送数据存储请求。
本说明书实施例中涉及的名词解释如下。
实体:Entity,数据存储对象,例如关系型数据库或者非关系型数据的表;
数据分片:Data Sharding,数据分片,把数据根据某一特征信息分布的存储到多个实体存储节点或者虚拟节点。本申请的数据分片类似水平分区(HorizontalPartitioning);
路由键:Route Key,路由键也称数据分片键(Sharding Key),是数据分片存储的特征信息。
分片树:Sharding Tree,数据分片树。根据路由键查询分片树确定数据的存储位置信息;
分片标志:Flag或者Sharding Flag,数据分片标志信息,是数据存储节点的或者数据库实例的标识信息。
以下介绍本申请的一种数据存储方法,图2是本申请实施例提供的一种数据存储方法的流程示意图,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的***或服务器产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。具体的如图2所示,所述方法可以包括:
S201:接收目标对象中数据的存储请求,所述存储请求携带所述目标对象的属性信息。
在本说明书实施例中,所述方法的执行主体可以为服务器,所述目标对象中数据的存储请求可以为用户通过终端发送给服务器。
在本说明书实施例中,所述目标对象可以为数据的存储实体,例如所述目标对象可以为关系数据库的数据库实例或者数据库表,所述目标对象的属性信息可以包括用户的标识信息、数据的生成时间。所述目标对象的属性信息可以为目标对象的属性字段(KeyField),所述属性字段基于数据存储实体对象确定得到。
S203:根据所述目标对象的属性信息,确定所述目标对象的路由键;
在本说明书实施例中,所述路由键(Route Key)也称数据分片键(Sharding Key),是数据分片存储的特征信息,是数据分片查询和路由的关键属性字段(Key Field)。路由键是数据存储实体(Entity)的属性,决定数据存储在哪个数据节点上。
S205:根据所述目标对象的路由键,确定所述目标对象的分片号码;
在本说明书实施例中,路由键经过一定的算法或者翻译处理后生成分片号码(Sharding Number),分片号码查询匹配分片树(Sharding Tree)能唯一准确定位数据的存储节点信息(flag)。因为分片树是一个号码树(Sharding Number Tree),因此对于非号码的路由键需要通过一定的机制或者算法转换为号码串。例如,本申请将路由键转换成分片号码可以采用MD5算法、Hash算法、用户自定义函数等方式。分片号码是路由键的在一定形式上的反序。通过分片号码查询匹配分片树获取路由键值对应的数据分片节点或者数据库实例标志信息(flag)。
在一个具体的实施例中,将所述目标对象的路由键转换成所述目标对象的分片号码的代码如下:
Figure BDA0002234778010000061
Figure BDA0002234778010000071
S207:根据所述目标对象的分片号码查询分片树,确定所述目标对象中数据的目标存储节点;
在本说明书实施例中,所述分片树又称分片号码树,所述分片树既支持数据分片键值的末位匹配,也支持分片键值的精确匹配,即把某个或者某些设定的,活跃的客户或者VIP(Very Important Person)大客户的数据单独分片,隔离。
在本说明书实施例中,如图3所示,所述根据所述目标对象的分片号码查询分片树,确定所述目标对象中数据的目标存储节点可以包括:
S2071:确定所述目标对象的分片号码中的后预设位字符,并将所述后预设位字符作为当前字符串;
在本说明书实施例中,所述目标对象的分片号码中的后预设位字符是指所述目标对象的分片号码中的后N位字符,其中,N可以为1,2,3,……等整数,例如,所述目标对象的分片号码可以为“81011”,其中“11”,“1011”均为其对应的后预设位字符,在实际应用中,可以根据实际情况确定字符的位数。
S2073:判断所述分片树中是否存在与所述当前字符串相匹配的节点;
在本说明书实施例中,与所述当前字符串相匹配的节点是指标识信息与所述当前字符串中字符完全相同的节点。所述节点的标识信息可以为数据分片标志。
S2075:若所述分片树中存在与所述当前字符串相匹配的节点,增加所述后预设位字符的长度,并将增加长度之后的字符作为所述当前字符串;重复步骤:判断所述分片树中是否存在与所述当前字符串相匹配的节点;
在本说明书实施例中,通过不断增加后预设位字符的长度,可以得到与目标对象的分片号码实现最长字符匹配的节点。
在一个具体的实施例中,所述目标对象的分片号码可以为“81011”,先查找与字符串“11”匹配的节点,如果存在,再找与“1011”匹配的节点,最后找到“81011”,即可实现精确匹配。对应的代码如下:
Figure BDA0002234778010000081
其中,路由配置号码中的‘$’字符标识精准匹配。
在一个具体的实施例中,所述目标对象的分片号码为“71011”,先查找与字符串“11”匹配的节点,如果存在,再找与“1011”匹配的节点,由于不存在71011节点,所以将分片号码“71011”匹配到“1011”节点,实现最长字符匹配。
在本说明书实施例中,所述若所述分片树中存在与所述当前字符串相匹配的节点,增加所述后预设位字符的长度可以包括:
若所述分片树中存在与所述当前字符串相匹配的节点,判断所述当前字符串与所述目标对象的分片号码是否相同;
若不相同,增加所述后预设位字符的长度。
在本说明书实施例中,所述判断所述当前字符串与所述目标对象的分片号码是否相同的步骤之后,所述方法还可以包括:
若所述当前字符串与所述目标对象的分片号码相同,将所述当前字符串对应的节点确定为所述目标对象中数据的目标存储节点。
S2077:若所述分片树中不存在与所述当前字符串相匹配的节点,将所述当前字符串最后一次增加长度前的字符确定为目标字符;
在本说明书实施例中,当所述分片树中不存在与所述当前字符串相匹配的节点时,说明当前字符对应的目标对象无法实现精确匹配,就将当前字符对应的前一个字符确定为目标字符,并确定存储节点。
S2079:将所述目标字符匹配的节点确定为所述目标对象中数据的目标存储节点。
在本说明书实施例中,通过目标对象的分片号码的最长后缀匹配或精确匹配,确定目标对象中数据的存储节点,从而将不同用户的数据存储到不同的节点。
S209:基于所述目标存储节点,对所述目标对象中数据进行存储。
在本说明书实施例中,数据存储节点,即数据分片标志(flag,final_flag)对应的数据存储节点信息。数据存储节点可能实际数据存储节点比如数据库实例,也可能是虚拟数据存储节点等。分片标志(flag)对应到具体的数据存储节点或者数据库实例的地址信息:IP地址,端口号;认证信息:用户名称,密码等;以及副本信息等。所述存储节点的结构示意图如图9所示,其中,1,2,3,……,n均为存储节点的标识信息。
在一个具体的实施例中,使用protobuf协议描述的数据存储节点如下:
使用protobuf协议描述的数据存储对象:
Figure BDA0002234778010000102
Figure BDA0002234778010000111
数据的分片可以是最初的固定分片,比如关系数据库上的100库10表(100片),随着***的上线运行,根据每个分片的数据量,在进一步按照路由键的后缀再进一步增加分片,对于数据活跃的路由键也可以把某个或者某些特定的活跃路由键单独分到一个或者多个特定的分片。当然,对于新的分片,需要有数据的迁移。
在本说明书实施例中,所述基于所述目标存储节点,对所述目标对象中数据进行存储的步骤之前,所述方法还可以包括:
构建所述目标存储节点的子节点;
相应的,所述基于所述目标存储节点,对所述目标对象中数据进行存储包括:
基于所述目标存储节点的子节点,对所述目标对象中数据进行存储。
在一些实施例中,如图4所示,所述构建所述目标存储节点的子节点的步骤之前,所述方法还可以包括:
S2081:判断所述目标对象的标识信息是否为预设标识信息;
在本说明书实施例中,所述预设标识信息可以为VIP用户或指定用户的标识信息。
相应的,所述构建所述目标存储节点的子节点可以包括:
S2083:当所述目标对象的标识信息为预设标识信息时,构建所述目标存储节点的子节点。
在本说明书实施例中,通过构建目标存储节点的子节点,可以将特殊用户的数据进行单独存储,从而加快数据的读取速度,便于用户快速查询数据。
在一些实施例中,如图4所示,所述构建所述目标存储节点的子节点的步骤之前,所述方法还可以包括:
S2085:判断所述目标存储节点的剩余空间是否小于预设阈值;
相应的,所述构建所述目标存储节点的子节点可以包括:
S2087:当所述目标存储节点的剩余空间小于预设阈值时,构建所述目标存储节点的子节点。
在本说明书实施例中,当目标存储节点的存储空间不足时,构建目标存储节点的子节点,即可以通过增加子节点存储数据,还可以进行数据的迁移。
在本说明书实施例中,所述分片树的构建方法可以包括:
S301:获取第一样本对象的分片号码与第二样本对象的分片号码;
S303:将所述第一样本对象的分片号码的后N位字符作为第一节点的标识信息,N为正整数;
S305:将所述第二样本对象的分片号码作为第二节点的标识信息;
S307:基于所述第一节点的标识信息与所述第二节点的标识信息,构建所述分片树。
在一个具体的实施例中,如图5所示,所述分片树的构建方法可以包括:基于样本对象的路由键,确定样本对象的分片号码,所述样本对象包括第一样本对象和第二样本对象;然后基于第一样本对象与第二样本对象,确定第一节点、第二节点的标识信息,其中,所述第一节点用于存储后N位字符均与所述第一节点匹配的分片号码对应对象中数据,N为正整数;所述第二节点用于存储每个字符均与所述第二节点匹配的分片号码对应对象中数据;最后基于所述第一节点的标识信息与所述第二节点的标识信息,构建所述分片树,其中1-n为节点的标识信息。
在本说明书实施例中,分片树支持路由号码的末位匹配和精确匹配,两种方式。
分片号码树根据配置工具,动态生成和加载。分片号码树的变更,触发数据迁移(数据拷贝,数据删除)。
分片树(Sharding Tree),分片树可以是由数字0..9组成的一个10叉树。
分片树由根节点(root)和子节点组成。根节点上配置默认的存储节点信息。
如图6所示,每个节点主要包括五部分信息:
子节点(next number nodes):当前节点的子节点号码(数字)
后缀号码(suffix number):从根节点到当前节点路径的号码串
第一数据分片标志(flag):当前节点后缀匹配对应的分片信息
第二数据分片标志(final_flag):当前节点精准匹配对应的分片信息
有效子节点(next valid nodes):当前节点下有效节点(有分片标志的节点)列表。
在一个具体的实施例中,所述分片树的结构如图7所示,其中:每个节点的圆圈里面的数字,是当前节点的号码数字;圆圈下面的连线指向当前节点的直接子节点(nextnumber nodes);第一个方框里面的数字是后缀匹配数据分片标志(flag),第二个方框里面的数字是精准匹配的数据分片标志(final_flag),第三个方框下的虚连线指向当前节点的有效子节点(next valid nodes)。有效节点指的是节点存在后缀匹配分片信息(flag)或者精准匹配分片信息(final_flag)。
路由配置信息是数据存储实体(例如关系数据库的数据库实例或者数据库表)的属性。在数据存储实体上配置相关的路由信息。路由信息变更后,可热加载生效。
使用protobuf协议描述的路由配置信息:
在一个具体的实施例中,所述分片树的结构如图8所示,其中后缀号码11对应的分片标志为1,号码11的有效子节点为1011;
节点1011对应的分片标志为3,号码1011的有效子节点为21011,31011,2310841011,81011;
节点21011对应的分片标志为2;号码21011的有效子节点为8421011;
节点31011有两个分片标志,分别为3,5;标识后缀匹配的分片标志为3,精准匹配的分片标志为5;号码31011的有效子节点为2531011;
节点2310841011对应的精准匹配分片标志为5;号码2310841011没有有效子节点
节点81011对应的精准匹配分片标志为5;号码81011的有效子节点为2781011;
节点8421011对应的分片标志为3;号码8421011没有有效子节点;
节点2531011对应的精准匹配分片标志为5;号码2531011没有有效子节点;
节点2781011对应的精准匹配分片标志为5;号码2781011没有有效子节点;
所述分片树的构建代码如下:
Figure BDA0002234778010000141
Figure BDA0002234778010000151
其中,路由配置号码中的‘$’字符标识精准匹配。
在本说明书实施例中,构造变长的后缀号码树的目的是为了满足没有提供路由键的跨分片的查询(WALK等)或者聚合计算。由于数据的复杂分片,既有路由键的后缀匹配分片,也有路由键的精准匹配分片,因此在跨分片的查询(WALK等)或者聚合时,需要遍历分片树的每个节点,在每个分片节点根据后缀号码树获取当前节点的下一个不同分片标志的有效节点,然后过滤当前节点下的下一个不同分片标志中的数据。
按照上面的后缀号码树,遍历11分片子树的SQL语句如下:
分片flag=1上执行
SELECT*FROM entity where routekey like‘%11’AND routekey not like‘%1011’;
含义为:从分片1(flag=1)上读取路由键的末位包含“11”,并且末位不包含“1011”的数据。
分片flag=3优化后的执行语句
SELECT*FROM entity where routekey like‘%1011’
AND routekey not like‘%21011’
AND routekey<>‘31011’
AND routekey<>‘2310841011’
AND routekey<>‘81011’
AND routekey<>‘2781011’
AND routekey<>‘2531011’;
含义为:从分片3(flag=3)上读取路由键的末位包含“1011”,并且路由键末位不包含“21011”,以及路由键不等于“31011”,“2310841011”,“81011”,“2781011”,“2531011”的数据。
分片flag=2上执行的SQL语句:
SELECT*FROM entity where routekey like‘%21011’
AND routekey not like‘%8421011’;
含义为:从分片2(flag=2)上读取路由键的末位包含“21011”,并且路由键末位不包含“8421011”的数据。
分片flag=5上优化后的执行语句:
SELECT*FROM entity where routekey IN
(‘321011’,‘81011’,‘2310841011’,‘2781011’,‘2531011’);
含义为:从分片5(flag=5)上读取路由键等于“321011”,“81011”,“2310841011”,“2781011”,“2531011”的数据。
分片flag=3上执行的SQL语句:
SELECT*FROM entity where routekey like‘%8421011’;
含义为:从分片3(flag=3)上读取路由键末位为“8421011”的数据。
本申请的数据存储方法既适用于传统的关系型数据库上的数据分片和路由查询,也适用于非关系型数据库以及NewSQL的数据库***。其中,NewSQL是对各种新的可扩展/高性能数据库的简称,这类数据库不仅具有NoSQL(non-relational,非关系型数据库)对海量数据的存储管理能力,还保持了传统数据库支持ACID(Atomicity原子性,Consistency一致性,Isolation隔离性,Durability耐久性)和SQL(Structured Query Language,结构化查询语言)等特性。本申请的数据存储方法可以应用于广告***的数据访问接入模块中,数据访问接入模块支持虚拟分区。新的变长后缀匹配分片和精准匹配分片进一步丰富数据存储分片的灵活机制。特别是实现对特定用户的分片,例如把活跃的客户或者VIP大客户的数据单独分片、隔离。
在本说明书实施例中,可以基于区块链***存储目标对象中数据,所述区块链***包括多个节点,所述多个节点之间形成点对点网络。
在一些实施例中,所述区块链***可以为图12所示的结构,多个节点之间形成组成的点对点(P2P,Peer To Peer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在区块链***中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作***层和应用层。
图12示出的区块链***中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链***中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链***中节点提交的记录数据。
在一些实施例中,区块结构(Block Structure)可以为图13所示的结构,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Block chain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
由以上本说明书实施例提供的技术方案可见,本说明书实施例构建了可实现节点标识信息后缀匹配和精确匹配的分片树,通过目标对象的属性信息,确定目标对象的路由键,并进一步确定目标对象的分片号码,通过所述分片号码查询分片树,确定目标存储节点,实现了对数据进行分片存储,并且可以对重要用户的数据进行单独分片存储,从而加快数据的读取速度,便于用户快速查询数据。
本申请实施例还提供了一种数据存储装置,如图10所示,所述装置可以包括:
存储请求接收模块1010,用于接收目标对象中数据的存储请求,所述存储请求携带所述目标对象的属性信息;
路由键确定模块1020,用于根据所述目标对象的属性信息,确定所述目标对象的路由键;
分片号码确定模块1030,用于根据所述目标对象的路由键,确定所述目标对象的分片号码;
目标存储节点确定模块1040,用于根据所述目标对象的分片号码查询分片树,确定所述目标对象中数据的目标存储节点;
数据存储模块1050,用于基于所述目标存储节点,对所述目标对象中数据进行存储;
分片树构建模块1060,用于构建所述分片树;
其中,所述分片树构建模块1060可以包括:
分片号码获取子模块10601,用于获取第一样本对象的分片号码与第二样本对象的分片号码;
第一标识信息确定子模块10602,用于将所述第一样本对象的分片号码的后N位字符作为第一节点的标识信息,N为正整数;
第二标识信息确定子模块10603,用于将所述第二样本对象的分片号码作为第二节点的标识信息;
分片树构建子模块10604,用于基于所述第一节点的标识信息与所述第二节点的标识信息,构建分片树。
在一些实施例中,所述目标存储节点确定模块可以包括:
后预设位字符确定子模块,用于确定所述目标对象的分片号码中的后预设位字符,并将所述后预设位字符作为当前字符串;
判断子模块,用于判断所述分片树中是否存在与所述当前字符串相匹配的节点;
当前字符串确定子模块,用于若所述分片树中存在与所述当前字符串相匹配的节点,增加所述后预设位字符的长度,并将增加长度之后的字符作为所述当前字符串;重复步骤:判断所述分片树中是否存在与所述当前字符串相匹配的节点;
目标字符确定子模块,用于若所述分片树中不存在与所述当前字符串相匹配的节点,将所述当前字符串最后一次增加长度前的字符确定为目标字符;
第一目标存储节点确定子模块,用于将所述目标字符匹配的节点确定为所述目标对象中数据的目标存储节点。
在一些实施例中,所述当前字符串确定子模块可以包括:
分片号码判断单元,用于若所述分片树中存在与所述当前字符串相匹配的节点,判断所述当前字符串与所述目标对象的分片号码是否相同;
字符长度增加单元,用于若所述当前字符串与所述目标对象的分片号码不相同,增加所述后预设位字符的长度。
在一些实施例中,所述装置还可以包括:
第二目标存储节点确定子模块,用于若所述当前字符串与所述目标对象的分片号码相同,将所述当前字符串对应的节点确定为所述目标对象中数据的目标存储节点。
在一些实施例中,所述装置还可以包括:
子节点构建模块,用于构建所述目标存储节点的子节点;
在一些实施例中,所述数据存储模块可以包括:
数据存储子模块,用于基于所述目标存储节点的子节点,对所述目标对象中数据进行存储。
在一些实施例中,所述装置还可以包括:
预设标识信息判断模块,用于判断所述目标对象的标识信息是否为预设标识信息;
在一些实施例中,所述子节点构建模块可以包括:
第一子节点构建单元,用于当所述目标对象的标识信息为预设标识信息时,构建所述目标存储节点的子节点。
在一些实施例中,所述装置还可以包括:
剩余空间判断模块,用于判断所述目标存储节点的剩余空间是否小于预设阈值;
在一些实施例中,所述子节点构建模块可以包括:
第二子节点构建单元,用于当所述目标存储节点的剩余空间小于预设阈值时,构建所述目标存储节点的子节点。
本申请的数据存储装置可以应用于广告***的数据访问接入模块中,数据访问接入模块支持虚拟分区。新的变长后缀匹配分片和精准匹配分片进一步丰富数据存储分片的灵活机制。特别是实现对特定用户的分片,例如把活跃的客户或者VIP大客户的数据单独分片、隔离。
所述的装置实施例中的装置与方法实施例基于同样地发明构思。
本申请实施例提供了一种数据存储设备,该设备包括处理器和存储器,该存储器中存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或指令集由该处理器加载并执行以实现如上述方法实施例所提供的数据存储方法。
本申请的数据存储设备可以应用于广告***的数据访问接入模块中,数据访问接入模块支持虚拟分区。新的变长后缀匹配分片和精准匹配分片进一步丰富数据存储分片的灵活机制。特别是实现对特定用户的分片,例如把活跃的客户或者VIP大客户的数据单独分片、隔离。
本申请的实施例还提供了一种计算机可读存储介质,所述存储介质可设置于终端之中以保存用于实现方法实施例中一种数据存储方法相关的至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或指令集由该处理器加载并执行以实现上述方法实施例提供的数据存储方法。
本申请的计算机可读存储介质可以应用于广告***的数据访问接入模块中,数据访问接入模块支持虚拟分区。新的变长后缀匹配分片和精准匹配分片进一步丰富数据存储分片的灵活机制。特别是实现对特定用户的分片,例如把活跃的客户或者VIP大客户的数据单独分片、隔离。
可选地,在本说明书实施例中,存储介质可以位于计算机网络的多个网络服务器中的至少一个网络服务器。可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书实施例所述存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、功能所需的应用程序等;存储数据区可存储根据所述设备的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器还可以包括存储器控制器,以提供处理器对存储器的访问。
本申请实施例所提供的数据存储方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在服务器上为例,图11是本申请实施例提供的一种数据存储方法的服务器的硬件结构框图。如图11所示,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以***处理器(Central Processing Units,CPU)1110(处理器1110可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器1130,一个或一个以上存储应用程序1123或数据1122的存储介质1120(例如一个或一个以上海量存储设备)。其中,存储器1130和存储介质1120可以是短暂存储或持久存储。存储在存储介质1120的程序可以包括一个或一个以上模块,每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1110可以设置为与存储介质1120通信,在服务器1100上执行存储介质1120中的一系列指令操作。服务器1100还可以包括一个或一个以上电源1160,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1140,和/或,一个或一个以上操作***1121,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
输入输出接口1140可以用于经由一个网络接收或者发送数据。上述的网络具体实例可包括服务器1100的通信供应商提供的无线网络。在一个实例中,输入输出接口1140包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,输入输出接口1140可以为射频(RadioFrequency,RF)模块,其用于通过无线方式与互联网进行通讯。
本领域普通技术人员可以理解,图11所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,服务器1100还可包括比图11中所示更多或者更少的组件,或者具有与图11所示不同的配置。
由上述本申请提供的数据存储方法、装置、服务器或存储介质的实施例可见,本申请构建了可实现节点标识信息后缀匹配和精确匹配的分片树,通过目标对象的属性信息,确定目标对象的路由键,并进一步确定目标对象的分片号码,通过所述分片号码查询分片树,确定目标存储节点,实现了对数据进行分片存储,并且可以对重要用户的数据进行单独分片存储,从而加快数据的读取速度,便于用户快速查询数据。
需要说明的是:上述本申请实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备、存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (10)

1.一种数据存储方法,其特征在于,所述方法包括:
接收目标对象中数据的存储请求,所述存储请求携带所述目标对象的属性信息;
根据所述目标对象的属性信息,确定所述目标对象的路由键;
根据所述目标对象的路由键,确定所述目标对象的分片号码;
根据所述目标对象的分片号码查询分片树,确定所述目标对象中数据的目标存储节点;
基于所述目标存储节点,对所述目标对象中数据进行存储;
其中,所述分片树的构建方法包括:
获取第一样本对象的分片号码与第二样本对象的分片号码;
将所述第一样本对象的分片号码的后N位字符作为第一节点的标识信息,N为正整数;
将所述第二样本对象的分片号码作为第二节点的标识信息;
基于所述第一节点的标识信息与所述第二节点的标识信息,构建所述分片树。
2.根据权利要求1所述的方法,其特征在于,所述根据所述目标对象的分片号码查询分片树,确定所述目标对象中数据的目标存储节点包括:
确定所述目标对象的分片号码中的后预设位字符,并将所述后预设位字符作为当前字符串;
判断所述分片树中是否存在与所述当前字符串相匹配的节点;
若所述分片树中存在与所述当前字符串相匹配的节点,增加所述后预设位字符的长度,并将增加长度之后的字符作为所述当前字符串;重复步骤:判断所述分片树中是否存在与所述当前字符串相匹配的节点;
若所述分片树中不存在与所述当前字符串相匹配的节点,将所述当前字符串最后一次增加长度前的字符确定为目标字符;
将所述目标字符匹配的节点确定为所述目标对象中数据的目标存储节点。
3.根据权利要求2所述的方法,其特征在于,所述若所述分片树中存在与所述当前字符串相匹配的节点,增加所述后预设位字符的长度包括:
若所述分片树中存在与所述当前字符串相匹配的节点,判断所述当前字符串与所述目标对象的分片号码是否相同;
若不相同,增加所述后预设位字符的长度。
4.根据权利要求3所述的方法,其特征在于,所述判断所述当前字符串与所述目标对象的分片号码是否相同的步骤之后,所述方法还包括:
若所述当前字符串与所述目标对象的分片号码相同,将所述当前字符串对应的节点确定为所述目标对象中数据的目标存储节点。
5.根据权利要求1所述的方法,其特征在于,所述基于所述目标存储节点,对所述目标对象中数据进行存储的步骤之前,所述方法还包括:
构建所述目标存储节点的子节点;
相应的,所述基于所述目标存储节点,对所述目标对象中数据进行存储包括:
基于所述目标存储节点的子节点,对所述目标对象中数据进行存储。
6.根据权利要求5所述的方法,其特征在于,所述构建所述目标存储节点的子节点的步骤之前,所述方法还包括:
判断所述目标对象的标识信息是否为预设标识信息;
相应的,所述构建所述目标存储节点的子节点包括:
当所述目标对象的标识信息为预设标识信息时,构建所述目标存储节点的子节点。
7.根据权利要求5所述的方法,其特征在于,所述构建所述目标存储节点的子节点的步骤之前,所述方法还包括:
判断所述目标存储节点的剩余空间是否小于预设阈值;
相应的,所述构建所述目标存储节点的子节点包括:
当所述目标存储节点的剩余空间小于预设阈值时,构建所述目标存储节点的子节点。
8.一种数据存储装置,其特征在于,所述装置包括:
存储请求接收模块,用于接收目标对象中数据的存储请求,所述存储请求携带所述目标对象的属性信息;
路由键确定模块,用于根据所述目标对象的属性信息,确定所述目标对象的路由键;
分片号码确定模块,用于根据所述目标对象的路由键,确定所述目标对象的分片号码;
目标存储节点确定模块,用于根据所述目标对象的分片号码查询分片树,确定所述目标对象中数据的目标存储节点;
数据存储模块,用于基于所述目标存储节点,对所述目标对象中数据进行存储;
分片号码获取模块,用于获取第一样本对象的分片号码与第二样本对象的分片号码;
第一标识信息确定模块,用于将所述第一样本对象的分片号码的后N位字符作为第一节点的标识信息,N为正整数;
第二标识信息确定模块,用于将所述第二样本对象的分片号码作为第二节点的标识信息;
分片树构建模块,用于基于所述第一节点的标识信息与所述第二节点的标识信息,构建分片树。
9.一种数据存储设备,其特征在于,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1-7任一所述的数据存储方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1-7任一所述的数据存储方法。
CN201910979709.3A 2019-10-15 2019-10-15 一种数据存储方法、装置、设备及存储介质 Active CN110737663B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910979709.3A CN110737663B (zh) 2019-10-15 2019-10-15 一种数据存储方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910979709.3A CN110737663B (zh) 2019-10-15 2019-10-15 一种数据存储方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN110737663A true CN110737663A (zh) 2020-01-31
CN110737663B CN110737663B (zh) 2024-06-11

Family

ID=69269023

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910979709.3A Active CN110737663B (zh) 2019-10-15 2019-10-15 一种数据存储方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN110737663B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111523001A (zh) * 2020-04-23 2020-08-11 北京百度网讯科技有限公司 用于存储数据的方法、装置、设备以及存储介质
CN111600799A (zh) * 2020-05-20 2020-08-28 金蝶蝶金云计算有限公司 分片路由方法、服务器及计算机存储介质
CN112069210A (zh) * 2020-08-21 2020-12-11 北京首汽智行科技有限公司 一种saas平台多租户数据隔离方法
CN112084250A (zh) * 2020-09-15 2020-12-15 深圳市宝能投资集团有限公司 数据存储方法、数据查询方法和电子设备
CN115883508A (zh) * 2021-09-26 2023-03-31 中移物联网有限公司 一种号码处理方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1585548A (zh) * 2004-05-25 2005-02-23 中兴通讯股份有限公司 一种分布式访问位置寄存器vlr的实现方法
CN102646133A (zh) * 2012-03-28 2012-08-22 电子科技大学 基于元数据存储的二维表及其组织方法
CN104040539A (zh) * 2012-12-31 2014-09-10 华为技术有限公司 数据存储方法和装置、数据操作方法、***及接入服务器
CN109284073A (zh) * 2018-09-30 2019-01-29 北京金山云网络技术有限公司 数据存储方法、装置、***、服务器、控制节点及介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1585548A (zh) * 2004-05-25 2005-02-23 中兴通讯股份有限公司 一种分布式访问位置寄存器vlr的实现方法
CN102646133A (zh) * 2012-03-28 2012-08-22 电子科技大学 基于元数据存储的二维表及其组织方法
CN104040539A (zh) * 2012-12-31 2014-09-10 华为技术有限公司 数据存储方法和装置、数据操作方法、***及接入服务器
CN109284073A (zh) * 2018-09-30 2019-01-29 北京金山云网络技术有限公司 数据存储方法、装置、***、服务器、控制节点及介质

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111523001A (zh) * 2020-04-23 2020-08-11 北京百度网讯科技有限公司 用于存储数据的方法、装置、设备以及存储介质
CN111523001B (zh) * 2020-04-23 2023-03-14 北京百度网讯科技有限公司 用于存储数据的方法、装置、设备以及存储介质
CN111600799A (zh) * 2020-05-20 2020-08-28 金蝶蝶金云计算有限公司 分片路由方法、服务器及计算机存储介质
CN111600799B (zh) * 2020-05-20 2022-05-20 金蝶蝶金云计算有限公司 分片路由方法、服务器及计算机存储介质
CN112069210A (zh) * 2020-08-21 2020-12-11 北京首汽智行科技有限公司 一种saas平台多租户数据隔离方法
CN112084250A (zh) * 2020-09-15 2020-12-15 深圳市宝能投资集团有限公司 数据存储方法、数据查询方法和电子设备
CN115883508A (zh) * 2021-09-26 2023-03-31 中移物联网有限公司 一种号码处理方法、装置、电子设备及存储介质
CN115883508B (zh) * 2021-09-26 2024-06-07 中移物联网有限公司 一种号码处理方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN110737663B (zh) 2024-06-11

Similar Documents

Publication Publication Date Title
CN110737663B (zh) 一种数据存储方法、装置、设备及存储介质
US10459899B1 (en) Splitting database partitions
US10467245B2 (en) System and methods for mapping and searching objects in multidimensional space
JP6626211B2 (ja) ショートリンクを処理する方法及び装置並びにショートリンクサーバ
WO2019200714A1 (zh) 服务器连接方法、计算机可读存储介质、终端设备及装置
CN110489059B (zh) 数据集群存储的方法、装置及计算机设备
JP4671332B2 (ja) ユーザ識別情報を変換するファイルサーバ
US10073876B2 (en) Bloom filter index for device discovery
US11704320B2 (en) Processing queries using an index generated based on data segments
JP5759881B2 (ja) 情報処理システム
TWI734744B (zh) 路由表的同步方法、裝置及系統
CN102246172A (zh) 用于电子内容的分布式索引搜索的***及方法
CN111611225A (zh) 数据存储管理方法、查询方法、装置、电子设备及介质
CN111723073B (zh) 数据存储处理方法、装置、处理***以及存储介质
US20070168364A1 (en) Non-Mutating Tree-Structured File Identifiers
CN110727738B (zh) 基于数据分片的全局路由***、电子设备及存储介质
US8015195B2 (en) Modifying entry names in directory server
US20230385353A1 (en) Spatial search using key-value store
JP4718205B2 (ja) 選択的Web情報収集装置
JP7390356B2 (ja) クローニング後のテナント識別子変換のためのレコードの識別
CN114415971B (zh) 数据处理方法以及装置
KR102503958B1 (ko) 분산 네트워크 환경에서의 쿼리 배치 장치 및 그 방법
CN115525655A (zh) 一种数据查询切片的方法和***
CN112003736A (zh) 一种多节点配置信息确定方法、装置及存储介质
Abawajy et al. A framework for scalable distributed provenance storage system

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40021898

Country of ref document: HK

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant