CN105512162B - 一种基于Storm的流数据实时智能化处理框架 - Google Patents

一种基于Storm的流数据实时智能化处理框架 Download PDF

Info

Publication number
CN105512162B
CN105512162B CN201510625570.4A CN201510625570A CN105512162B CN 105512162 B CN105512162 B CN 105512162B CN 201510625570 A CN201510625570 A CN 201510625570A CN 105512162 B CN105512162 B CN 105512162B
Authority
CN
China
Prior art keywords
data
storm
operator
portrait
function
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
Application number
CN201510625570.4A
Other languages
English (en)
Other versions
CN105512162A (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.)
Hangzhou Yuancheng Technology Co Ltd
Original Assignee
Hangzhou Yuancheng 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 Hangzhou Yuancheng Technology Co Ltd filed Critical Hangzhou Yuancheng Technology Co Ltd
Priority to CN201510625570.4A priority Critical patent/CN105512162B/zh
Publication of CN105512162A publication Critical patent/CN105512162A/zh
Application granted granted Critical
Publication of CN105512162B publication Critical patent/CN105512162B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries
    • 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/24568Data stream processing; Continuous queries
    • 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/25Integrating or interfacing systems involving database management systems

Landscapes

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

Abstract

本发明涉及一种基于Storm的流数据实时智能化处理框架,包括如下步骤:需求配置层完成前端数据结构及过滤条件的设定;数据结构解析层完成包括SQL指令等的配置文件中数据的解析;算子功能拓扑层完成Storm的Topology的功能算子解析;系统完成层完成代码生成及编译打包等功能,并把最终的Topology提交执行;数据画像层完成结果数据在数据仓库中的存储,及数据画像的实时生成并展示给决策者。本发明的实施具有以下有益效果:能够很好地与上层决策者交互,并依照复杂数据处理功能的设定动态智能的生成相关Topology,提高代码复用性,并使得开发周期和成本大大降低,提升系统智能化和可执行效率,并实时的展示用户画像,为前端决策人员的决策提供快速且强有力的支持。

Description

