flowable数据表详解

news2024/12/24 9:16:31

爬虫组件分析

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.flowable
      • 2.数据表的命名规则
      • 3.ACT_RU_*
      • 4.ACT_ID_*
      • 5.ACT_HI_*
      • 数据表的介绍
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

网络爬虫的是一个非常常见的需求。

需求:

1.URL管理
2. 网页下载器
3. 爬虫调度器
4. 网页解析器
5. 数据处理器

设计思路

实现思路分析

1.flowable

我们在接入flowable框架的时候,运行项目如果数据库没有flowable自带的表会自动创建出来,总共60张表,每张表都有其作用,下面会具体介绍表的用途。

2.数据表的命名规则

ACT_RE_*

’RE’表示repository(存储)。RepositoryService接口操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。

3.ACT_RU_*

’RU’表示runtime。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。flowable只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。

4.ACT_ID_*

’ID’表示identity(组织机构)。这些表包含标识的信息,如用户,用户组,等等。

5.ACT_HI_*

’HI’表示history。就是这些表包含着历史的相关数据,如结束的流程实例,变量,任务,等等。

数据表的介绍

普通数据,各种情况都使用的数据。
表分类 表名 描述

运行实例表(10)

运行实例表
ACT_RU_DEADLETTER_JOB 正在运行的任务表

ACT_RU_EVENT_SUBSCR 运行时事件

ACT_RU_EXECUTION *
运行时流程执行实例

ACT_RU_HISTORY_JOB 历史作业表

ACT_RU_IDENTITYLINK 运行时用户关系信息

ACT_RU_JOB 运行时作业表

ACT_RU_SUSPENDED_JOB
ACT_RU_TASK * 运行时任务表

ACT_RU_TIMER_JOB 定时作业表

ACT_RU_VARIABLE * 运行时变量表

流程历史记录(8)
ACT_HI_ACTINST * 历史的流程实例,记录流转的流程组件(节点、网关)
ACT_HI_ATTACHMENT 历史的流程附件

ACT_HI_TASKINST * 历史的任务实例

ACT_HI_VARINST * 历史的流程运行中的变量信息

ACT_HI_COMMENT 历史的流程操作信息记录

ACT_HI_DETAIL * 历史的流程变量记录表

ACT_HI_IDENTITYLINK 历史的流程身份认证记录

ACT_HI_PROCINST 历史的流程定义实例记录

资源表(2)
ACT_GE_BYTEARRAY * 存储部署的流程文件

ACT_GE_PROPERTY * 记录系统相关属性

ACT_ID_BYTEARRAY 二进制数据表

ACT_ID_GROUP 用户组信息表

ACT_ID_INFO 用户信息详情表

ACT_ID_MEMBERSHIP 人与组关系表

ACT_ID_PRIV 权限表

ACT_ID_PROPERTY 属性表

ACT_ID_TOKEN 系统登录日志表

ACT_ID_USER 用户表

ACT_ID_PRIV_MAPPING 私有人与组关系表

流程定义表(3)
ACT_RE_DEPLOYMENT * 部署单元信息 (记录部署时间)

ACT_RE_MODEL 模型信息

ACT_RE_PROCDEF * 已部署的流程定义(记录部署的资源路径)

CMMN流程引擎数据表(11)

ACT_CMMN_CASEDEF
ACT_CMMN_DATABASECHANGELOGLOCK
ACT_CMMN_DEPLOYMENT
ACT_CMMN_DEPLOYMENT_RESOURCE
ACT_CMMN_HI_CASE_INST
ACT_CMMN_HI_MIL_INST
ACT_CMMN_RU_CASE_INST
ACT_CMMN_RU_MIL_INST
ACT_CMMN_RU_PLAN_ITEM_INST
ACT_CMMN_RU_SENTRY_PART_INST

DMN流程引擎数据表(6)
ACT_DMN_DATABASECHANGELOGLOCK
ACT_DMN_DATABASECHANGELOG
ACT_DMN_DECISION_TABLE
ACT_DMN_DEPLOYMENT
ACT_DMN_DEPLOYMENT_RESOURCE
ACT_DMN_HI_DECISION_EXECUTION

表单引擎数据表(6)
ACT_FO_DATABASECHANGELOG
ACT_FO_FORM_DEFINITION
ACT_FO_FORM_DEPLOYMENT
ACT_FO_FORM_INSTANCE
ACT_DMN_DEPLOYMENT_RESOURCE
ACT_DMN_HI_DECISION_EXECUTION

