`
Mr-zhang
  • 浏览: 18399 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

主题:主题:规则引擎开发规范--规则配置类规范<连载5>

阅读更多
2.3. 内存表的子线程相互间的内存共享
如果内存表在主线程中创建,在子线程中共享调用时,可以采用上述的共享方式来调用。但是当多个子线程中,如果需要进行一些数据共享时,那么就不能采用共享方式。
因此我们现在假设有这两类子线程:
1、 内存表数据更新线程
2、 使用内存表数据的线程
比如我们需要批量对订单数据进行折扣计算,在根据订单数据进行运算的子线程中,要根据产品信息、产品定价信息、产品报价信息、产品折扣配置等信息进行处理。除了订单信息是本次运算时需要从数据库中获取的,其他的相关信息,如果每次都从数据库中读取,就太消耗资源。
因此我们希望内存表数据更新子线程,可以事先将这些数据保存到共享内存表中。折扣计算子线程需要用到这些配置信息时,只要从共享的内存表信息中读取就可以了。以下分别描述几个子线程需要完成的动作。
内存表数据更新子线程:
1、 从数据库从读取最新的数据。存储到当前的进程的共享内存池中。
2、 如果配置了支持基于文件共享,那么在将内存表存储到共享内存池中时,同时会在指定的目录下,将内存表序列化到文件中。
维护基于文件共享的子线程:
1、 如果配置了支持基于文件共享,那么就会将指定目录下,所有序列化的内存表,读取到共享内存池中。
使用内存表数据的线程:
1、 将当前规则包中内存表的“数据共享”属性设置成“全局单例共享”或者“全局复制共享”
2、 如果是全局单例共享,则会生成一个新的内存表,同时内存表的数据和索引指向共享内存池中的内存表。
3、 如果是全局复制共享,则会生成一个新的内存表并且复制数据,同时索引指向共享内存池中的内存表的索引。
2.4. 内存表操作尽可能拉平处理
采用规则引擎处理业务逻辑时,如果是进行批量数据的逻辑处理,一般都需要采用内存表来记录被处理的数据。此时可能需要对这些批量的数据进行逻辑处理,或者需要根据其他表格进行匹配后,进行处理。
在处理中,我们尽可能将内存表拉平处理,每个计算结果,尽可能保留在表格中,以便于查错等;设计上保留中间数据保存的机制。
比如我们有个计算工资的业务。首先有张员工信息表,记录了员工id,员工名称、员工级别,基本工资等信息。还有一张考勤表,记录了员工id、日期、考勤情况。还有一张工资表,记录员工的id、基本工资、应发工资、所得税、实发工资。
规则的处理步骤一般如下:
1、 汇总考勤数据,统计出员工id、出勤天数、加班天数、缺勤天数。
2、 根据员工基本工资,然后根据出勤天数、加班天数和缺勤天数,计算出员工的加班工资和扣款。
3、 然后根据基本工资、加班工资和扣款,得到应发工资
4、 在根据应发工资扣除所得税,五险一金等,得到实发工资。
在具体的内存表的设计中,可以采用根据这些逻辑,处理以上这个表格。但是这种模式,不便于规则理解和差错。因此我们应该设计一张拉平表,这张表记录了和这个员工计算相关的所有信息。字段如下:员工id、员工名称、员工级别、基本工资、月份、出勤天数、加班天数、缺勤天数、加班工资、扣款、应发工资、所得税、五险一金、实发工资。
这些数据有些并不需要最后返回给系统,但是确实中间计算的值。但是采用拉平表将这些信息存储在一张表中,这样非常便于执行完之后的查看等。特别是将这张表,导出成Excel,非常便于业务人员进行差错。很容易知道是哪个规则在哪一步发生了错误。
分享到:
评论

相关推荐

    Struts原理、开发及项目实施

    Struts原理、开发及项目实施&lt;br/&gt; Holen 2002-9-12&lt;br/&gt;&lt;br/&gt;1、 摘要&lt;br/&gt;2、 关键词&lt;br/&gt;3、 Framework&lt;br/&gt;4、 Struts的起源&lt;br/&gt;5、 Struts工作原理&lt;br/&gt;6、 Struts安装&lt;br/&gt;7、 一个实例&lt;br/&gt;8、 Struts优缺点...

    框架设计学习资料 连载 连载不断更新

    - **标签**: `&lt;h1&gt;`至`&lt;h6&gt;`,分别表示不同级别的标题。 - **示例**: ```html &lt;h1&gt;一级标题&lt;/h1&gt; &lt;h2&gt;二级标题&lt;/h2&gt; ``` ##### 3. HTML段落 - **标签**: `&lt;p&gt;`,用于定义一个段落。 - **示例**: ```html &lt;p&gt;...

    FlowChartX控件

    &lt;br&gt; FlowChartX控件 是一个多用途的软件工具,它可以用来显示在各种不同格式的类型的图表。...&lt;br&gt;&lt;br&gt; FlowChartX控件屏幕截图如下:&lt;br&gt;&lt;br&gt; &lt;img src=DownloadFilesgrid_activeximagesdemo.jpg&gt;&lt;br&gt;&lt;br&gt;

    Litelog - WCF 项目应用连载[6] - 升级Lig服务 - 设计ILigger 构建一个完善的Lig版本

    WCF 项目应用连载[5] - 自定义配置 扩展ChannelFactory&lt;T&gt; WCF 项目应用连载[6] - 升级Lig服务 - 设计ILigger 构建一个完善的Lig版本 WCF 项目应用连载[7] - 绑定、服务、行为 大数据传输与限流 - 上 WCF 项目应用...

    Ajax in action(中文版+源码)

    下载说明:&lt;br&gt;&lt;br&gt;共八章 CSDN web版书籍连载整理成PDF文档,有目录,附源码!&lt;br&gt;目前最全的中文电子版本!&lt;br&gt;&lt;br&gt;内容介绍:&lt;br&gt;Ajax领域的新框架和组件库层出不穷,一些功能非常简单,一些则是过度的设计或者...

    vuecli3+node的管理系统

    &gt; 5. express : Web 应用程序开发框架 &gt; 6. gravatar : 全球公认头像 模块 &gt; 7. jsonwebtoken: 实现登录Token的模块 &gt; 8. jwt-decode : 解析Token的模块 &gt; 9. mongoose: 连接MongoDB的必要模块

    Litelog - WCF 项目应用连载[2] - 创建Lig日志系统 C# 源代码

    WCF 项目应用连载[5] - 自定义配置 扩展ChannelFactory&lt;T&gt; WCF 项目应用连载[6] - 升级Lig服务 - 设计ILigger 构建一个完善的Lig版本 WCF 项目应用连载[7] - 绑定、服务、行为 大数据传输与限流 - 上 WCF 项目...

    ESRI Flex GIS开发连载(1) ---环境搭建

    **ESRI Flex GIS开发连载(1) - 环境搭建** 在ESRI Flex GIS开发中,环境搭建是首要步骤,它确保了开发者有一个稳定且兼容的平台来创建GIS应用程序。Flex是Adobe开发的一种用于构建富互联网应用(RIA)的编程语言,...

    struts2.0(9-12)

    Struts 2 是一个流行的Java Web开发框架,用于构建企业级的应用程序。在这个"Struts2.0(9-12)"系列中,我们将重点讨论如何在Struts 2 中实现文件上传功能,这是一个常见的需求,特别是在处理用户提交的图片、文档等...

    FPGA Verilog HDL 设计实例系列连载--------有限状态机设计

    ### FPGA Verilog HDL 设计实例系列连载——有限状态机设计 #### 1. 有限状态机(FSM)概述 有限状态机(Finite State Machine,FSM)是数字系统设计中非常重要的概念之一,它被广泛应用于各种数字系统的控制逻辑中...

Global site tag (gtag.js) - Google Analytics