一种基于Storm的流数据实时智能化处理框架
技术领域
本发明涉及大数据中流式数据智能化处理领域,特别是涉及一种基于Storm的智能完成流式数据处理的大数据处理平台。
背景技术
在当今知识经济快速发展的时代,数据的获取及分析越来越成为理解社会及人的动向的法宝。随着大量PC和移动客户端应用程序的使用,大量的数据的获得成为可能。因此,人们的焦点也越来越集中在如何能够快速的进行数据的查询及分析上。在日益膨胀的海量数据中,流数据占有相当大的比重。流数据的处理也得到了人们越来越多的关注。流数据具有数据量大、速度快,同时持续到达的特点,这使得很多传统意义上的数据库技术和批处理技术难以进行统计和分析。比如,在诸如Hadoop的批处理框架中,如果要处理从某个数据源发来的持续不断的流数据的话,如果没有特别适合的框架上的改进,处理起来是相当困难的。适时而生,Twitter在处理大量流式数据时,提出了一种全新的框架Storm,实现了处理流式数据上的一种全新的处理方法。同时,Storm在与类似的其他流数据处理框架的比较中,其性能也比其他框架更优。
Storm为大数据的实时计算提供了一套良好的解决方案。但是,在特定业务环境下,当实现完一个Storm的Topology并提交执行后,倘若需要更改输入数据的数据结构和计算过程的复杂逻辑时,需要开发者重新实现一套新的Storm的Topology,这样就降低了代码的可复用性,更改了业务逻辑,同时是一个纷繁而复杂的过程。因此,在决策者需要对经常变换的大量流式数据进行统计并实时决策时,这样的缺点便显露无疑。
为此,在Storm系统中引入MDA(Model Driven Architecture,模型驱动框架)概念,将决策者的需求在上层进行抽象,生成相应的PIM(Platform Independent Model,平台独立模型),然后实现PIM到PSM(Platform Specific Model)的转换,再由PSM生成底层代码,这样就实现了由平台无关的上层逻辑到平台相关的底层代码之间的转换,能很好地适应变化多样的上层数据源和数据处理逻辑,实现代码工作的简化。
同时,对于上层的决策者来说,在进行数据查询工作时,复杂的代码操作使得他们和数据之间产生了一定的隔阂,不易对数据进行良好的操作与分析。
发明内容
为解决以上问题,本发明提供了一种基于Storm的流数据实时智能化处理框架,通过上层用户的选择,智能化的将Storm的Topology生成并进行拓扑优化,完成海量流数据的快速处理。
为实现上述目的,本发明的技术方案为:
一种基于Storm的流数据实时智能化处理框架,包括如下步骤:
S10. 需求配置层完成前端数据结构及过滤条件的设定;
S20. 数据结构解析层完成包括数据结构及SQL指令的配置文件中数据的解析;
S30. 算子功能拓扑层完成Storm的Topology的功能算子解析;
S40. 系统完成层完成代码生成及编译打包的功能,并把最终的Topology提交执行;
S50. 数据画像层完成结果数据在数据仓库中的存储,及数据画像的实时生成并展示给决策者。
进一步的,步骤S10包括以下步骤:
S101. 指定系统参数,所述系统参数包括拓扑名称、运行方式和执行时间,所述运行方式包括单机模式或集群模式;
S102. 指定数据缓冲队列的具体IP地址及端口、队列名称信息;将数据的结构进行定义,包括数据字段的名称,字段类型信息;
S103. 根据用户的需求,指定数据的SQL过滤方法,通过SQL解析工具将用户需求转换为具体SQL指令;
S104. 指定结果数据在HBase数据仓库中的缓存格式,并指定其在数据画像中的展示方法。
进一步的,步骤S20包括以下步骤:
S201. 后端根据接收到的配置文件,设定数据源的数据结构,解析生成相应的JavaBean的结构;
S202. 使用SQL解析器解析所述配置文件中各个算子的可能的中间数据的结构,并据此结构生成相应的JavaBean结构,使得在具体解析算子功能时更容易的缓存数据及向下传递。
进一步的,步骤S30包括以下步骤:
S301. 根据配置文件中的功能配置信息,包括算子的名称、并行度、数据分发方式及具体的操作,使用SQL解析器解析生成相应的功能算子,完成MDA中PSM阶段的转化;
S302. 按照拓扑顺序最优化算法给功能算子指定特定的顺序,将Topology的整体复杂度降到最低。
进一步的,步骤S40包括以下步骤:
S401. 根据生成的功能算子及其拓扑优化,完成代码的生成;
S402.将生成的代码进行编译打包,并按照配置文件中指定的运行配置进行提交执行。
进一步的,步骤S50包括以下步骤:
S501. 将结果数据按照前端指定的格式存储到HBase数据仓库中,用以作为生成数据画像的数据;
S502. 按照用户设置的数据画像展示方式,从HBase数据仓库中获取结果数据并生成相应的数据画像展示到前端,并随数据实时更新。
本发明具有如下有益效果:
1) 能够通过PIM->PSM->Storm代码的转化,在上层使用可配置的方式,实现对多变的数据源和复杂的计算逻辑的实时计算的支持。
2) 实现类SQL功能,更好的和上层决策者进行交互,完成数据的查询及计算工作。
3) 在更加注重自动化与效率的当今,本模型可以使得后续的开发周期和成本大大降低,提高系统智能化和可执行效率。
4) 同时,系统可运用于大量使用Storm分布式系统,对多变的数据源和复杂的数据查询与计算逻辑的环境中,使得类SQL的智能化的Topology实现成为可能。
现有的基于Storm的实时计算系统中,前端使用配置文件指定功能算子时,直接配置到配置文件中,此方法无法完成嵌套等的复杂算子的配置,这样就大大降低了数据处理逻辑的有效性及实用性。并且,在数据结果计算完成时,仅是将数据结果放入kafka或redis等缓冲队列中,使得上层决策者无法直观的从数据中获取信息。而在本发明的基于Storm的流数据实时智能化处理框架中,使用SQL进行功能算子的设置,对于嵌套等的复杂问题可以非常简单且完美的解决;同时,将计算完毕的数据结果按照设定的格式存储到HBase数据仓库中,并实时访问此数据仓库,然后在前端实时更新数据画像,使人可对数据更直观的观察与分析,进一步做出决策。
附图说明
图1为本发明的基于Storm的流数据实时智能化处理框架的实施例的完整流程图;
图2为本发明的基于Storm的流数据实时智能化处理框架的流程框图。
具体实施方式
为了进一步理解本发明,下面结合实施例对本发明优选实施方案进行描述,但是应当理解,这些描述只是为进一步说明本发明的特征和优点,而不是对本发明权利要求的限制。
本发明提供了一种基于Storm的流数据实时智能化处理框架,依赖于前端用户的数据设定及功能选择,并将其写入格式化配置文件,进行后端Storm复杂拓扑的生成及海量流式数据的处理,如附图1所示,具体包括以下步骤:
首先前端进行数据源及数据格式的设定,同时把类SQL过滤方法设定为特定的功能算子,并使用SQL指定表达出来,写入配置文件中;
前端将设定好的配置文件通过网络传输给后端服务器;
后端首先依据配置文件,完成JavaBean结构的生成,其中包括数据源结构和各算子间传输的数据的结构;
根据配置文件中的功能配置信息,使用SQL解析器等将包括算子的名称、并行度及具体的操作等,生成相应的功能算子,完成MDA中PSM阶段的转化;
按照拓扑顺序最优化算法给功能算子指定特定的顺序,将Topology的整体复杂度降到最低;
根据生成的功能算子及其拓扑优化,完成Topology代码的生成;
将生成的代码进行编译打包,并按照配置文件中指定的运行配置进行提交执行;
将执行结果按照一定的格式插入到HBase数据仓库中;
实时访问HBase数据仓库,并据此在前端实时的更新数据画像,以便用户查看。
下面结合附图,对本发明的具体实施方式进行进一步详细描述;
图1给出了本发明的基于Storm的流数据实时智能化处理框架的一个实施例的完整流程;
步骤S10主要是进行配置信息的设定,包括以下步骤:
S101,首先设置系统参数;系统参数主要指Topology执行时的名称、执行的总时间、执行的方式等等信息。
S102,然后设置数据源的地址及数据结构;数据源地址主要是指流数据的缓冲队列的连接方式,如kafka或redis等及其IP和端口等信息。数据结构指数据源的数据的各字段及其数据类型,以便后端解析。
S103,设置数据的过滤算子。设置算子时,主要是在前端选择需要对数据执行的操作,并同时指定其在Storm集群中执行的并行度及各节点间数据分发方式等信息。使用SQL解析器将用户选择转换为具体的SQL指令,以便进行其复杂功能的定义。
S104,将设置好的配置文件提交远程服务器。
配置文件由前端提交后,服务端监听、接收并解析。
步骤S20主要是进行配置文件的解析,包括以下步骤:
S201,读取配置文件,并从中解析出数据的数据结构,其中包括了各个算子之间传递数据流时所包含的中间数据的结构,如执行select算子时,此节点与下一节点间的数据结构仅包含此节点select中的字段便可以了,这样可以大大节省传输带宽;
S202,将解析出的数据结构转换成JavaBean模型,等后面进行具体bean的转化。
S203,根据配置文件,使用SQL解析器,将SQL指令转换为具体的算子,并指定其并行性、数据传送的方式、具体操作及操作参数等;
S204,将S203解析出的各功能算子,依据复杂度最优化方法,训练得出在当前数据结构的前提下,处理这些算子时的最优化算子顺序,使得此Topology在不影响本身性能的前提下,所耗整个集群的CPU、内存及带宽等资源均最小化。
S205,将解析出的数据及功能算子的结构整合成完整的且最优化的topology。
配置文件解析完毕后,后面将得到的所有模型进行具体平台的转化,即MDA中的PIM->PSM的转化。
步骤S30主要是将解析配置文件生成并优化后的模型转化成具体的代码层的Topology。
在步骤S30代码转化时,首先生成数据源JavaBean,并完成数据源中原始数据到具体JavaBean对象的转化,同时将S201步骤中解析出来的中间数据的结构进行具体的JavaBean对象的转化,然后完成具体Topology的生成。
步骤S40则主要是进行Topology的整体编译、打包、执行,并将结果进行反馈,包括以下步骤:
S401,将生成的完整Topology使用ant等相关工具进行编译打包;
S402,将打包完毕的代码提交到Storm集群执行,执行时按照配置文件中指定的系统参数来设定;
S403,将流数据处理结果按照前端指定的格式缓存HBase数据仓库中,以便后续的访问。
S404,前端进行数据画像的展示,从HBase数据仓库中实时的读取最新数据,并传递到前端,以便用户可以更直观的查看数据和决策。
以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