表单引擎数据表(6)
ACT_FO_DATABASECHANGELOG
ACT_FO_FORM_DEFINITION
ACT_FO_FORM_DEPLOYMENT
ACT_FO_FORM_INSTANCE
ACT_FO_FORM_RESOURCE
ACT_FO_DATABASECHANGELOGLOCK

内容引擎数据表(3)
ACT_CO_DATABASECHANGELOGLOCK
ACT_CO_DATABASECHANGELOG
ACT_CO_CONTENT_ITEM

其他表(2)
ACT_EVT_LOG 事件日志记录

ACT_PROCDEF_INFO 流程定义信息

Flowable引擎:
流程引擎 (流程部署、待办查询、历史任务、身份认证、流程展示) *
CMMN引擎(支持异步服务、手动激活规则、自动完成、用户事件监听器)
DMN引擎(决策引擎, 如排他网关设置条件可以进行识别并决定走向)
IDM身份识别引擎 (自带一套身份认证体系)
表单引擎 (自带一套组件编辑器,可在界面画表单,实现流程流转)
*内容引擎 (在mybatis上封装获取表元数据、流程模型等)

自定义sql

如果你的业务对于flowable的api接口还不满足,那么你可以写一些自定义的sql。如下代码示例:

//查询待办信息
public List<Task> QueryTask(String businessType, List<String> businessIds) {
	if(StringUtils.isEmpty(businessType) || ListUtil.isEmpty(businessIds)) {
		logger.warn("QueryTaskRecord请求参数为空. businessType:"+businessType+" businessIds:"+businessIds);
		return new ArrayList<>();
	}

	StringBuffer businessIdsSb = new StringBuffer();
	for(int i = 0;i < businessIds.size(); i++) {
		String businessId = businessIds.get(i);
		if (i == businessIds.size() - 1) {
			businessIdsSb.append("'" + businessId + "'");
		} else {
			businessIdsSb.append("'" + businessId + "',");
		}

	}

	StringBuffer sb = new StringBuffer();
	sb.append("SELECT RES.*FROM ACT_RU_TASK RES " +
		"LEFT JOIN ACT_RU_VARIABLE VAR ON RES.`PROC_INST_ID_` = VAR.`PROC_INST_ID_`" +
		"WHERE RES.`PROC_INST_ID_` IN (" +
			"SELECT `PROC_INST_ID_` FROM ACT_RU_VARIABLE " +
			"WHERE `PROC_INST_ID_` IN (" +
				"SELECT `PROC_INST_ID_` FROM ACT_RU_VARIABLE " +
				"WHERE `NAME_` = 'business_id' AND `TEXT_` IN (" + businessIdsSb.toString() + ")" +
			") AND `NAME_` = 'business_type' AND `TEXT_` = '" + businessType + "'" +
		") group by VAR.`PROC_INST_ID_`" +
		"order by RES.`CREATE_TIME_` desc");
	//通过传入自定义sql,返回的结果必须是ACT_RU_TASK的结果集,因为Task对应的表是ACT_RU_TASK,传入
	List<Task> tasks = taskService.createNativeTaskQuery().sql(sb.toString()).parameter("business_type", businessType).list();
	return tasks;
}

当然你也可以使用mybatis等orm框架去实现自定义sql,但是使用TaskService和HistoryService服务提供自定义sql的api是有一定区别。这点需要注意,flowable框架的自定义sql的api在执行方法的时候有事务的隔离性,它允许节点执行跳转到下一个节点操作的时候查询待办可以到下一节点的待办信息,而使用orm框架则无法做到在同一方法里执行

在这里插入图片描述
节点跳转再去查询下一节点的待办信息,因为此时的下一节点的数据还没存入到db中所以查询不到。

从架构图中可以看出,Flowable对于数据的处理是冷热分离的,热数据存在ACT_RU_系列表中,历史冷数据存在ACT_HI_系列表中,定义相关的存在ACT_RE_系列表中,而对于在途和定义相关的数据,有一层缓存,他缓存的具体实现比较复杂,这里不多赘述。

对于协议到运行态的转化,有专门一层Converter来实现,也就是说,如果你想自己定义一些协议外的东西,就需要关心这个部分。

Flowable在最新的版本中,对于历史归档和异步任务做了新的优化,具体的看下面。

新的异步执行器(ASYNC EXECUTOR)

在这里插入图片描述

在工作流中,异步执行大概分为两类,timer和message,类似于定时事件就是timer,而异步的服务任务则为message,如上图所示,“Task A”附着的边界定时事件,在时间触发之后,会执行“Escalate”任务,而“Async Service Task”在“Task A”流转之后,会启用一个异步任务去调用其服务。

