CN112100186B - 基于分布式系统的数据处理方法、装置、计算机设备 - Google Patents
基于分布式系统的数据处理方法、装置、计算机设备 Download PDFInfo
- Publication number
- CN112100186B CN112100186B CN202010868600.5A CN202010868600A CN112100186B CN 112100186 B CN112100186 B CN 112100186B CN 202010868600 A CN202010868600 A CN 202010868600A CN 112100186 B CN112100186 B CN 112100186B
- Authority
- CN
- China
- Prior art keywords
- data
- empty
- deleting
- deleted
- main table
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 18
- 238000012217 deletion Methods 0.000 claims abstract description 117
- 230000037430 deletion Effects 0.000 claims abstract description 117
- 238000012545 processing Methods 0.000 claims abstract description 82
- 238000001914 filtration Methods 0.000 claims abstract description 43
- 238000000034 method Methods 0.000 claims abstract description 32
- 238000003860 storage Methods 0.000 claims abstract description 19
- 238000004590 computer program Methods 0.000 claims description 13
- 238000013507 mapping Methods 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 8
- 238000009826 distribution Methods 0.000 claims description 2
- 238000007726 management method Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000013515 script Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000012216 screening Methods 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/23—Updating
-
- 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/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种基于分布式系统的数据处理方法、装置、计算机设备和存储介质。所述方法包括:接收数据删除请求;所述数据删除请求中包含对应的数据过滤条件;利用消息列队分发所述数据过滤条件对应的数据删除任务至对应的至少两个线程;通过所述线程查询对应的删除数据;所述删除数据包含级联关系;根据所述级联关系,检测到所述级联关系对应的每一层级中的数据均不为空时,以所述最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端。采用本方法能够高效稳定清除过期数据,节省存储资源,有效提高数据的处理效率,同时也提高了系统运行性能。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种基于分布式系统的数据处理方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的发展,互联网的出现给现代生活带来了极大的便利,在大型分布式集群系统中,通常需要对一些关系型数据进行持久化存储,例如,智能核算调度的执行记录数据。随着业务的扩展,系统中存储的执行记录数据量巨大,部分客户累计的数据量甚至过亿,导致的问题是过期无价值的执行记录会占用过多存储资源,使得客户打开调度执行记录表系统运行缓慢,无法查看近期系统执行记录的情况。
然而,目前的数据处理方式中,针对上述过期无价值的执行记录占用过多存储资源的情况时,通常通过系统数据库管理人员对于过期无价值的执行记录数据进行人工备份迁移,当业务发生变化时,需要修改SQL脚本之后,定期执行SQL脚本清理缓存数据,这种人工处理的方式,需要进行大量的重复工作,容易导致数据处理的效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高数据处理效率的基于分布式系统的数据处理方法、装置、计算机设备和存储介质。
一种基于分布式系统的数据处理方法,所述方法包括:
接收数据删除请求;所述数据删除请求中包含对应的数据过滤条件;
利用消息列队分发所述数据过滤条件对应的数据删除任务至对应的至少两个线程;
通过所述线程查询对应的删除数据;所述删除数据包含级联关系;
根据所述级联关系,检测到所述级联关系对应的每一层级中的数据均不为空时,以所述最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端。
在其中一个实施例中,所述通过所述线程查询对应的删除数据包括:
根据SQL语句中的查询条件,基于对象关系映射关系框架从数据库中查询对应的删除数据。
在其中一个实施例中,所述数据过滤条件包括数据的类型、数据的时间以及数据的功能;
所述根据SQL语句中的查询条件,基于对象关系映射关系框架从数据库中查询对应的删除数据,包括:
根据所述数据的类型、数据的时间以及数据的功能,通过设置关键字的取值范围,利用物理分页从数据库中查询对应的删除数据。
在其中一个实施例中,所述根据所述级联关系,检测到所述级联关系对应的每一层级中的数据均不为空时包括:
根据所述级联关系,获取所述删除数据对应的主表标识,并判断所述主表标识对应的主表数据是否为空;
当所述主表数据不为空时,则获取所述主表中预设数量的数据,并根据所述主表标识查询对应的第一分录子表数据是否为空;
当所述第一分录子表数据不为空时,则获取所述第一分录子表数据中预设数量的数据,并判断所述第一分录子表数据对应的下一层级数据是否为空,直至所述级联关系对应的最小层级数据。
在其中一个实施例中,所述当所述第一分录子表数据不为空时,则获取所述第一分录子表数据中预设数量的数据,并判断所述第一分录子表数据对应的下一层级数据是否为空,直至所述级联关系对应的最小层级数据之后,所述方法还包括:
当检测所述最小层级数据不为空时,则对所述最小层级数据进行批量删除操作。
在其中一个实施例中,所述以所述最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端包括:
在所述最小层级数据删除完成之后,对所述最小层级数据的上一层级数据进行删除操作,直到将主表中的数据删除完成之后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求所在端。
在其中一个实施例中,当所述删除数据包含的级联关系为三层级联时;
所述通过所述线程查询对应的删除数据之后,所述方法还包括:
根据所述级联关系,获取所述删除数据对应的主表标识,并判断所述主表标识对应的主表数据是否为空;
当所述主表数据不为空时,则获取所述主表中预设数量的数据,并根据所述主表标识查询对应的第一分录子表数据是否为空;
当所述第一分录子表数据不为空时,则获取所述第一分录子表中预设数量的数据,并根据所述第一分录子表的标识查询第二分录子表数据是否为空;
当所述第二分录子表数据不为空时,则对所述第二分录子表中预设数量的数据进行批量删除操作;
当所述第二分录子表中的数据删除后,对所述第一分录子表中预设数量的数据进行删除操作;
当所述第一分录子表中的数据删除后,对所述主表中预设数量的数据进行删除操作;
当所述主表中数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端。
一种基于分布式系统的数据处理装置,所述装置包括:
接收模块,用于接收数据删除请求;所述数据删除请求中包含对应的数据过滤条件;
分发模块,用于利用消息列队分发所述数据过滤条件对应的数据删除任务至对应的至少两个线程;
查询模块,用于通过所述线程查询对应的删除数据;所述删除数据包含级联关系;
数据处理模块,用于根据所述级联关系,检测到所述级联关系对应的每一层级中的数据均不为空时,以所述最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
接收数据删除请求;所述数据删除请求中包含对应的数据过滤条件;
利用消息列队分发所述数据过滤条件对应的数据删除任务至对应的至少两个线程;
通过所述线程查询对应的删除数据;所述删除数据包含级联关系;
根据所述级联关系,检测到所述级联关系对应的每一层级中的数据均不为空时,以所述最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
接收数据删除请求;所述数据删除请求中包含对应的数据过滤条件;
利用消息列队分发所述数据过滤条件对应的数据删除任务至对应的至少两个线程;
通过所述线程查询对应的删除数据;所述删除数据包含级联关系;
根据所述级联关系,检测到所述级联关系对应的每一层级中的数据均不为空时,以所述最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端。
上述基于分布式系统的数据处理方法、装置、计算机设备和存储介质,当系统中存储的执行记录数据量巨大,需要对过期无价值的数据进行删除时,服务器通过接收数据删除请求,数据删除请求中包含对应的数据过滤条件。服务器利用消息列队分发数据过滤条件对应的数据删除任务至对应的至少两个线程,并通过线程查询对应的删除数据,删除数据包含级联关系。每个线程根据级联关系,检测到级联关系对应的每一层级中的数据均不为空时,以最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在端。由此使得,能够高效稳定的清除过期数据,节省存储资源,快速过滤不符合过滤条件的数据,确保按照数据的级联逻辑关系删除对应的数据,避免了传统方式中大量的重复操作,即使当业务发生变化时,也能够高效稳定的进行级联删除亿级过期数据,从而有效提高了过期数据的处理效率,同时也提高了系统运行性能,给用户带来便捷,方便用户查看近期有价值的数据。
附图说明
图1为一个实施例中基于分布式系统的数据处理方法的应用环境图;
图2为一个实施例中基于分布式系统的数据处理方法的流程示意图;
图3为一个实施例中根据级联关系,检测到级联关系对应的每一层级中的数据均不为空时步骤的流程示意图;
图4为另一个实施例中基于分布式系统的数据处理方法的流程示意图;
图5为一个实施例中基于分布式系统的数据处理装置的结构框图;
图6为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的基于分布式系统的数据处理方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。服务器104可以同时接收多个不同终端发送的数据删除请求进行处理。服务器104接收终端102发送的数据删除请求,数据删除请求中包含对应的数据过滤条件。服务器104利用消息列队分发数据过滤条件对应的数据删除任务至对应的至少两个线程。服务器104通过线程查询对应的删除数据,删除数据包含级联关系。服务器104根据级联关系,检测到级联关系对应的每一层级中的数据均不为空时,服务器104以最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在终端102。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种基于分布式系统的数据处理方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
步骤202,接收数据删除请求,数据删除请求中包含对应的数据过滤条件。
各个企业可以通过采用统一的业务管理信息平台,将企业内部以及企业外部供需链上所有的资源与信息进行统一的管理,这种集成能够消除企业内部因部门分割造成的各种信息隔阂与信息孤岛,例如,利用企业资源计划系统就可以实现对整个供应链的有效管理,ERP即(Enterprise Resource Planning)企业资源计划,是一种主要面向制造行业进行物质资源、资金资源和信息资源集成一体化管理的企业信息管理系统。具体的,用户可以通过在手机应用程序中或浏览器网页中输入用户名和密码的方式,登录特定场景的业务信息系统中,用户可以通过app(Application,应用程序)客户端或web客户端即web浏览器发起特定业务数据删除请求,服务器可以同时接收多个不同终端发送的数据删除请求,数据删除请求中包含对应的数据过滤条件。其中,数据过滤条件是指对数据设置的不同维度的筛选条件,数据过滤条件可以包括时间条件、数据类型条件以及数据功能条件等。例如,数据过滤条件可以设置为2020年5月1日~2020年5月31日期间的所有日志数据。
步骤204,利用消息列队分发数据过滤条件对应的数据删除任务至对应的至少两个线程。
当服务器接收到终端发送的数据删除请求之后,服务器可以根据数据删除请求中包含的数据过滤条件,利用消息列队分发数据过滤条件对应的数据删除任务至对应的至少两个线程。其中,消息列队是在消息的传输过程中保存消息的容器。消息队列是部署在系统平台上的,主要提供消息的接收和发送,当面对大量任务信息时,消息队列可以对消息进行削峰平谷。例如,RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一个Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成。线程是指操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程池即(thread pool)是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池的线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。多线程是指是指实现多个线程并发执行的技术。例如,当服务器接收到终端发送的数据删除请求之后,服务器可以根据数据删除请求中包含的数据过滤条件,利用RabbitMQ消息列队分发数据删除任务至对应的多个线程。
步骤206,通过线程查询对应的删除数据,删除数据包含级联关系。
当服务器利用消息列队分发数据删除任务至对应的多个线程之后,服务器可以通过每个线程查询对应的删除数据,删除数据包含级联关系。其中,级联(cascade)是指多个对象之间的映射关系,建立数据之间的级联关系可以有效提高管理效率。级联的操作有级联更新,级联删除。例如,在启用一个级联更新选项后,就可在存在相匹配的外键值的前提下更改一个主键值。系统会相应地更新所有匹配的外键值。比如,如果在表A中将姓名为张三的记录删除,那么表B中的姓名为张三的所有记录也将删除。具体的,每个线程可以向RabbitMQ消息列队发送消息进行异步处理,并通过接收RabbitMQ消息列队分发的任务消息进行级联删除操作。服务器可以通过每个线程利用SQL语句查询对应的删除数据。比如MySQL数据库,MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。可以通过采用设置关键字的方式,服务器每次从数据库取数的是时候设置对应的取值范围,比如设置limit 0,1000。
步骤208,根据级联关系,检测到级联关系对应的每一层级中的数据均不为空时,以最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在端。
当服务器通过线程查询对应的删除数据之后,服务器根据删除数据中包含的级联关系进行检测,当服务器检测到级联关系对应的每一层级中的数据均不为空时,服务器以最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在端。其中,最小层级的数据是指在级联关系中与主表对应的最小层级的子表数据。具体的,当服务器通过线程查询对应的删除数据之后,服务器根据删除数据中包含的级联关系,服务器获取对应的主表标识,并判断主表标识对应的主表数据是否为空。当主表数据不为空时,则服务器根据主表标识查询对应的第一分录子表数据是否为空,逐层进行查询,直到对最小层级对应的子表查询完成。当服务器检测到级联关系对应的每一层级中的数据均不为空时,服务器以最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将处理结果返回至所述数据删除请求的所在的终端。
本实施例中,当系统中存储的执行记录数据量巨大,需要对过期无价值的数据进行删除时,服务器通过接收数据删除请求,数据删除请求中包含对应的数据过滤条件。服务器利用消息列队分发数据过滤条件对应的数据删除任务至对应的至少两个线程,并通过线程查询对应的删除数据,删除数据包含级联关系。每个线程根据级联关系,检测到级联关系对应的每一层级中的数据均不为空时,以最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在端。由此使得,能够高效稳定清除过期数据,节省存储资源,快速过滤不符合过滤条件的数据,确保按照数据的级联逻辑关系删除数据,避免了传统方式中大量的重复操作,即使当业务发生变化时,也能够高效稳定的进行级联删除亿级过期数据,从而有效提高了亿级过期数据的处理效率,同时也提高了系统运行性能,给用户带来便捷,方便用户查看近期有价值的数据。
在一个实施例中,通过线程查询对应的删除数据的步骤,包括:
根据SQL语句中的查询条件,基于对象关系映射关系框架从数据库中查询对应的删除数据。
当服务器利用消息列队分发数据删除任务至对应的多线程之后,服务器可以通过线程查询对应的删除数据,删除数据包含级联关系。具体的,服务器可以根据SQL语句中的查询条件,基于对象关系映射关系框架从数据库中查询对应的删除数据。其中,对象关系映射关系框架是指ORM(Object Relational Mapping)框架,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象映射文件中。由此使得,利用元数据可以快速过滤不符合过滤条件的数据,确保按照数据的级联逻辑关系删除对应的数据,避免了传统方式中大量的重复操作,从而有效提高了过期数据的处理效率。
在其中一个实施例中,数据过滤条件包括数据的类型、数据的时间以及数据的功能。服务器可以根据数据的类型、数据的时间以及数据的功能,通过设置关键字的取值范围,利用物理分页从数据库中查询对应的删除数据。其中,MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果。例如,在某个业务场景中有A表,B表,C表,B表是A表的分录,C表是B的二级分录;A表和B表是一对多关系,B表和C表也是一对多关系。A表数据的标识指的是数据库表A的主键primaryKey,通常将自增长的长整型bigint设置为主键,表示这条记录在数据库A表是唯一的。B数据表中存有A数据表的外键foreignKey,C数据表存有B数据表的外键foreignKey,服务器可以通过左连接left join进行查询。数据库表之间的关联是通过主外键关系关联的。比如,根据主表A的标识查询分录B的前1000条数据的样例SQL可以为:Select B.ID from a_table A leftjoin b_table B on A.FID=B.FID where A.ID in(1,2,3…)limit 0,1000。由此使得,能够快速过滤不符合过滤条件的数据,确保按照数据的级联逻辑关系删除对应的数据,避免了传统方式中大量的重复操作。
在一个实施例中,如图3所示,根据级联关系,检测到级联关系对应的每一层级中的数据均不为空时的步骤,包括:
步骤302,根据级联关系,获取删除数据对应的主表标识,并判断主表标识对应的主表数据是否为空。
步骤304,当主表数据不为空时,则获取主表中预设数量的数据,并根据主表标识查询对应的第一分录子表数据是否为空。
步骤306,当第一分录子表数据不为空时,则获取第一分录子表数据中预设数量的数据,并判断第一分录子表数据对应的下一层级数据是否为空,直至级联关系对应的最小层级数据。
当通过每个线程查询对应的删除数据之后,服务器可以根据删除数据中包含的级联关系,获取删除数据对应的主表标识,并判断主表标识对应的主表数据是否为空。当主表数据不为空时,则服务器获取主表中预设数量的数据,并根据主表标识查询对应的第一分录子表数据是否为空。当第一分录子表数据不为空时,则服务器获取第一分录子表数据中预设数量的数据,并判断第一分录子表数据对应的下一层级数据是否为空,直至级联关系对应的最小层级数据。例如,在某个业务场景中有A表,B表,C表,B表是A表的分录,C表是B的二级分录;A表和B表是一对多关系,B表和C表也是一对多关系。服务器可以根据上述删除数据中包含的级联关系,获取删除数据对应的主表A表标识,并判断主表A表标识对应的主表数据是否为空。当主表A表的数据不为空时,则服务器获取主表A表中预设数量为1000的数据,并根据主表A表标识查询对应的第一分录子表B表数据是否为空。当第一分录子表B表的数据不为空时,则服务器获取第一分录子表数据中预设数量为1000的数据,并判断第一分录子表B表数据对应的下一层级数据C表是否为空,即该级联关系对应的最小层级数据为C表数据。其中,服务器判断第一分录子表B表数据对应的下一层级数据C表是否为空的样例SQL可以为:select C.FID from b_table B left join c_table C on B.FID=C.FIDwhere B.FID in(1,2,3,…)limit 0,1000,当服务器查询到数据库中C表的ID数等于0的时候,即表示C表中的数据记录为空。由此使得,通过利用线程池及消息中间件技术进行异步处理海量数据,能够高效稳定的清除过期数据,节省存储资源,快速过滤不符合过滤条件的数据,确保按照数据的级联逻辑关系删除对应的数据。
在其中一个实施例中,以最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在端的步骤,包括:
当检测最小层级数据不为空时,则对最小层级数据进行批量删除操作。
在最小层级数据删除完成之后,对最小层级数据的上一层级数据进行删除操作,直到将主表中的数据删除完成之后,得到数据删除对应的处理结果,并将处理结果返回至所述数据删除请求所在端。
当服务器检测最小层级数据不为空时,则服务器对最小层级数据进行批量删除操作。在最小层级数据删除完成之后,服务器对最小层级数据的上一层级数据进行删除操作,直到将主表中的数据删除完成之后,得到数据删除对应的处理结果,并将处理结果返回至所述数据删除请求所在端。例如,在上述场景中,当服务器查询到数据库中C表的ID数不等于0的时候,即表示C表中的数据记录不为空,则服务器对最小层级数据即C表中的数据进行批量删除操作,在C表中的数据全部删除完成之后,服务器对C表中的数据的上一层级数据即表B中的数据进行删除操作。在B表中的数据全部删除完成之后,服务器对主表A表中的数据进行删除操作。当主表A表中的数据删除完成之后,服务器得到数据删除对应的处理结果,并将处理结果返回至数据删除请求所在端。由此使得,通过利用线程池并发执行删除操作,能够解决在分布式系统中删除数据效率低的问题,实现了高效稳定级联删除亿级过期数据,减少存储资源,同时也提高了系统运行性能,给用户带来便捷,方便用户查看近期有价值的数据。
在一个实施例中,如图4所示,提供了一种基于分布式系统的数据处理方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
步骤402,接收数据删除请求,数据删除请求中包含对应的数据过滤条件。
步骤404,利用消息列队分发数据过滤条件对应的数据删除任务至对应的至少两个线程。
步骤406,通过线程查询对应的删除数据,删除数据包含的级联关系为三层级联。
步骤408,根据级联关系,获取删除数据对应的主表标识,并判断主表标识对应的主表数据是否为空。
步骤410,当主表数据不为空时,则获取主表中预设数量的数据,并根据主表标识查询对应的第一分录子表数据是否为空。
步骤412,当第一分录子表数据不为空时,则获取第一分录子表中预设数量的数据,并根据第一分录子表的标识查询第二分录子表数据是否为空。
步骤414,当第二分录子表数据不为空时,则对第二分录子表中预设数量的数据进行批量删除操作。
步骤416,当第二分录子表中的数据删除后,对第一分录子表中预设数量的数据进行删除操作。
步骤418,当第一分录子表中的数据删除后,对主表中预设数量的数据进行删除操作。
步骤420,当主表中数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在端。
终端A向服务器发送数据删除请求,服务器接收到终端A发送的数据删除请求,该数据删除请求中包含对应的数据过滤条件为2020年5月1日~2020年5月31日期间的所有日志数据。进一步的,服务器利用RabbitMQ消息列队分发数据过滤条件对应的数据删除任务至对应的多个线程。服务器利用每个线程查询对应的删除数据,删除数据包含的级联关系为三层级联。服务器可以根据上述删除数据中包含的级联关系,获取删除数据对应的主表A表标识,并判断主表A表标识对应的主表数据是否为空。当主表A表的数据不为空时,则服务器获取主表A表中预设数量为1000的数据,并根据主表A表标识查询对应的第一分录子表B表数据是否为空。当第一分录子表B表的数据不为空时,则服务器获取第一分录子表数据中预设数量为1000的数据,并判断第一分录子表B表数据对应的下一层级数据即第二分录子表C表是否为空,即该三层级联关系对应的最小层级数据为C表数据。当第二分录子表C表中数据不为空时,则服务器对第二分录子表C表中预设数量的数据进行批量删除操作,直到当第二分录子表C表中的数据全部删除后,服务器再对第一分录子表B表中预设数量的数据进行删除操作,直到当第一分录子表B表中的数据全部删除后,服务器对主表A表中预设数量的数据进行删除操作,直到当主表A表中数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在终端A。其中,当服务器根据上述删除数据中包含的级联关系,获取删除数据对应的主表A表标识,并判断主表A表标识对应的主表数据为空时,则服务器得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在终端A。当服务器根据主表A表标识查询对应的第一分录子表B表数据为空时,则服务器对主表A表中预设数量的数据进行删除操作,直到当主表A表中数据全部删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在终端A。当服务器判断第一分录子表B表数据对应的下一层级数据即第二分录子表C表为空时,则服务器对第一分录子表B中预设数量的数据进行批量删除操作,直到当第一分录子表B表中的数据全部删除后,服务器判断主表A表标识对应的主表数据是否为空,直到将主表A表中数据全部删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在终端A。由此使得,本申请的方案并不是局限于一张数据库表的亿级删除,能够对相关联的所有数据库表中的数据进行删除,即使当业务发生变化时,也能够高效稳定的进行级联删除亿级过期数据,无需反复修改SQL脚本,通过根据级联逻辑关系删除对应的数据,也能够有效提高删除数据的准确性,避免了出现错误。
应该理解的是,虽然图1-4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-4中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图5所示,提供了一种基于分布式系统的数据处理装置,包括:接收模块502、分发模块504、查询模块506和数据处理模块508,其中:
接收模块502,用于接收数据删除请求,数据删除请求中包含对应的数据过滤条件。
分发模块504,用于利用消息列队分发数据过滤条件对应的数据删除任务至对应的至少两个线程。
查询模块506,用于通过线程查询对应的删除数据,删除数据包含级联关系。
数据处理模块508,用于根据级联关系,检测到级联关系对应的每一层级中的数据均不为空时,以最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在端。
在一个实施例中,查询模块还用于根据SQL语句中的查询条件,基于对象关系映射关系框架从数据库中查询对应的删除数据
在一个实施例中,查询模块还用于根据数据的类型、数据的时间以及数据的功能,通过设置关键字的取值范围,利用物理分页从数据库中查询对应的删除数据。
在一个实施例中,该装置还包括:判断模块。
判断模块用于根据级联关系,获取删除数据对应的主表标识,并判断主表标识对应的主表数据是否为空。查询模块还用于当主表数据不为空时,则获取主表中预设数量的数据,并根据主表标识查询对应的第一分录子表数据是否为空。判断模块还用于当第一分录子表数据不为空时,则获取第一分录子表数据中预设数量的数据,并判断第一分录子表数据对应的下一层级数据是否为空,直至级联关系对应的最小层级数据。
在一个实施例中,该装置还包括:删除模块。
删除模块用于当检测最小层级数据不为空时,则对最小层级数据进行批量删除操作。
在一个实施例中,删除模块还用于在最小层级数据删除完成之后,对最小层级数据的上一层级数据进行删除操作,直到将主表中的数据删除完成之后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求所在端。
在一个实施例中,该装置还包括:发送模块。
判断模块还用于根据级联关系,获取删除数据对应的主表标识,并判断主表标识对应的主表数据是否为空。查询模块还用于当主表数据不为空时,则获取主表中预设数量的数据,并根据主表标识查询对应的第一分录子表数据是否为空。当第一分录子表数据不为空时,则获取第一分录子表中预设数量的数据,并根据第一分录子表的标识查询第二分录子表数据是否为空。删除模块还用于当第二分录子表数据不为空时,则对第二分录子表中预设数量的数据进行批量删除操作;当第二分录子表中的数据删除后,对第一分录子表中预设数量的数据进行删除操作;当第一分录子表中的数据删除后,对主表中预设数量的数据进行删除操作。发送模块用于当主表中数据删除后,得到数据删除对应的处理结果,并将处理结果返回至数据删除请求的所在端。
关于基于分布式系统的数据处理装置的具体限定可以参见上文中对于基于分布式系统的数据处理方法的限定,在此不再赘述。上述基于分布式系统的数据处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储基于分布式系统的处理数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于分布式系统的数据处理方法。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各个方法实施例的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种基于分布式系统的数据处理方法,所述方法包括:
接收数据删除请求;所述数据删除请求中包含对应的数据过滤条件;
利用消息列队分发所述数据过滤条件对应的数据删除任务至对应的至少两个线程;
通过所述线程查询对应的删除数据;所述删除数据包含级联关系;
根据所述级联关系,获取所述删除数据对应的主表标识,并判断所述主表标识对应的主表数据是否为空;当所述主表数据不为空时,根据所述主表标识查询对应的第一分录子表数据是否为空,逐层进行查询,直到对最小层级对应的子表查询完成;
当检测到级联关系对应的每一层级中的数据均不为空时,以所述最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端。
2.根据权利要求1所述的方法,其特征在于,所述通过所述线程查询对应的删除数据包括:
根据SQL语句中的查询条件,基于对象关系映射关系框架从数据库中查询对应的删除数据。
3.根据权利要求2所述的方法,其特征在于,所述数据过滤条件包括数据的类型、数据的时间以及数据的功能;
所述根据SQL语句中的查询条件,基于对象关系映射关系框架从数据库中查询对应的删除数据,包括:
根据所述数据的类型、数据的时间以及数据的功能,通过设置关键字的取值范围,利用物理分页从数据库中查询对应的删除数据。
4.根据权利要求1所述的方法,其特征在于,所述根据所述主表标识查询对应的第一分录子表数据是否为空,逐层进行查询,直到对最小层级对应的子表查询完成包括:
当所述主表数据不为空时,则获取所述主表中预设数量的数据;
当所述第一分录子表数据不为空时,则获取所述第一分录子表数据中预设数量的数据,并判断所述第一分录子表数据对应的下一层级数据是否为空,直至所述级联关系对应的最小层级数据查询完成。
5.根据权利要求4所述的方法,其特征在于,所述当所述第一分录子表数据不为空时,则获取所述第一分录子表数据中预设数量的数据,并判断所述第一分录子表数据对应的下一层级数据是否为空,直至所述级联关系对应的最小层级数据查询完成之后,所述方法还包括:
当检测所述最小层级数据不为空时,则对所述最小层级数据进行批量删除操作。
6.根据权利要求5所述的方法,其特征在于,所述以所述最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端包括:
在所述最小层级数据删除完成之后,对所述最小层级数据的上一层级数据进行删除操作,直到将主表中的数据删除完成之后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求所在端。
7.根据权利要求1所述的方法,其特征在于,当所述删除数据包含的级联关系为三层级联时;
所述通过所述线程查询对应的删除数据之后,所述方法还包括:
根据所述级联关系,获取所述删除数据对应的主表标识,并判断所述主表标识对应的主表数据是否为空;
当所述主表数据不为空时,则获取所述主表中预设数量的数据,并根据所述主表标识查询对应的第一分录子表数据是否为空;
当所述第一分录子表数据不为空时,则获取所述第一分录子表中预设数量的数据,并根据所述第一分录子表的标识查询第二分录子表数据是否为空;
当所述第二分录子表数据不为空时,则对所述第二分录子表中预设数量的数据进行批量删除操作;
当所述第二分录子表中的数据删除后,对所述第一分录子表中预设数量的数据进行删除操作;
当所述第一分录子表中的数据删除后,对所述主表中预设数量的数据进行删除操作;
当所述主表中数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端。
8.一种基于分布式系统的数据处理装置,其特征在于,所述装置包括:
接收模块,用于接收数据删除请求;所述数据删除请求中包含对应的数据过滤条件;
分发模块,用于利用消息列队分发所述数据过滤条件对应的数据删除任务至对应的至少两个线程;
查询模块,用于通过所述线程查询对应的删除数据;所述删除数据包含级联关系;
数据处理模块,用于根据所述级联关系,获取所述删除数据对应的主表标识,并判断所述主表标识对应的主表数据是否为空;当所述主表数据不为空时,根据所述主表标识查询对应的第一分录子表数据是否为空,逐层进行查询,直到对最小层级对应的子表查询完成;当检测到级联关系对应的每一层级中的数据均不为空时,以所述最小层级为起点,逐层执行数据批量删除操作,直到将主表中的数据删除后,得到数据删除对应的处理结果,并将所述处理结果返回至所述数据删除请求的所在端。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010868600.5A CN112100186B (zh) | 2020-08-26 | 2020-08-26 | 基于分布式系统的数据处理方法、装置、计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010868600.5A CN112100186B (zh) | 2020-08-26 | 2020-08-26 | 基于分布式系统的数据处理方法、装置、计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112100186A CN112100186A (zh) | 2020-12-18 |
CN112100186B true CN112100186B (zh) | 2024-04-05 |
Family
ID=73754293
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010868600.5A Active CN112100186B (zh) | 2020-08-26 | 2020-08-26 | 基于分布式系统的数据处理方法、装置、计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112100186B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114647650A (zh) * | 2022-05-18 | 2022-06-21 | 苏州琞能能源科技有限公司 | 数据存储方法、装置、电子设备及存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101546311A (zh) * | 2008-03-27 | 2009-09-30 | 天津德智科技有限公司 | 回收站的数据处理方法及数据处理装置 |
CN101770608A (zh) * | 2008-12-26 | 2010-07-07 | 新奥特(北京)视频技术有限公司 | 一种工程版本的管理方法和装置 |
CN104601562A (zh) * | 2015-01-04 | 2015-05-06 | 福建天晴数码有限公司 | 游戏服务器与数据库的交互方法和系统 |
CN106371903A (zh) * | 2016-08-23 | 2017-02-01 | 西安电子科技大学 | 飞机机载可信计算平台的任务调度方法 |
CN107305554A (zh) * | 2016-04-20 | 2017-10-31 | 泰康保险集团股份有限公司 | 数据查询处理方法及装置 |
CN108228592A (zh) * | 2016-12-13 | 2018-06-29 | 北京京东尚科信息技术有限公司 | 基于二进制日志的数据归档方法及数据归档装置 |
CN110427254A (zh) * | 2019-07-05 | 2019-11-08 | 深圳壹账通智能科技有限公司 | 任务处理方法、装置、设备及计算机可读存储介质 |
CN110519329A (zh) * | 2019-07-23 | 2019-11-29 | 苏州浪潮智能科技有限公司 | 一种并发处理samba协议请求的方法、设备及可读介质 |
CN110991983A (zh) * | 2019-11-05 | 2020-04-10 | 泰康保险集团股份有限公司 | 一种任务处理方法、装置、介质和设备 |
CN111124643A (zh) * | 2019-12-20 | 2020-05-08 | 浪潮电子信息产业股份有限公司 | 一种分布式存储中的删除任务调度方法、系统及相关装置 |
-
2020
- 2020-08-26 CN CN202010868600.5A patent/CN112100186B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101546311A (zh) * | 2008-03-27 | 2009-09-30 | 天津德智科技有限公司 | 回收站的数据处理方法及数据处理装置 |
CN101770608A (zh) * | 2008-12-26 | 2010-07-07 | 新奥特(北京)视频技术有限公司 | 一种工程版本的管理方法和装置 |
CN104601562A (zh) * | 2015-01-04 | 2015-05-06 | 福建天晴数码有限公司 | 游戏服务器与数据库的交互方法和系统 |
CN107305554A (zh) * | 2016-04-20 | 2017-10-31 | 泰康保险集团股份有限公司 | 数据查询处理方法及装置 |
CN106371903A (zh) * | 2016-08-23 | 2017-02-01 | 西安电子科技大学 | 飞机机载可信计算平台的任务调度方法 |
CN108228592A (zh) * | 2016-12-13 | 2018-06-29 | 北京京东尚科信息技术有限公司 | 基于二进制日志的数据归档方法及数据归档装置 |
CN110427254A (zh) * | 2019-07-05 | 2019-11-08 | 深圳壹账通智能科技有限公司 | 任务处理方法、装置、设备及计算机可读存储介质 |
CN110519329A (zh) * | 2019-07-23 | 2019-11-29 | 苏州浪潮智能科技有限公司 | 一种并发处理samba协议请求的方法、设备及可读介质 |
CN110991983A (zh) * | 2019-11-05 | 2020-04-10 | 泰康保险集团股份有限公司 | 一种任务处理方法、装置、介质和设备 |
CN111124643A (zh) * | 2019-12-20 | 2020-05-08 | 浪潮电子信息产业股份有限公司 | 一种分布式存储中的删除任务调度方法、系统及相关装置 |
Non-Patent Citations (1)
Title |
---|
流程工业分布式实时数据库研究与应用;李德文;《中国博士学位论文全文数据库信息科技辑》(第8期);I138-14 * |
Also Published As
Publication number | Publication date |
---|---|
CN112100186A (zh) | 2020-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102141234B1 (ko) | 분산된 데이터 스토어 내의 버젼형 계층 데이터 구조 | |
US10216584B2 (en) | Recovery log analytics with a big data management platform | |
CN109997126B (zh) | 事件驱动提取、变换、加载(etl)处理 | |
US11113158B2 (en) | Rolling back kubernetes applications | |
JP6254606B2 (ja) | バックアップシステムからのデータベースのストリーミング復元 | |
US10831724B2 (en) | Method of reconciling resources in the metadata hierarchy | |
US9772911B2 (en) | Pooling work across multiple transactions for reducing contention in operational analytics systems | |
WO2017063520A1 (zh) | 数据库的操作方法及装置 | |
US9477974B2 (en) | Method and systems for flexible and scalable databases | |
US11347684B2 (en) | Rolling back KUBERNETES applications including custom resources | |
US20140025683A1 (en) | Methods and apparatus for managing community-updateable data | |
CN111324606B (zh) | 数据分片的方法及装置 | |
WO2019109854A1 (zh) | 分布式数据库数据处理方法、装置、存储介质及电子装置 | |
CN115145943B (zh) | 多数据源元数据快速比对方法、系统、设备和存储介质 | |
CN111966692A (zh) | 针对数据仓库的数据处理方法、介质、装置和计算设备 | |
CN112100186B (zh) | 基于分布式系统的数据处理方法、装置、计算机设备 | |
US20220044144A1 (en) | Real time model cascades and derived feature hierarchy | |
CN110569315B (zh) | 基于数据仓库的数据处理方法和装置 | |
CN107590199B (zh) | 一种面向内存的多线程数据库设计方法 | |
US10872073B1 (en) | Lock-free updates to a data retention index | |
CN115203260A (zh) | 一种异常数据确定方法、装置、电子设备及存储介质 | |
CN108376104B (zh) | 节点调度方法及装置、计算机可读存储介质 | |
CN117390040B (zh) | 基于实时宽表的业务请求处理方法、设备及存储介质 | |
US11914483B1 (en) | Metadata-based recovery classification management | |
US11868216B1 (en) | Classification-based data recovery management |
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 |