Claims (3)

1.一种基于Storm的流数据实时智能化处理框架,其特征在于,包括如下步骤:
S10.需求配置层完成前端数据结构及过滤条件的设定,具体包括:
S101.指定系统参数,所述系统参数包括拓扑名称、运行方式和执行时间,所述运行方式包括单机模式或集群模式;
S102.指定数据缓冲队列的具体IP地址及端口、队列名称信息;将数据的结构进行定义,包括数据字段的名称,字段类型信息;
S103.根据用户的需求,指定数据的SQL过滤方法,通过SQL解析工具将用户需求转换为具体SQL指令;
S104.指定结果数据在HBase数据仓库中的缓存格式,并指定其在数据画像中的展示方法;
S20.数据结构解析层完成包括数据结构及SQL指令的配置文件中数据的解析,具体包括:
S201.后端根据接收到的配置文件,设定数据源的数据结构,解析生成相应的JavaBean的结构;
S202.使用SQL解析器解析所述配置文件中各个算子的可能的中间数据的结构,并据此结构生成相应的JavaBean结构,使得在具体解析算子功能时更容易的缓存数据及向下传递;
S30.算子功能拓扑层完成Storm的Topology的功能算子解析,具体包括:
S301.根据配置文件中的功能配置信息,包括算子的名称、并行度、数据分发方式及具体的操作,使用SQL解析器解析生成相应的功能算子,完成MDA中PSM阶段的转化;
S302.按照拓扑顺序最优化算法给功能算子指定特定的顺序,将Topology的整体复杂度降到最低;
S40.系统完成层完成代码生成及编译打包的功能,并把最终的Topology提交执行;
S50.数据画像层完成结果数据在数据仓库中的存储,及数据画像的实时生成并展示给决策者。
2.根据权利要求1所述的基于Storm的流数据实时智能化处理框架,其特征在于,步骤S40包括以下步骤:
S401.根据生成的功能算子及其拓扑优化,完成代码的生成;
S402.将生成的代码进行编译打包,并按照配置文件中指定的运行配置进行提交执行。
3.根据权利要求1所述的基于Storm的流数据实时智能化处理框架,其特征在于,步骤S50包括以下步骤:
S501.将结果数据按照前端指定的格式存储到HBase数据仓库中,用以作为生成数据画像的数据;
S502.按照用户设置的数据画像展示方式,从HBase数据仓库中获取结果数据并生成相应的数据画像展示到前端,并随数据实时更新。
CN201510625570.4A 2015-09-28 2015-09-28 一种基于Storm的流数据实时智能化处理框架 Active CN105512162B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510625570.4A CN105512162B (zh) 2015-09-28 2015-09-28 一种基于Storm的流数据实时智能化处理框架

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510625570.4A CN105512162B (zh) 2015-09-28 2015-09-28 一种基于Storm的流数据实时智能化处理框架