在这里插入图片描述

对于一种全是异步服务任务的极端情况,如上图所示,他常常出现于服务编排之类的场景之中,我们经常性的需要同时处理一系列的任务,这时候异步调度的作用就非常重要。

为了提高性能,Flowable也采用了冷热数据分离的思想,他把数据分为了4类,异步Job,定时器Timer,挂起任务,死信队列。通过测试发现,数据库是异步任务性能低下的主要瓶颈,特别是多实例竞争Job会存在潜在的问题。在分表的时候同时加上了一个全局锁,保证了同一个实例只能由一个实例去获取并锁定job(job表中有字段会被update,内容为抢占到的实例代号),这样反而能提升不少性能。为了保证各个实例不被饿死,还调整了一系列参数。

Flowable提供了一个更加优化的冷热数据分离方案,在数据敏感性比较高的领域,我们一般会把引擎的历史记录级别调到最高(包括流程流转历史、变量变动历史、签收人变动历史等等),这些历史记录在以前是在同一个上下文中执行的,虽然在最开始设计的时候,在途数据和历史数据就冷热分离了,但从权衡在途和历史的重要性的角度来讲,历史其实不是最重要的,所以Flowable提供一系列的方法使历史记录这个行为异步化,与之对应的方法可以是jms,MQ或Spring Boot listener application。 这个改动可以提升在途流程效率20%-96%。

参考资料和推荐阅读

  1. https://blog.csdn.net/qq_25542879/article/details/107067551
    2.https://www.cnblogs.com/johnvwan/p/15630018.html

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~
如有版权等私信联系,请私信删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AjaxRedis问题总结

一、JQuery——Ajax实现三大方法的应用及区别&#xff08;get,post,ajax&#xff09; 1. $.get()方法 <script type"text/javascript">$(function () {$("#send").click(function () {$.get("AjaxHandler.ashx", {username: $("#use…

【操作系统】国科大《高级操作系统》思考题整理

参考用书&#xff1a;《Linux内核设计的艺术》 引言 国科大杨力祥《高级操作系统》思考题整理 思考题 为什么开始启动计算机的时候&#xff0c;执行的是BIOS代码而不是操作系统自身的代码&#xff1f;&#xff08;P1&#xff0c;3&#xff09; 加电的一瞬间&#xff0c;计算…

graphviz安装及使用、决策树生成

一、graphviz下载安装 下载网址&#xff1a;http://www.graphviz.org/download/ 选择合适版本下载 1.1 双击安装 1.2 点击下一步 1.3 点击我接受 1.4 添加至系统路径 勾选添加至当前用户的系统路径&#xff0c;创建桌面图标可选&#xff0c;点击下一步 1.5 选择安装位置 浏…

「设备树」dtb给内核的两种工作模式

一&#xff0c;传递dtb给内核对于传统bootloader提供两种工作模式&#xff1a;一是启动加载模式&#xff08;start loading&#xff09;&#xff0c;一是下载模式&#xff08;downloading&#xff09;工作在启动加载模式时&#xff0c;bootloader会自动执行bootcmd命令&#xf…

AGV移动机器人PID运动控制

PID算法基本原理 PID算法是控制行业最经典、最简单、而又最能体现反馈控制思想的算法&#xff0c;PID算法利用反馈来检测偏差信号&#xff0c;并通过偏差信号来控制被控量。而控制器本身就是比例、积分、微分三个环节的加和。其功能框如图1所示&#xff1a; 考虑在某个特定的时…

C语言-指针进阶(9.1)

目录 思维导图&#xff1a; 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组传参和指针传参 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 写在最后 思维导图&#xff1a;…

年底赶进度,如何将开发风险降到最低?

1、科学规划风险策略和控制流程 针对开发流程各环节中可能存在的风险&#xff0c;项目经理需要进行项目风险分析&#xff0c;并制定符合项目特点的风险评估和监督机制&#xff0c;实行岗位负责制&#xff0c;提前制定好控制策略&#xff0c;将开发风险降到最低。 如何将开发风险…

分布式基础篇2——分布式组件

一、SpringCloud Alibaba1、简介2、为什么使用3、版本选择4、依赖选择二、SpringCloud Alibaba 组件1、Nacos作为注册中心2、OpenFeign3、Nacos作为配置中心namespaceData IDGroup同时加载多个配置文件三、Spring Cloud1、GateWay简介三大核心部分网关的使用视频来源: 【Java项…

Ansible剧本流程控制

