CN110764913B - 基于规则调用的数据计算方法、客户端及可读存储介质 - Google Patents
基于规则调用的数据计算方法、客户端及可读存储介质 Download PDFInfo
- Publication number
- CN110764913B CN110764913B CN201911028014.3A CN201911028014A CN110764913B CN 110764913 B CN110764913 B CN 110764913B CN 201911028014 A CN201911028014 A CN 201911028014A CN 110764913 B CN110764913 B CN 110764913B
- Authority
- CN
- China
- Prior art keywords
- calculation
- rule
- client
- data
- preset
- 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
Images
Classifications
-
- 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/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据处理技术领域,揭露了一种基于规则调用的数据处理方法,该方法包括:从规则引擎服务器中获取各规则集对应的计算代码,创建对应的实例并存储至客户端的内存的预设分段加锁内存空间中,响应用户的计算请求,从所述预设分段加锁内存空间中获取对应的实例进行计算,得到计算结果。本发明还提出一种客户端以及一种计算机可读存储介质。本发明解决了调用规则进行计算时效率低下的问题。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种基于规则调用的数据计算方法、客户端及可读存储介质。
背景技术
引擎系统中,为了满足规则集中的、灵活的配置管理,引入了规则引擎。规则引擎是一种嵌入在应用程序中的组件,由推理引擎发展而来,规则引擎接受数据输入,读取业务规则,通过推理得到符合业务规则的业务决策。
规则引擎在应用时需要频繁被调用,而现有规则引擎是一个包含维护管理和接口的独立服务,各规则引擎调用方、规则引擎管理方都需要频繁的请求访问规则引擎,大大增加了请求过程中各个环节的开销。
在这个过程中,由于开销增大的原因、JS脚本编译执行、同步的变更修改等因素的影响,使得现有规则引擎的计算效率低下,急需一种能提升计算效率的解决方案。
发明内容
鉴于以上内容,有必要提供一种基于规则调用的数据计算方法,旨在解决调用规则进行计算时效率低下的问题。
本发明提供的基于规则调用的数据计算方法,包括:
存储步骤:从规则引擎服务器中获取各个规则集对应的计算代码,根据所述计算代码创建各个规则集对应的实例,并将所述实例存储至所述客户端的内存的预设分段加锁内存空间中,并建立规则集的名称与实例的类名之间的映射关系;
判断步骤:响应用户的计算请求,所述计算请求包括待计算的数据和规则集的名称,根据所述映射关系及所述规则集的名称从所述预设分段加锁内存空间中获取所述规则集对应的实例,并判断所述客户端中除所述预设分段加锁内存空间外的剩余内存容量是否大于第一预设阈值;
计算步骤:当剩余内存容量大于第一预设阈值时,根据所述规则集对应的实例和所述待计算的数据进行计算,得到计算结果。
可选的,所述计算步骤还包括:
当剩余内存容量小于或等于第一预设阈值时,将所述规则集对应的实例和所述待计算的数据发送给所述规则引擎服务器以供所述规则引擎服务器进行计算,并接收所述规则引擎服务器反馈的计算结果。
可选的,所述方法还包括:
实时监控所述预设分段加锁内存空间中的实例,当某一实例超过预设时间阈值未被调用,则删除所述实例。
可选的,所述方法还包括:
实时监控所述剩余内存容量,当所述剩余内存容量小于第二预设阈值时,删除所述预设分段加锁内存空间中的所有实例,并将所述客户端的计算模式改为远程计算模式,所述远程计算模式为:请求所述规则引擎服务器进行计算并反馈计算结果。
可选的,所述方法还包括:
实时获取所述规则引擎服务器中更新的计算代码,并更新所述预设分段加锁内存空间中该计算代码对应的实例。
此外,为实现上述目的,本发明还提供一种客户端,该客户端包括:存储器、处理器,所述存储器中存储有可在所述处理器上运行的数据计算程序,所述数据计算程序被所述处理器执行时实现如下步骤:
存储步骤:从规则引擎服务器中获取各个规则集对应的计算代码,根据所述计算代码创建各个规则集对应的实例,并将所述实例存储至所述客户端的内存的预设分段加锁内存空间中,并建立规则集的名称与实例的类名之间的映射关系;
判断步骤:响应用户的计算请求,所述计算请求包括待计算的数据和规则集的名称,根据所述映射关系及所述规则集的名称从所述预设分段加锁内存空间中获取所述规则集对应的实例,并判断所述客户端中除所述预设分段加锁内存空间外的剩余内存容量是否大于第一预设阈值;
计算步骤:当剩余内存容量大于第一预设阈值时,根据所述规则集对应的实例和所述待计算的数据进行计算,得到计算结果。
可选的,所述计算步骤还包括:
当剩余内存容量小于或等于第一预设阈值时,将所述规则集对应的实例和所述待计算的数据发送给所述规则引擎服务器以供所述规则引擎服务器进行计算,并接收所述规则引擎服务器反馈的计算结果。
可选的,所述数据计算程序被所述处理器执行时还实现如下步骤:
实时监控所述预设分段加锁内存空间中的实例,当某一实例超过预设时间阈值未被调用,则删除所述实例。
可选的,所述数据计算程序被所述处理器执行时还实现如下步骤:
实时监控所述剩余内存容量,当所述剩余内存容量小于第二预设阈值时,删除所述预设分段加锁内存空间中的所有实例,并将所述客户端的计算模式改为远程计算模式,所述远程计算模式为:请求所述规则引擎服务器进行计算并反馈计算结果。
可选的,所述数据计算程序被所述处理器执行时还实现如下步骤:
实时获取所述规则引擎服务器中更新的计算代码,并更新所述预设分段加锁内存空间中该计算代码对应的实例。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有数据计算程序,所述数据计算程序可被一个或者多个处理器执行,以实现上述基于规则调用的数据计算方法的步骤。
相较现有技术,本发明中的客户端通过从规则引擎服务器中获取各规则集对应的计算代码,生成对应的实例,并将各实例存储至所述客户端的内存的预设分段加锁内存空间中,此举将各实例进行了隔离,当一个线程访问其中一个实例时,其他线程也可访问其他的实例,保证了数据安全性的同时实现了多线程同步计算,当用户提交计算请求后,客户端只用调用本地内存中预设分段加锁内存空间中的实例,而无需依赖任何外部服务,从而解决了调用规则进行计算时效率低下的问题。
附图说明
图1为本发明客户端一实施例的应用环境示意图;
图2为图1中的客户端一实施例的结构示意图;
图3为图2中的数据计算程序一实施例的程序模块图;
图4为本发明基于规则调用的数据计算方法一实施例的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
首先,对本发明的实施例中所涉及的名词术语进行解释。
类:类是具有相同的属性和功能的事物的抽象的集合,是个抽象的概念,用来模拟一类事物,一旦定义了一个类,这个类就永远存在。
实例(对象):实例是类的一个个体,是具体的、实实在在存在的事物,有自己的生命周期,由类可以创建出实例,实例也会消亡。
包:包是一个文件夹,里面有若干个类。
方法:方法就像是一个函数,可能是做一件事、一种运算,一个类可以通过多种方法达成某种目的。
上述名词之间的相互关系:包相当于电脑上的文件夹,类相当于包里的文档,方法相当于文档里面一段一段的文字。包里可以有一个或多个类,类里面也可以有一个或多个方法。
如图1所示,为本发明客户端一实施例的应用环境示意图。在本实施例中,客户端1与规则引擎服务器2通过网络3(图中未画出)进行通信连接。
客户端1可以为桌上型计算机、笔记本、平板电脑、手机,或其它可以与规则引擎服务器2进行通信的终端装置。
规则引擎服务器2可以是机架式服务器、刀片式服务器、塔式服务器或者机柜式服务器等计算设备,可以是独立的服务器,也可以是多个服务器所组成的服务器集群。
在本发明的一个实施例中,客户端1用于:
从规则引擎服务器2中获取各个规则集对应的计算代码,根据所述计算代码创建各个规则集对应的实例,并将所述实例存储至所述客户端的内存的预设分段加锁内存空间中,并建立规则集的名称与实例的类名之间的映射关系;
响应用户的计算请求,所述计算请求包括待计算的数据和规则集的名称,根据所述映射关系及所述规则集的名称从所述预设分段加锁内存空间中获取所述规则集对应的实例,并判断所述客户端中除所述预设分段加锁内存空间外的剩余内存容量是否大于第一预设阈值;
当剩余内存容量大于第一预设阈值时,根据所述规则集对应的实例和所述待计算的数据进行计算,得到计算结果。
如图2所示,为本发明图1中客户端1一实施例的结构示意图。
在本实施例中,客户端1包括,但不仅限于,可通过系统总线相互通信连接的存储器11、处理器12、网络接口13,该存储器11中存储有数据计算程序10,所述数据计算程序10可被所述处理器12执行。图2仅示出了具有组件11-13以及数据计算程序10的客户端1,本领域技术人员可以理解的是,图2示出的结构并不构成对客户端1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
其中,存储器11包括内存及至少一种类型的可读存储介质。内存为客户端1的运行提供缓存;可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等的非易失性存储介质。在一些实施例中,可读存储介质可以是客户端1的内部存储单元,例如该客户端1的硬盘;在另一些实施例中,该非易失性存储介质也可以是客户端1的外部存储设备,例如客户端1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。本实施例中,存储器11的可读存储介质通常用于存储安装于客户端1的操作系统和各类应用软件,例如存储本发明一实施例中的数据计算程序10的代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述客户端1的总体操作,例如执行与其他设备进行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行数据计算程序10等。
网络接口13可包括无线网络接口或有线网络接口,该网络接口13用于在所述客户端1与规则引擎服务器2之间建立通信连接。
可选的,所述客户端1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选的,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在客户端1中处理的信息以及用于显示可视化的用户界面。
在本发明的一实施例中,所述数据计算程序10被所述处理器12执行时实现如下存储步骤、判断步骤及计算步骤。
存储步骤:从规则引擎服务器2中获取各个规则集对应的计算代码,根据所述计算代码创建各个规则集对应的实例,并将所述实例存储至所述客户端的内存的预设分段加锁内存空间中,并建立规则集的名称与实例的类名之间的映射关系。
本实施例中,规则引擎服务器2中预先配置了各个规则集,生成并存储了各个规则集对应的计算代码。
例如,预先配置的规则集中包含一个名称为“分享有奖”的规则集,该规则集包含登录、分享两条规则,其中,登录规则为:用户需在2019年1月1日前注册;分享规则为:用户在2019年2月1日-2019年3月1日期间分享次数需超过三次。根据所述登录规则和分享规则即可生成“分享有奖”规则集对应的jave计算代码。
本实施例中,生成java代码的策略为:提供一个公用的接口类(RuleEngine,该接口提供一个公共方法:calculate())。
每一个规则集会生成一个java类,该类实现接口类RuleEngine。
在规则集生成的java类中,实现接口方法(calculate()),方法中依次调用所有规则生成的方法。
规则集中的每一条规则会生成一个方法,每个方法依据传入的参数,获取计算所需要的字段值,并依据规则设定的业务逻辑,对这些值进行计算。
本实施例中,我们设定规则集的名称为:ShareAward,包含的登录规则和分享规则的名称为:RegistRule和ShareRule,注册时间、分享次数字段名称为:registTime、shareNum,那么依据生成策略,所生成的示例java代码如下:
本实施例中的客户端1为需要调用规则进行计算的客户端,可通过确认客户端1是否安装有RuleEngineApi包来确认该客户端1是否需调用规则进行计算。
客户端1在其启动方法(如Main())中,调用初始化方法RuleEngineApi.init(),该方法会建立客户端1与规则引擎服务器2的连接,从规则引擎服务器2中拉取所有规则集对应的java计算代码,并依次加载(ClassLoader)、创建类实例(newInstance),并以类名为键,类实例为值,存入所述客户端1的内存的预设分段加锁内存空间中,同时建立规则集的名称与实例的类名之间的映射关系。在本发明的另一个实施例中,可将规则集的名称作为实例的类名。
ClassLoader为类加载器,java计算代码无法直接存储至客户端1,需通过ClassLoader转换后进行存储。newInstance用于初始化类,生成实例。
客户端1全量加载各个规则集对应的计算代码后,除非规则集有所变更,否则不会再向规则引擎服务器2发送除了心跳检测以外的任何请求。
所述客户端1的内存的预设分段加锁内存空间为ConcurrentHashMap,ConcurrentHashMap采用分段加锁技术将数据分成一段一段进行存储,然后给每一段数据配一把锁,当一个线程访问其中一个段的数据的时候,其他线程可访问其他段的数据,保证了数据安全性的同时可实现多线程同步计算,可大幅提升计算效率。
所述存储步骤还包括:
删除所述预设分段加锁内存空间中各个规则集对应的计算代码。
计算代码用于创建实例,实例创建完成后,删除计算代码可节省客户端1的存储空间。
判断步骤:响应用户的计算请求,所述计算请求包括待计算的数据和规则集的名称,根据所述映射关系及所述规则集的名称从所述预设分段加锁内存空间中获取所述规则集对应的实例,并判断所述客户端1中除所述预设分段加锁内存空间外的剩余内存容量是否大于第一预设阈值。
计算步骤:当剩余内存容量大于第一预设阈值时,根据所述规则集对应的实例和所述待计算的数据进行计算,得到计算结果。
本实施例中,所有规则集对应的实例已被存储至该客户端1的内存的预设分段加锁内存空间中,当需要调用规则进行计算时,可直接调用本地内存中对应的实例进行计算并获取结果,而无需依赖于任何外部服务,实验证明,通过此种方式进行计算时基本不会宕机,并能达到毫秒级的运算速度。
传统规则引擎的规则的计算和规则的配置管理的功能在一个模块中,从而使得规则的计算和规则的配置管理操作无法同时进行,本实施例中,规则的配置管理在规则引擎服务器中2进行,规则的计算则在客户端1进行,这种方式可将规则的配置管理与规则的计算进行分离,当规则引擎服务器2异常时,规则的计算仍可正常进行,同时也实现了规则的变更能够实时生效,且规则变更的同时不影响规则的计算。
以需调用的规则集的名称为“分享有奖”为例,根据规则集的名称与实例的类名之间的映射关系,得到该规则集对应的实例的类名为ShareAward,ShareAward的参数包括cnid、RegistRule、ShareRule,其中,RegistRule对应登录规则,ShareRule对应分享规则,计算过程如下:
1、execute()方法构建参数对象item:
{
"ruleName":"ShareAward",
"data":{
"cnid":"*******************",
"RegistRule":"600",
"ShareRule":"25000"
}
}
2、调用RuleEngineApi.ruleSetProcess(item):
RuleEngineApi.ruleSetProcess会依据参数中实例的类名:"ruleName":"ShareAward",在预设分段加锁内存中查找对应的实例,ConcurrentHashMap.get("ShareAward")得到ShareAwardObject;
3、执行ShareAwardObject中实现的接口方法:calculate(item),将执行的结果:{"ruleName":"ShareAward","result":{}},返回给ruleSetProcess(),再由ruleSetProcess()返回给execute()。
本实施例中,若输入的用户数据经计算后满足登录规则和分享规则,则输出结果为奖励预设额度的积分,若不满足登录规则和分享规则中的任一规则,则输出结果为无奖励积分。
在本发明的另一实施例中,所述计算步骤还包括:
当剩余内存容量小于或等于第一预设阈值时,将所述规则集对应的实例和所述待计算的数据发送给所述规则引擎服务器2以供所述规则引擎服务器2进行计算,并接收所述规则引擎服务器2反馈的计算结果。
在本发明的另一实施例中,所述数据计算程序10被所述处理器12执行时还实现如下步骤:
实时监控所述预设分段加锁内存空间中的实例,当某一实例超过预设时间阈值未被调用,则删除所述实例。
当后续需调用该实例进行计算时,可再次从规则引擎服务器2中获取该实例对应的计算代码,重新生成实例,或者将该实例相关的计算请求发送给规则引擎服务器2,由规则引擎服务器2进行计算并反馈计算结果。
在本发明的另一实施例中,所述数据计算程序10被所述处理器12执行时还实现如下步骤:
实时监控所述剩余内存容量,当所述剩余内存容量小于第二预设阈值时,删除所述预设分段加锁内存空间中的所有实例,并将所述客户端1的计算模式改为远程计算模式,所述远程计算模式为:请求所述规则引擎服务器2进行计算并反馈计算结果。
在本发明的一个实施例中,所述数据计算程序10被所述处理器12执行时还实现如下步骤:
实时获取所述规则引擎服务器2中更新的计算代码,并更新所述预设分段加锁内存空间中该计算代码对应的实例。
本实施例中,针对更新的计算代码,使用单独线程创建、存储实例。通过将实例存储至ConcurrentHashMap中,可隔离实例更新操作和计算操作,使得两个操作相互独立,互不干扰。更新实例时,通过执行ConcurrentHashMap.put()操作来完成实例在ConcurrentHashMap中的更新,此时,ConcurrentHashMap中对应的实例可直接被替换,然而,正在调用规则进行计算的实例仍使用更新前的实例正常计算,待下次计算时会使用更新后的实例。
由上述实施例可知,本发明提出的客户端1,首先,从规则引擎服务器2中获取各规则集对应的计算代码,生成对应的实例,再将各实例存入所述客户端1的内存的预设分段加锁内存空间中,此举将各实例进行了隔离,当一个线程访问其中一个实例时,其他线程也可访问其他实例,保证了数据安全性的同时实现了多线程同步计算;然后,当接收到用户提交的计算请求时,直接调用本地内存中预设分段加锁内存空间中的实例进行计算,而无需依赖任何外部服务,从而解决了调用规则进行计算时效率低下的问题。
在其他实施例中,数据计算程序10还可以被分割为一个或者多个模块,一个或者多个模块被存储于存储器11中,并由一个或多个处理器(本实施例为处理器12)所执行以完成本发明,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,用于描述数据计算程序10在客户端1中的执行过程。
如图3所示,为图2中的数据计算程序10一实施例的程序模块图。
在本发明的一个实施例中,数据计算程序10包括存储模块110、判断模块120及计算模块130,示例性地:
所述存储模块110,用于从规则引擎服务器2中获取各个规则集对应的计算代码,根据所述计算代码创建各个规则集对应的实例,并将所述实例存储至所述客户端1的内存的预设分段加锁内存空间中,并建立规则集的名称与实例的类名之间的映射关系;
所述判断模块120,用于响应用户的计算请求,所述计算请求包括待计算的数据和规则集的名称,根据所述映射关系及所述规则集的名称从所述预设分段加锁内存空间中获取所述规则集对应的实例,并判断所述客户端1中除所述预设分段加锁内存空间外的剩余内存容量是否大于第一预设阈值;
所述计算模块130,用于当剩余内存容量大于第一预设阈值时,根据所述规则集对应的实例和所述待计算的数据进行计算,得到计算结果。
上述存储模块110、判断模块120及计算模块130等程序模块被执行时所实现的功能或操作步骤与上述实施例大体相同,在此不再赘述。
如图4所示,为本发明基于规则调用的数据计算方法一实施例的流程图,该数据计算方法包括步骤S1-S3,应用于客户端1。
S1、从规则引擎服务器2中获取各个规则集对应的计算代码,根据所述计算代码创建各个规则集对应的实例,并将所述实例存储至所述客户端1的内存的预设分段加锁内存空间中,并建立规则集的名称与实例的类名之间的映射关系。
本实施例中,规则引擎服务器2中预先配置了各个规则集,生成并存储了各个规则集对应的计算代码。
例如,预先配置的规则集中包含一个名称为“分享有奖”的规则集,该规则集包含登录、分享两条规则,其中,登录规则为:用户需在2019年1月1日前注册;分享规则为:用户在2019年2月1日-2019年3月1日期间分享次数需超过三次。根据所述登录规则和分享规则即可生成“分享有奖”规则集对应的jave计算代码。
本实施例中,生成java代码的策略为:提供一个公用的接口类(RuleEngine,该接口提供一个公共方法:calculate())。
每一个规则集会生成一个java类,该类实现接口类RuleEngine。
在规则集生成的java类中,实现接口方法(calculate()),方法中依次调用所有规则生成的方法。
规则集中的每一条规则会生成一个方法,每个方法依据传入的参数,获取计算所需要的字段值,并依据规则设定的业务逻辑,对这些值进行计算。
本实施例中,我们设定规则集的名称为:ShareAward,包含的登录规则和分享规则的名称为:RegistRule和ShareRule,注册时间、分享次数字段名称为:registTime、shareNum,那么依据生成策略,所生成的示例java代码如下:
本实施例中的客户端1为需要调用规则进行计算的客户端,可通过确认客户端1是否安装有RuleEngineApi包来确认该客户端1是否需调用规则进行计算。
客户端1在其启动方法(如Main())中,调用初始化方法RuleEngineApi.init(),该方法会建立客户端1与规则引擎服务器2的连接,从规则引擎服务器2中拉取所有规则集对应的java计算代码,并依次加载(ClassLoader)、创建类实例(newInstance),并以类名为键,类实例为值,存入所述客户端1的内存的预设分段加锁内存空间中,同时建立规则集的名称与实例的类名之间的映射关系。在本发明的另一个实施例中,可将规则集的名称作为实例的类名。
ClassLoader为类加载器,java计算代码无法直接存储至客户端1,需通过ClassLoader转换后进行存储。newInstance用于初始化类,生成实例。
客户端1全量加载各个规则集对应的计算代码后,除非规则集有所变更,否则不会再向规则引擎服务器2发送除了心跳检测以外的任何请求。
所述客户端1的内存的预设分段加锁内存空间为ConcurrentHashMap,ConcurrentHashMap采用分段加锁技术将数据分成一段一段进行存储,然后给每一段数据配一把锁,当一个线程访问其中一个段的数据的时候,其他线程可访问其他段的数据,保证了数据安全性的同时可实现多线程同步计算,可大幅提升计算效率。
所述步骤S1还包括:
删除所述预设分段加锁内存空间中各个规则集对应的计算代码。
计算代码用于创建实例,实例创建完成后,删除计算代码可节省客户端1的存储空间。
S2、响应用户的计算请求,所述计算请求包括待计算的数据和规则集的名称,根据所述映射关系及所述规则集的名称从所述预设分段加锁内存空间中获取所述规则集对应的实例,并判断所述客户端1中除所述预设分段加锁内存空间外的剩余内存容量是否大于第一预设阈值。
S3、当剩余内存容量大于第一预设阈值时,根据所述规则集对应的实例和所述待计算的数据进行计算,得到计算结果。
本实施例中,所有规则集对应的实例已被存储至该客户端1的内存的预设分段加锁内存空间中,当需要调用规则进行计算时,可直接调用本地内存中对应的实例进行计算并获取结果,而无需依赖于任何外部服务,实验证明,通过此种方式进行计算时基本不会宕机,并能达到毫秒级的运算速度。
传统规则引擎的规则的计算和规则的配置管理的功能在一个模块中,从而使得规则的计算和规则的配置管理操作无法同时进行,本实施例中,规则的配置管理在规则引擎服务器中2进行,规则的计算则在客户端1进行,这种方式可将规则的配置管理与规则的计算进行分离,当规则引擎服务器2异常时,规则的计算仍可正常进行,同时也实现了规则的变更能够实时生效,且规则变更的同时不影响规则的计算。
以需调用的规则集的名称为“分享有奖”为例,根据规则集的名称与实例的类名之间的映射关系,得到该规则集对应的实例的类名为ShareAward,ShareAward的参数包括cnid、RegistRule、ShareRule,其中,RegistRule对应登录规则,ShareRule对应分享规则,计算过程如下:
1、execute()方法构建参数对象item:
{
"ruleName":"ShareAward",
"data":{
"cnid":"*******************",
"RegistRule":"600",
"ShareRule":"25000"
}
}
2、调用RuleEngineApi.ruleSetProcess(item):
RuleEngineApi.ruleSetProcess会依据参数中实例的类名:"ruleName":"ShareAward",在预设分段加锁内存中查找对应的实例,ConcurrentHashMap.get("ShareAward")得到ShareAwardObject;
3、执行ShareAwardObject中实现的接口方法:calculate(item),将执行的结果:{"ruleName":"ShareAward","result":{}},返回给ruleSetProcess(),再由ruleSetProcess()返回给execute()。
本实施例中,若输入的用户数据经计算后满足登录规则和分享规则,则输出结果为奖励预设额度的积分,若不满足登录规则和分享规则中的任一规则,则输出结果为无奖励积分。
在本发明的另一实施例中,所述步骤S3还包括:
当剩余内存容量小于或等于第一预设阈值时,将所述规则集对应的实例和所述待计算的数据发送给所述规则引擎服务器2以供所述规则引擎服务器2进行计算,并接收所述规则引擎服务器2反馈的计算结果。
在本发明的另一实施例中,所述方法还包括如下步骤:
实时监控所述预设分段加锁内存空间中的实例,当某一实例超过预设时间阈值未被调用,则删除所述实例。
当后续需调用该实例进行计算时,可再次从规则引擎服务器2中获取该实例对应的计算代码,重新生成实例,或者将该实例相关的计算请求发送给规则引擎服务器2,由规则引擎服务器2进行计算并反馈计算结果。
在本发明的另一实施例中,所述方法还包括如下步骤:
实时监控所述剩余内存容量,当所述剩余内存容量小于第二预设阈值时,删除所述预设分段加锁内存空间中的所有实例,并将所述客户端1的计算模式改为远程计算模式,所述远程计算模式为:请求所述规则引擎服务器2进行计算并反馈计算结果。
在本发明的一个实施例中,所述方法还包括如下步骤:
实时获取所述规则引擎服务器2中更新的计算代码,并更新所述预设分段加锁内存空间中该计算代码对应的实例。
本实施例中,针对更新的计算代码,使用单独线程创建、存储实例。通过将实例存储至ConcurrentHashMap中,可隔离实例更新操作和计算操作,使得两个操作相互独立,互不干扰。更新实例时,通过执行ConcurrentHashMap.put()操作来完成实例在ConcurrentHashMap中的更新,此时,ConcurrentHashMap中对应的实例可直接被替换,然而,正在调用规则进行计算的实例仍使用更新前的实例正常计算,待下次计算时会使用更新后的实例。
由上述实施例可知,本发明提出的基于规则调用的数据计算方法,应用于客户端1,首先,从规则引擎服务器2中获取各规则集对应的计算代码,生成对应的实例,再将各实例存入所述客户端1的内存的预设分段加锁内存空间中,此举将各实例进行了隔离,当一个线程访问其中一个实例时,其他线程也可访问其他实例,保证了数据安全性的同时实现了多线程同步计算;然后,当接收到用户提交的计算请求时,直接调用本地内存的预设分段加锁内存空间中的实例进行计算,而无需依赖任何外部服务,从而解决了调用规则进行计算时效率低下的问题。
此外,本发明实施例还提出一种计算机可读存储介质,计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等中的任意一种或者几种的任意组合。计算机可读存储介质中包括数据计算程序10,所述数据计算程序10被处理器执行时实现如下操作:
从规则引擎服务器2中获取各个规则集对应的计算代码,根据所述计算代码创建各个规则集对应的实例,并将所述实例存储至所述客户端1的内存的预设分段加锁内存空间中,并建立规则集的名称与实例的类名之间的映射关系;
响应用户的计算请求,所述计算请求包括待计算的数据和规则集的名称,根据所述映射关系及所述规则集的名称从所述预设分段加锁内存空间中获取所述规则集对应的实例,并判断所述客户端1中除所述预设分段加锁内存空间外的剩余内存容量是否大于第一预设阈值;
当剩余内存容量大于第一预设阈值时,根据所述规则集对应的实例和所述待计算的数据进行计算,得到计算结果。
本发明之计算机可读存储介质的具体实施方式与上述基于规则调用的数据计算方法以及客户端1的具体实施方式大致相同,在此不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (8)
1.一种基于规则调用的数据计算方法,应用于客户端,所述客户端通信连接规则引擎服务器,其特征在于,所述方法包括:
存储步骤:从规则引擎服务器中获取各个规则集对应的计算代码,根据所述计算代码创建各个规则集对应的实例,根据分段加锁技术将所述实例的数据分成多个分段,并给每段数据配置一把锁后分段存储至所述客户端的内存的预设分段加锁内存空间中,并建立规则集的名称与实例的类名之间的映射关系;
判断步骤:响应用户的计算请求,所述计算请求包括待计算的数据和规则集的名称,根据所述映射关系及所述规则集的名称从所述预设分段加锁内存空间中获取所述规则集对应的实例,并判断所述客户端中除所述预设分段加锁内存空间外的剩余内存容量是否大于第一预设阈值;
计算步骤:当剩余内存容量大于第一预设阈值时,根据所述规则集对应的实例和所述待计算的数据进行计算,得到计算结果;
监控步骤:实时监控所述剩余内存容量,当所述剩余内存容量小于第二预设阈值时,删除所述预设分段加锁内存空间中的所有实例,并将所述客户端的计算模式改为远程计算模式,所述远程计算模式为:请求所述规则引擎服务器进行计算并反馈计算结果。
2.如权利要求1所述的基于规则调用的数据计算方法,其特征在于,所述计算步骤还包括:
当剩余内存容量小于或等于第一预设阈值时,将所述规则集对应的实例和所述待计算的数据发送给所述规则引擎服务器以供所述规则引擎服务器进行计算,并接收所述规则引擎服务器反馈的计算结果。
3.如权利要求1所述的基于规则调用的数据计算方法,其特征在于,所述方法还包括:
实时监控所述预设分段加锁内存空间中的实例,当某一实例超过预设时间阈值未被调用,则删除所述实例。
4.如权利要求1-3任一项所述的基于规则调用的数据计算方法,其特征在于,所述方法还包括:
实时获取所述规则引擎服务器中更新的计算代码,并更新所述预设分段加锁内存空间中该计算代码对应的实例。
5.一种客户端,所述客户端通信连接规则引擎服务器,其特征在于,该客户端包括:存储器、处理器,所述存储器上存储有可在所述处理器上运行的数据计算程序,所述数据计算程序被所述处理器执行时实现如下步骤:
存储步骤:从规则引擎服务器中获取各个规则集对应的计算代码,根据所述计算代码创建各个规则集对应的实例,根据分段加锁技术将所述实例的数据分成多个分段,并给每段数据配置一把锁后分段存储至所述客户端的内存的预设分段加锁内存空间中,并建立规则集的名称与实例的类名之间的映射关系;
判断步骤:响应用户的计算请求,所述计算请求包括待计算的数据和规则集的名称,根据所述映射关系及所述规则集的名称从所述预设分段加锁内存空间中获取所述规则集对应的实例,并判断所述客户端中除所述预设分段加锁内存空间外的剩余内存容量是否大于第一预设阈值;
计算步骤:当剩余内存容量大于第一预设阈值时,根据所述规则集对应的实例和所述待计算的数据进行计算,得到计算结果;
监控步骤:实时监控所述剩余内存容量,当所述剩余内存容量小于第二预设阈值时,删除所述预设分段加锁内存空间中的所有实例,并将所述客户端的计算模式改为远程计算模式,所述远程计算模式为:请求所述规则引擎服务器进行计算并反馈计算结果。
6.如权利要求5所述的客户端,其特征在于,所述计算步骤还包括:
当剩余内存容量小于或等于第一预设阈值时,将所述规则集对应的实例和所述待计算的数据发送给所述规则引擎服务器以供所述规则引擎服务器进行计算,并接收所述规则引擎服务器反馈的计算结果。
7.如权利要求5所述的客户端,其特征在于,所述数据计算程序被所述处理器执行时还实现如下步骤:
实时监控所述预设分段加锁内存空间中的实例,当某一实例超过预设时间阈值未被调用,则删除所述实例。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有数据计算程序,所述数据计算程序可被一个或者多个处理器执行,以实现如权利要求1至4任一项所述的基于规则调用的数据计算方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911028014.3A CN110764913B (zh) | 2019-10-28 | 2019-10-28 | 基于规则调用的数据计算方法、客户端及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911028014.3A CN110764913B (zh) | 2019-10-28 | 2019-10-28 | 基于规则调用的数据计算方法、客户端及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110764913A CN110764913A (zh) | 2020-02-07 |
CN110764913B true CN110764913B (zh) | 2022-09-20 |
Family
ID=69333992
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911028014.3A Active CN110764913B (zh) | 2019-10-28 | 2019-10-28 | 基于规则调用的数据计算方法、客户端及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110764913B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782262B (zh) * | 2020-06-30 | 2024-05-14 | 深圳赛安特技术服务有限公司 | 数据动态发布方法、装置、系统、设备及存储介质 |
CN111932076B (zh) * | 2020-07-09 | 2023-12-12 | 车智互联(北京)科技有限公司 | 一种规则配置和发布方法、装置及计算设备 |
CN112579054A (zh) * | 2020-12-10 | 2021-03-30 | 平安普惠企业管理有限公司 | 规则引擎的规则更新方法、装置、设备及介质 |
CN114222004B (zh) * | 2021-12-14 | 2024-07-09 | 平安壹钱包电子商务有限公司 | 业务数据分发执行方法、装置、计算机设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104391745A (zh) * | 2014-10-13 | 2015-03-04 | 浪潮通用软件有限公司 | 一种可扩展的对象生命周期管理方法 |
CN107729134B (zh) * | 2017-10-31 | 2021-09-07 | 努比亚技术有限公司 | 一种提高应用程序本地方法运行速度的方法、移动终端及计算机可读存储介质 |
CN108008944A (zh) * | 2017-11-29 | 2018-05-08 | 千寻位置网络有限公司 | 规则引擎响应方法及系统、规则引擎、服务终端、存储器 |
CN108399066A (zh) * | 2018-01-25 | 2018-08-14 | 链家网(北京)科技有限公司 | 一种规则引擎实现方法及装置 |
CN109120709A (zh) * | 2018-09-03 | 2019-01-01 | 杭州云创共享网络科技有限公司 | 一种缓存方法、装置、设备及介质 |
-
2019
- 2019-10-28 CN CN201911028014.3A patent/CN110764913B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110764913A (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110764913B (zh) | 基于规则调用的数据计算方法、客户端及可读存储介质 | |
CN107967135B (zh) | 计算引擎实现方法、电子装置及存储介质 | |
WO2019134340A1 (zh) | 薪资计算方法、应用服务器及计算机可读存储介质 | |
US7996570B1 (en) | Usage of keyboard driver in extensible firmware interface for adding new hot keys at firmware level | |
CN110633135A (zh) | 异步任务分配方法、装置、计算机设备及存储介质 | |
CN110851298B (zh) | 异常分析及处理方法、电子装置及存储介质 | |
WO2019148721A1 (zh) | 电子装置、互联网服务系统风险预警方法及存储介质 | |
CN113342472A (zh) | 微服务集群创建方法、装置、电子设备及可读存储介质 | |
CN111988429A (zh) | 算法调度方法以及系统 | |
WO2023029509A1 (zh) | 动态服务发布方法、装置、电子设备及存储介质 | |
CN110830360A (zh) | 多应用程序互通方法、电子装置及计算机可读存储介质 | |
CN111885184A (zh) | 高并发场景下热点访问关键字处理方法和装置 | |
CN110569114B (zh) | 一种业务处理方法、装置、设备及存储介质 | |
CN109561134B (zh) | 电子装置、分布式集群服务分配方法及存储介质 | |
CN113434122A (zh) | 多角色页面创建方法、装置、服务器及可读存储介质 | |
CN111158777B (zh) | 组件调用方法、装置及计算机可读存储介质 | |
CN115004667B (zh) | 信息推送方法、装置、电子设备及计算机可读介质 | |
CN112257078B (zh) | 一种基于tee技术的区块链加解密服务安全可信系统 | |
CN115033605A (zh) | 数据查询方法、装置、电子设备及存储介质 | |
US10897463B2 (en) | Managing and securing manageable resources in stateless web server architecture using servlet filters | |
CN112527443A (zh) | 提示框显示方法、装置、电子设备及计算机可读存储介质 | |
CN109582680A (zh) | 基于新产品开发的业务处理方法、电子装置及可读存储介质 | |
CN115934576B (zh) | 交易场景下的测试用例生成方法、装置、设备及介质 | |
CN112637280B (zh) | 数据传输方法、装置、电子设备及存储介质 | |
CN113609421B (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 |