Publications (2)

Publication Number Publication Date
CN105512162A CN105512162A (zh) 2016-04-20
CN105512162B true CN105512162B (zh) 2019-04-16

Family

ID=55720146

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510625570.4A Active CN105512162B (zh) 2015-09-28 2015-09-28 一种基于Storm的流数据实时智能化处理框架

Country Status (1)

Country Link
CN (1) CN105512162B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107545014A (zh) * 2016-06-28 2018-01-05 国网天津市电力公司 基于Storm的流计算即时处理系统
CN106126721A (zh) * 2016-06-30 2016-11-16 北京奇虎科技有限公司 一种实时计算平台的数据处理方法和装置
CN106406858B (zh) * 2016-08-30 2019-08-16 国电南瑞科技股份有限公司 一种基于配置文件的流式统计定义及运行方法
CN106250571A (zh) * 2016-10-11 2016-12-21 北京集奥聚合科技有限公司 一种etl数据处理的方法及系统
CN107229747A (zh) * 2017-06-26 2017-10-03 湖南星汉数智科技有限公司 一种基于流式处理框架的大规模数据处理装置及方法
CN107678852B (zh) * 2017-10-26 2021-06-22 携程旅游网络技术(上海)有限公司 基于流数据实时计算的方法、系统、设备及存储介质
CN107908797A (zh) * 2017-12-18 2018-04-13 上海中畅数据技术有限公司 一种实时etl数据流转换处理技术方法与系统
CN108628605A (zh) * 2018-04-28 2018-10-09 百度在线网络技术(北京)有限公司 流式数据处理方法、装置、服务器和介质
CN108984155B (zh) * 2018-05-17 2021-09-07 创新先进技术有限公司 数据处理流程设定方法和装置
CN110704551B (zh) * 2018-06-21 2023-02-17 中兴通讯股份有限公司 数据处理方法、装置、设备及计算机可读存储介质
CN109284195A (zh) * 2018-08-27 2019-01-29 广东电网有限责任公司信息中心 一种实时画像数据计算方法及系统
CN110909024A (zh) * 2018-09-14 2020-03-24 阿里巴巴集团控股有限公司 数据处理方法、装置、计算设备及流计算系统
CN109345377B (zh) * 2018-09-28 2020-03-27 北京九章云极科技有限公司 一种数据实时处理系统及数据实时处理方法
CN109766363B (zh) * 2019-01-08 2021-06-11 北京江融信科技有限公司 流式数据处理方法、系统、电子设备及存储介质
CN109815257A (zh) * 2019-01-16 2019-05-28 四川驹马科技有限公司 可伸缩实时高可用画像算法服务方法及其系统
CN114091688B (zh) * 2021-11-25 2022-05-20 北京九章云极科技有限公司 一种计算资源获取方法、装置、电子设备和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103699599A (zh) * 2013-12-13 2014-04-02 华中科技大学 一种基于Storm实时流计算框架的消息可靠处理保障方法
CN103942330A (zh) * 2014-04-30 2014-07-23 深圳先进技术研究院 一种大数据的处理方法、系统
CN103955502A (zh) * 2014-04-24 2014-07-30 科技谷(厦门)信息技术有限公司 一种可视化olap的应用实现方法及系统
CN104050261A (zh) * 2014-06-16 2014-09-17 深圳先进技术研究院 基于Storm的可变逻辑的通用数据处理系统及方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10007702B2 (en) * 2013-12-19 2018-06-26 Siemens Aktiengesellschaft Processing an input query

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103699599A (zh) * 2013-12-13 2014-04-02 华中科技大学 一种基于Storm实时流计算框架的消息可靠处理保障方法
CN103955502A (zh) * 2014-04-24 2014-07-30 科技谷(厦门)信息技术有限公司 一种可视化olap的应用实现方法及系统
CN103942330A (zh) * 2014-04-30 2014-07-23 深圳先进技术研究院 一种大数据的处理方法、系统
CN104050261A (zh) * 2014-06-16 2014-09-17 深圳先进技术研究院 基于Storm的可变逻辑的通用数据处理系统及方法