handlers触发器 notify&#xff1a;监控上面的模块执行是否发生变化 chufa&#xff1a;自定义的任务名称&#xff0c;自动去handlers里面匹配相对应的任务名称执行动作 下方是copy了/data/copy/下的文件到server2组里的主机/data/monster/handlers/下&#xff0c;notify监控发…

如何下载指定版本的xcode

如何下载指定版本的xcode一、安装最新版本xcode二、下载指定版本xcode一、安装最新版本xcode 从苹果商店中获取并安装即可。 但是安装最新版有个风险&#xff0c;就是它有系统版本的要求&#xff0c;比如这里要求macOS版本最低是12.5 如果版本不够的话&#xff0c;可以升级系统…

【蓝桥杯基础题】2020年省赛填空题—既约分数

&#x1f451;专栏内容&#xff1a;蓝桥杯刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录一、题目背景二、题目描述三、题目分析1.求最大公约数①辗转相减法②穷举法③辗转相除法④辗转相除法&#xff08;递归&am…

LVGL之学习篇(一)

LVGL之学习篇(一) 学习目的 LVGL简介 LVGL本身是一个图形库&#xff0c;前身是litterVGL。其作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor&#xff0c;LVGL用C语音编写&#xff0c;以实现最大的兼容性(与C兼容)&#xff0c;模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计…

MATLAB实验三

实验三 &#xff08;实验报告中附上每题的主要程序和结果&#xff09; 1、在命令行窗口中分别输入下列命令&#xff0c;对应输出结果是 A&#xff0e;命令x[-2:2] B&#xff0e;命令xzeros(1,2);x>0 C&#xff0e;命令ydiag(eye(3),1) D&#xff0e;命令[-2:2]30*eye(…

内存分页机制

文章目录内存分页的原因一级页表分页机制的原理一级页表二级页表二级页表概述地址转换启动分页机制内存分页的原因 在还未出现内存分页机制之前&#xff0c;我们都内存分段机制下工作。 但是&#xff0c;这样会有个问题。来看个下方的例子。 进程在分段机制下运行 下图&…

【学习记录】ORBSLAM2均匀化策略源码解析

在ORBSLAM中&#xff0c;为了保证特征的均匀分布使用了均匀化的策略&#xff0c;最近在尝试扩展一下均匀化的内容&#xff0c;所以仔细看了一下ORBSLAM源码里面这部分的内容&#xff0c;之前看源码的时候没有展开仔细看这一部分的代码&#xff0c;这里补充记录一下&#xff0c;…

未来SSD的接口趋势是什么?

针对SSD接口标准&#xff0c;目前业内有两大组织&#xff1a;PCI-SIG&#xff1a;这个就是定义pcie协议标准的那个组织&#xff0c;我们常见的传统接口M.2, U.2, 2.5英寸的接口都归这个组织定义规范。M.2&#xff0c;U.2起源与客户端&#xff0c;也是企业级当前最常用的接口形式…

elasticdump迁移ES数据详解

文章目录elasticdump 简介1.elasticdump导入ES数据到本地json文件2、将本地数据导入es中3、将es导入另一个es4 .其他参数使用--searchBody使用--searchBody 向本机ES导数据使用--typeanalyzer导出分析器elasticdump 简介 elasticdump是一个能够将es的数据快速导入、导出、迁移…

最新最全-中文生物医学命名实体识别最新研究论文、资源、数据集、性能整理分享

本资源旨在跟踪中文生物医学自然语言处理的进展&#xff0c;收集整理相关的论文列表和展示现存方法性能。内容整理自网络&#xff0c;源地址&#xff1a;https://github.com/lingluodlut/Chinese-BioNLP中文电子病历命名实体识别中文电子病历命名实体识别&#xff08;Chinese C…

《操作系统-真象还原》阅读总结/遗憾离场/加倍努力 出人头地

文章目录关于我又被老天算计奇奇怪怪的 BUG调试 BUG 的心理历程最后两天通宵调试程序的宵夜阅读建议本书所有笔记最后关于我又被老天算计 从 2022-09-14 读这本书&#xff0c;原计划是 2022-12-15 之前完成的&#xff0c;我自信能完成&#xff0c;因为11月下旬我已经开始阅读第…

【Linux】初识进程

文章目录进程控制块的引入初识进程控制块(PCB - Process Control Block)什么是PCBLinux下的PCB初见进程ps指令查看进程kill指令挂掉进程通过系统调用接口得到进程的ID(进程标识符)从根目录下的proc文件查看进程通过fork函数创建子进程进程控制块的引入 首先&#xff0c;听到进…