Also Published As

Publication number Publication date
CN105512162A (zh) 2016-04-20

Similar Documents

Publication Publication Date Title
CN105512162B (zh) 一种基于Storm的流数据实时智能化处理框架
CN107133267B (zh) 查询elasticsearch集群的方法、装置、电子设备和可读存储介质
US10579627B2 (en) Database operation using metadata of data sources
US10162613B1 (en) Re-usable rule parser for different runtime engines
US20140114952A1 (en) Optimizing queries of parallel databases
US9734201B2 (en) Optimizing parallel queries using interesting distributions
CN105677812A (zh) 一种数据查询方法及数据查询装置
CN104424018B (zh) 分布式计算事务处理方法及装置
CN102609451A (zh) 面向流式数据处理的sql查询计划生成方法
US11475004B2 (en) Optimizing database queries
US10977262B2 (en) Data export job engine
CN108369591A (zh) 用于缓存和参数化ir的系统和方法
US11232105B2 (en) Unified metrics computation platform
CN114356971A (zh) 数据处理方法、装置以及系统
CN111400337A (zh) 一种面向大数据分析的交互式建模算子组件及执行方法
CN107704235A (zh) 图形化建模中数据流程图的解析方法、系统及存储介质
CN112199154A (zh) 一种基于分布式协同采样中心式优化的强化学习训练系统及方法
JP2019527441A (ja) 分散コンピューティングフレームワーク及び分散コンピューティング方法(distributed computing framework and distributed computing method)
CN109471621A (zh) 一种基于大数据的Linux系统下的工具构建方法
US20190042630A1 (en) Downloading visualization data between computer systems
CN110175287A (zh) 一种基于Flink的矩阵分解隐式反馈推荐方法和系统
US10331715B2 (en) Metadata enrichment with a keyword definition editor
CN114036182A (zh) 一种数据查询方法、计算机设备和存储介质
US20130080474A1 (en) Accelerating recursive queries
Steinkamp et al. HyDash: A dashboard for real-time business intelligence based on the hyPer Main memory database system

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant