This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 341f1c6  Automated deployment: c21afc9beeaa88a76c9b775ee393673ec39274f9
341f1c6 is described below

commit 341f1c6dcde142eff60d0d71119cd7de57ca29e6
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Jun 2 10:09:28 2021 +0000

    Automated deployment: c21afc9beeaa88a76c9b775ee393673ec39274f9
---
 build/{blog.e648da6.js => blog.cfdb16c.js}         |    2 +-
 en-us/blog/index.html                              |    2 +-
 .../1620304011852-1621754591271.png                |  Bin 0 -> 104322 bytes
 .../1620304011852.png                              |  Bin 0 -> 104322 bytes
 .../image-20210524102618970.png                    |  Bin 0 -> 43546 bytes
 .../image-20210524103609210.png                    |  Bin 0 -> 34961 bytes
 .../image-20210524104218236.png                    |  Bin 0 -> 60544 bytes
 .../image-20210524104503423.png                    |  Bin 0 -> 45135 bytes
 .../image-20210524104838911.png                    |  Bin 0 -> 44057 bytes
 .../image-20210524144950185.png                    |  Bin 0 -> 96396 bytes
 img/dolphinscheduler_json_20210601/json.png        |  Bin 0 -> 60578 bytes
 zh-cn/blog/dolphinscheduler_json.html              | 1043 ++++++++++++++++++++
 zh-cn/blog/dolphinscheduler_json.json              |    6 +
 zh-cn/blog/index.html                              |    4 +-
 14 files changed, 1053 insertions(+), 4 deletions(-)

diff --git a/build/blog.e648da6.js b/build/blog.cfdb16c.js
similarity index 80%
rename from build/blog.e648da6.js
rename to build/blog.cfdb16c.js
index f8e0407..4007b34 100644
--- a/build/blog.e648da6.js
+++ b/build/blog.cfdb16c.js
@@ -1 +1 @@
-webpackJsonp([1],{1:function(e,t){e.exports=React},2:function(e,t){e.exports=ReactDOM},401:function(e,t,n){e.exports=n(402)},402:function(e,t,n){"use
 strict";function r(e){return e&&e.__esModule?e:{default:e}}function 
a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a 
function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been 
initialised - super() hasn't been called");return!t||"object"!=typeof 
t&&"function"!=typeof t?e:t}function l(e,t){if("functi [...]
\ No newline at end of file
+webpackJsonp([1],{1:function(e,t){e.exports=React},2:function(e,t){e.exports=ReactDOM},401:function(e,t,n){e.exports=n(402)},402:function(e,t,n){"use
 strict";function r(e){return e&&e.__esModule?e:{default:e}}function 
o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a 
function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been 
initialised - super() hasn't been called");return!t||"object"!=typeof 
t&&"function"!=typeof t?e:t}function l(e,t){if("functi [...]
\ No newline at end of file
diff --git a/en-us/blog/index.html b/en-us/blog/index.html
index 248ef91..e23447a 100644
--- a/en-us/blog/index.html
+++ b/en-us/blog/index.html
@@ -16,7 +16,7 @@
   <script 
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
   <script>window.rootPath = '';</script>
   <script src="/build/vendor.98926a5.js"></script>
-  <script src="/build/blog.e648da6.js"></script>
+  <script src="/build/blog.cfdb16c.js"></script>
   <script>
     var _hmt = _hmt || [];
     (function() {
diff --git a/img/dolphinscheduler_json_20210601/1620304011852-1621754591271.png 
b/img/dolphinscheduler_json_20210601/1620304011852-1621754591271.png
new file mode 100644
index 0000000..c77df50
Binary files /dev/null and 
b/img/dolphinscheduler_json_20210601/1620304011852-1621754591271.png differ
diff --git a/img/dolphinscheduler_json_20210601/1620304011852.png 
b/img/dolphinscheduler_json_20210601/1620304011852.png
new file mode 100644
index 0000000..c77df50
Binary files /dev/null and 
b/img/dolphinscheduler_json_20210601/1620304011852.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524102618970.png 
b/img/dolphinscheduler_json_20210601/image-20210524102618970.png
new file mode 100644
index 0000000..e0203e1
Binary files /dev/null and 
b/img/dolphinscheduler_json_20210601/image-20210524102618970.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524103609210.png 
b/img/dolphinscheduler_json_20210601/image-20210524103609210.png
new file mode 100644
index 0000000..bcccd89
Binary files /dev/null and 
b/img/dolphinscheduler_json_20210601/image-20210524103609210.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524104218236.png 
b/img/dolphinscheduler_json_20210601/image-20210524104218236.png
new file mode 100644
index 0000000..7cea660
Binary files /dev/null and 
b/img/dolphinscheduler_json_20210601/image-20210524104218236.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524104503423.png 
b/img/dolphinscheduler_json_20210601/image-20210524104503423.png
new file mode 100644
index 0000000..51d5d4e
Binary files /dev/null and 
b/img/dolphinscheduler_json_20210601/image-20210524104503423.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524104838911.png 
b/img/dolphinscheduler_json_20210601/image-20210524104838911.png
new file mode 100644
index 0000000..053303b
Binary files /dev/null and 
b/img/dolphinscheduler_json_20210601/image-20210524104838911.png differ
diff --git a/img/dolphinscheduler_json_20210601/image-20210524144950185.png 
b/img/dolphinscheduler_json_20210601/image-20210524144950185.png
new file mode 100644
index 0000000..0c0bb8a
Binary files /dev/null and 
b/img/dolphinscheduler_json_20210601/image-20210524144950185.png differ
diff --git a/img/dolphinscheduler_json_20210601/json.png 
b/img/dolphinscheduler_json_20210601/json.png
new file mode 100644
index 0000000..4f0b40f
Binary files /dev/null and b/img/dolphinscheduler_json_20210601/json.png differ
diff --git a/zh-cn/blog/dolphinscheduler_json.html 
b/zh-cn/blog/dolphinscheduler_json.html
new file mode 100644
index 0000000..6e01b85
--- /dev/null
+++ b/zh-cn/blog/dolphinscheduler_json.html
@@ -0,0 +1,1043 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, 
maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="dolphinscheduler_json">
+  <meta name="description" content="dolphinscheduler_json">
+  <title>dolphinscheduler_json</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.c5ba65d.css">
+  <link rel="stylesheet" href="/build/blog.md.fd8b187.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header 
class="header-container header-container-dark"><div class="header-body"><a 
href="/zh-cn/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div 
class="search search-dark"><span class="icon-search"></span></div><span 
class="language-switch language-switch-dark">En</span><div 
class="header-menu"><img class="header-menu-toggle" 
src="/img/system/menu_white.png"/><div><ul class="ant-menu whiteClass 
ant-menu-li [...]
+<h2>1、为什么拆解json</h2>
+<p>在dolphinscheduler 
1.3.x及以前的工作流中的任务及任务关系保存时是以大json的方式保存到数据库中process_definiton表的process_definition_json字段,如果某个工作流很大比如有100或者1000个任务,这个json字段也就非常大,在使用时需要解析json,非常耗费性能,且任务没法重用;基于大json,在工作流版本及任务版本上也没有好的实现方案,否则会导致数据大量冗余。</p>
+<p>故社区计划启动json拆解项目,实现的需求目标:</p>
+<ul>
+<li>大json完全拆分</li>
+<li>新增工作流及任务版本</li>
+<li>引入全局唯一键(code)</li>
+</ul>
+<h2>2、如何设计拆解后的表</h2>
+<h3>1、1.3.6版本工作流</h3>
+<p>1、比如在当前1.3.6版本创建个a--&gt;b的工作流</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524102618970.png" 
alt="image-20210524102618970"></p>
+<p>以下是processDefiniton save 接口在controller入口打印的入参日志</p>
+<pre><code>create  process definition, project name: hadoop, process 
definition name: ab, process_definition_json: 
{&quot;globalParams&quot;:[],&quot;tasks&quot;:[{&quot;type&quot;:&quot;SHELL&quot;,&quot;id&quot;:&quot;tasks-77643&quot;,&quot;name&quot;:&quot;a&quot;,&quot;params&quot;:{&quot;resourceList&quot;:[],&quot;localParams&quot;:[{&quot;prop&quot;:&quot;yesterday&quot;,&quot;direct&quot;:&quot;IN&quot;,&quot;type&quot;:&quot;VARCHAR&quot;,&quot;value&quot;:&quot;${system.biz.da
 [...]
+</code></pre>
+<p>2、依赖节点的工作流,dep是依赖节点</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524104503423.png" 
alt="image-20210524104503423"></p>
+<p>以下是processDefiniton save 接口在controller入口打印的入参日志</p>
+<pre><code> create  process definition, project name: hadoop, process 
definition name: dep_c, process_definition_json: 
{&quot;globalParams&quot;:[],&quot;tasks&quot;:[{&quot;type&quot;:&quot;SHELL&quot;,&quot;id&quot;:&quot;tasks-69503&quot;,&quot;name&quot;:&quot;c&quot;,&quot;params&quot;:{&quot;resourceList&quot;:[],&quot;localParams&quot;:[],&quot;rawScript&quot;:&quot;echo
 
11&quot;},&quot;description&quot;:&quot;&quot;,&quot;timeout&quot;:{&quot;strategy&quot;:&quot;&quot;,&quot;int
 [...]
+</code></pre>
+<p>3、条件判断的工作流</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524104218236.png" 
alt="image-20210524104218236"></p>
+<p>以下是processDefiniton save 接口在controller入口打印的入参日志</p>
+<pre><code>create  process definition, project name: hadoop, process 
definition name: condition_test, process_definition_json: 
{&quot;globalParams&quot;:[],&quot;tasks&quot;:[{&quot;type&quot;:&quot;SHELL&quot;,&quot;id&quot;:&quot;tasks-68456&quot;,&quot;name&quot;:&quot;d&quot;,&quot;params&quot;:{&quot;resourceList&quot;:[],&quot;localParams&quot;:[],&quot;rawScript&quot;:&quot;echo
 
11&quot;},&quot;description&quot;:&quot;&quot;,&quot;timeout&quot;:{&quot;strategy&quot;:&quot;&quot;,&
 [...]
+</code></pre>
+<p>从以上三个案例中,我们知道controller的入口参数的每个参数都可以在t_ds_process_definition表中找到对应,故表中数据如下图</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524104838911.png" 
alt="image-20210524104838911"></p>
+<h3>2、拆解后的表设计思路</h3>
+<p>工作流只是dag的展现形式,任务通过工作流进行组织,组织的同时存在了任务之间的关系,也就是依赖。就好比一个画板,画板上有些图案,工作流就是画板,图案就是任务,图案之间的关系就是依赖。而调度的核心是调度任务,依赖只是表述调度的先后顺序。当前定时还是对整个工作流进行的定时,拆解后就方便对单独任务进行调度。正是基于这个思想设计了拆解的思路,所以这就需要三张表,工作流定义表、任务定义表、任务关系表。</p>
+<ul>
+<li>工作流定义表:描述工作流的基本信息,比如全局参数、dag中节点的位置信息</li>
+<li>任务定义表:描述任务的详情信息,比如任务类别、任务容错信息、优先级等</li>
+<li>任务关系表:描述任务的关系信息,比如当前节点、前置节点等</li>
+</ul>
+<p>基于这个设计思想再扩展到版本,无非是对于这三张表,每张表新增个保存版本的日志表。</p>
+<h4>工作流定义表</h4>
+<p>现在看案例中save接口日志,现有字段(project、process_definition_name、desc、locations、connects),对于json中除了task之外的还剩下</p>
+<pre><code class="language-json">{<span 
class="hljs-attr">&quot;globalParams&quot;</span>:[],<span 
class="hljs-attr">&quot;tenantId&quot;</span>:<span 
class="hljs-number">1</span>,<span 
class="hljs-attr">&quot;timeout&quot;</span>:<span class="hljs-number">0</span>}
+</code></pre>
+<p>所以可知工作流定义表:</p>
+<pre><code class="language-sql"><span class="hljs-keyword">CREATE</span> <span 
class="hljs-keyword">TABLE</span> `t_ds_process_definition` (
+  `id` <span class="hljs-type">int</span>(<span class="hljs-number">11</span>) 
<span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span> 
AUTO_INCREMENT COMMENT <span class="hljs-string">&#x27;self-increasing 
id&#x27;</span>,
+  `code` <span class="hljs-type">bigint</span>(<span 
class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;encoding&#x27;</span>,
+  `name` <span class="hljs-type">varchar</span>(<span 
class="hljs-number">200</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;process definition name&#x27;</span>,
+  `version` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;process definition version&#x27;</span>,
+  `description` text COMMENT <span 
class="hljs-string">&#x27;description&#x27;</span>,
+  `project_code` <span class="hljs-type">bigint</span>(<span 
class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;project code&#x27;</span>,
+  `release_state` tinyint(<span class="hljs-number">4</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span> 
COMMENT <span class="hljs-string">&#x27;process definition release 
state:0:offline,1:online&#x27;</span>,
+  `user_id` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;process definition creator id&#x27;</span>,
+  `global_params` text COMMENT <span class="hljs-string">&#x27;global 
parameters&#x27;</span>,
+  `flag` tinyint(<span class="hljs-number">4</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span> 
COMMENT <span class="hljs-string">&#x27;0 not available, 1 
available&#x27;</span>,
+  `locations` text COMMENT <span class="hljs-string">&#x27;Node location 
information&#x27;</span>,
+  `connects` text COMMENT <span class="hljs-string">&#x27;Node connection 
information&#x27;</span>,
+  `warning_group_id` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">&#x27;alert 
group id&#x27;</span>,
+  `timeout` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-string">&#x27;0&#x27;</span> COMMENT <span 
class="hljs-string">&#x27;time out, unit: minute&#x27;</span>,
+  `tenant_id` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span 
class="hljs-keyword">NULL</span> <span class="hljs-keyword">DEFAULT</span> 
<span class="hljs-string">&#x27;-1&#x27;</span> COMMENT <span 
class="hljs-string">&#x27;tenant id&#x27;</span>,
+  `create_time` datetime <span class="hljs-keyword">NOT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">&#x27;create 
time&#x27;</span>,
+  `update_time` datetime <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">&#x27;update 
time&#x27;</span>,
+  <span class="hljs-keyword">PRIMARY</span> KEY (`id`,`code`),
+  <span class="hljs-keyword">UNIQUE</span> KEY `process_unique` 
(`name`,`project_code`) <span class="hljs-keyword">USING</span> BTREE
+) ENGINE<span class="hljs-operator">=</span>InnoDB <span 
class="hljs-keyword">DEFAULT</span> CHARSET<span 
class="hljs-operator">=</span>utf8;
+
+<span class="hljs-keyword">CREATE</span> <span 
class="hljs-keyword">TABLE</span> `t_ds_process_definition_log` (
+  `id` <span class="hljs-type">int</span>(<span class="hljs-number">11</span>) 
<span class="hljs-keyword">NOT</span> <span class="hljs-keyword">NULL</span> 
AUTO_INCREMENT COMMENT <span class="hljs-string">&#x27;self-increasing 
id&#x27;</span>,
+  `code` <span class="hljs-type">bigint</span>(<span 
class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;encoding&#x27;</span>,
+  `name` <span class="hljs-type">varchar</span>(<span 
class="hljs-number">200</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;process definition name&#x27;</span>,
+  `version` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;process definition version&#x27;</span>,
+  `description` text COMMENT <span 
class="hljs-string">&#x27;description&#x27;</span>,
+  `project_code` <span class="hljs-type">bigint</span>(<span 
class="hljs-number">20</span>) <span class="hljs-keyword">NOT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;project code&#x27;</span>,
+  `release_state` tinyint(<span class="hljs-number">4</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span> 
COMMENT <span class="hljs-string">&#x27;process definition release 
state:0:offline,1:online&#x27;</span>,
+  `user_id` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;process definition creator id&#x27;</span>,
+  `global_params` text COMMENT <span class="hljs-string">&#x27;global 
parameters&#x27;</span>,
+  `flag` tinyint(<span class="hljs-number">4</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-keyword">NULL</span> 
COMMENT <span class="hljs-string">&#x27;0 not available, 1 
available&#x27;</span>,
+  `locations` text COMMENT <span class="hljs-string">&#x27;Node location 
information&#x27;</span>,
+  `connects` text COMMENT <span class="hljs-string">&#x27;Node connection 
information&#x27;</span>,
+  `warning_group_id` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">&#x27;alert 
group id&#x27;</span>,
+  `timeout` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-string">&#x27;0&#x27;</span> COMMENT <span 
class="hljs-string">&#x27;time out,unit: minute&#x27;</span>,
+  `tenant_id` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">NOT</span> <span 
class="hljs-keyword">NULL</span> <span class="hljs-keyword">DEFAULT</span> 
<span class="hljs-string">&#x27;-1&#x27;</span> COMMENT <span 
class="hljs-string">&#x27;tenant id&#x27;</span>,
+  `operator` <span class="hljs-type">int</span>(<span 
class="hljs-number">11</span>) <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;operator user id&#x27;</span>,
+  `operate_time` datetime <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span 
class="hljs-string">&#x27;operate time&#x27;</span>,
+  `create_time` datetime <span class="hljs-keyword">NOT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">&#x27;create 
time&#x27;</span>,
+  `update_time` datetime <span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-keyword">NULL</span> COMMENT <span class="hljs-string">&#x27;update 
time&#x27;</span>,
+  <span class="hljs-keyword">PRIMARY</span> KEY (`id`)
+) ENGINE<span class="hljs-operator">=</span>InnoDB <span 
class="hljs-keyword">DEFAULT</span> CHARSET<span 
class="hljs-operator">=</span>utf8;
+</code></pre>
+<p>从表字段可以看出 日志表仅仅比主表多了两个字段operator、operate_time</p>
+<h4>任务定义表</h4>
+<p>案例中ab工作流task的json</p>
+<pre><code class="language-json">      &quot;tasks&quot;: [{
+               &quot;type&quot;: &quot;SHELL&quot;,
+               &quot;id&quot;: &quot;tasks-77643&quot;,
+               &quot;name&quot;: &quot;a&quot;,
+               &quot;params&quot;: {
+                       &quot;resourceList&quot;: [],
+                       &quot;localParams&quot;: [{
+                               &quot;prop&quot;: &quot;yesterday&quot;,
+                               &quot;direct&quot;: &quot;IN&quot;,
+                               &quot;type&quot;: &quot;VARCHAR&quot;,
+                               &quot;value&quot;: 
&quot;${system.biz.date}&quot;
+                       }],
+                       &quot;rawScript&quot;: &quot;echo ${yesterday}&quot;
+               },
+               &quot;description&quot;: &quot;&quot;,
+               &quot;timeout&quot;: {
+                       &quot;strategy&quot;: &quot;&quot;,
+                       &quot;interval&quot;: null,
+                       &quot;enable&quot;: false
+               },
+               &quot;runFlag&quot;: &quot;NORMAL&quot;,
+               &quot;conditionResult&quot;: {
+                       &quot;successNode&quot;: [&quot;&quot;],
+                       &quot;failedNode&quot;: [&quot;&quot;]
+               },
+               &quot;dependence&quot;: {},
+               &quot;maxRetryTimes&quot;: &quot;0&quot;,
+               &quot;retryInterval&quot;: &quot;1&quot;,
+               &quot;taskInstancePriority&quot;: &quot;MEDIUM&quot;,
+               &quot;workerGroup&quot;: &quot;default&quot;,
+               &quot;preTasks&quot;: []
+       }, {
+               &quot;type&quot;: &quot;SHELL&quot;,
+               &quot;id&quot;: &quot;tasks-99814&quot;,
+               &quot;name&quot;: &quot;b&quot;,
+               &quot;params&quot;: {
+                       &quot;resourceList&quot;: [],
+                       &quot;localParams&quot;: [{
+                               &quot;prop&quot;: &quot;today&quot;,
+                               &quot;direct&quot;: &quot;IN&quot;,
+                               &quot;type&quot;: &quot;VARCHAR&quot;,
+                               &quot;value&quot;: 
&quot;${system.biz.curdate}&quot;
+                       }],
+                       &quot;rawScript&quot;: &quot;echo ${today}&quot;
+               },
+               &quot;description&quot;: &quot;&quot;,
+               &quot;timeout&quot;: {
+                       &quot;strategy&quot;: &quot;&quot;,
+                       &quot;interval&quot;: null,
+                       &quot;enable&quot;: false
+               },
+               &quot;runFlag&quot;: &quot;NORMAL&quot;,
+               &quot;conditionResult&quot;: {
+                       &quot;successNode&quot;: [&quot;&quot;],
+                       &quot;failedNode&quot;: [&quot;&quot;]
+               },
+               &quot;dependence&quot;: {},
+               &quot;maxRetryTimes&quot;: &quot;0&quot;,
+               &quot;retryInterval&quot;: &quot;1&quot;,
+               &quot;taskInstancePriority&quot;: &quot;MEDIUM&quot;,
+               &quot;workerGroup&quot;: &quot;default&quot;,
+               &quot;preTasks&quot;: [&quot;a&quot;]
+       }]
+</code></pre>
+<p>dep_c工作流task的json</p>
+<pre><code class="language-json">      &quot;tasks&quot;: [{
+               &quot;type&quot;: &quot;SHELL&quot;,
+               &quot;id&quot;: &quot;tasks-69503&quot;,
+               &quot;name&quot;: &quot;c&quot;,
+               &quot;params&quot;: {
+                       &quot;resourceList&quot;: [],
+                       &quot;localParams&quot;: [],
+                       &quot;rawScript&quot;: &quot;echo 11&quot;
+               },
+               &quot;description&quot;: &quot;&quot;,
+               &quot;timeout&quot;: {
+                       &quot;strategy&quot;: &quot;&quot;,
+                       &quot;interval&quot;: null,
+                       &quot;enable&quot;: false
+               },
+               &quot;runFlag&quot;: &quot;NORMAL&quot;,
+               &quot;conditionResult&quot;: {
+                       &quot;successNode&quot;: [&quot;&quot;],
+                       &quot;failedNode&quot;: [&quot;&quot;]
+               },
+               &quot;dependence&quot;: {},
+               &quot;maxRetryTimes&quot;: &quot;0&quot;,
+               &quot;retryInterval&quot;: &quot;1&quot;,
+               &quot;taskInstancePriority&quot;: &quot;MEDIUM&quot;,
+               &quot;workerGroup&quot;: &quot;default&quot;,
+               &quot;preTasks&quot;: [&quot;dep&quot;]
+       }, {
+               &quot;type&quot;: &quot;DEPENDENT&quot;,
+               &quot;id&quot;: &quot;tasks-22756&quot;,
+               &quot;name&quot;: &quot;dep&quot;,
+               &quot;params&quot;: {},
+               &quot;description&quot;: &quot;&quot;,
+               &quot;timeout&quot;: {
+                       &quot;strategy&quot;: &quot;&quot;,
+                       &quot;interval&quot;: null,
+                       &quot;enable&quot;: false
+               },
+               &quot;runFlag&quot;: &quot;NORMAL&quot;,
+               &quot;conditionResult&quot;: {
+                       &quot;successNode&quot;: [&quot;&quot;],
+                       &quot;failedNode&quot;: [&quot;&quot;]
+               },
+               &quot;dependence&quot;: {
+                       &quot;relation&quot;: &quot;AND&quot;,
+                       &quot;dependTaskList&quot;: [{
+                               &quot;relation&quot;: &quot;AND&quot;,
+                               &quot;dependItemList&quot;: [{
+                                       &quot;projectId&quot;: 1,
+                                       &quot;definitionId&quot;: 1,
+                                       &quot;depTasks&quot;: &quot;b&quot;,
+                                       &quot;cycle&quot;: &quot;day&quot;,
+                                       &quot;dateValue&quot;: &quot;today&quot;
+                               }]
+                       }]
+               },
+               &quot;maxRetryTimes&quot;: &quot;0&quot;,
+               &quot;retryInterval&quot;: &quot;1&quot;,
+               &quot;taskInstancePriority&quot;: &quot;MEDIUM&quot;,
+               &quot;workerGroup&quot;: &quot;default&quot;,
+               &quot;preTasks&quot;: []
+       }]
+</code></pre>
+<p>condition_test工作流task的json</p>
+<pre><code class="language-json">      &quot;tasks&quot;: [{
+               &quot;type&quot;: &quot;SHELL&quot;,
+               &quot;id&quot;: &quot;tasks-68456&quot;,
+               &quot;name&quot;: &quot;d&quot;,
+               &quot;params&quot;: {
+                       &quot;resourceList&quot;: [],
+                       &quot;localParams&quot;: [],
+                       &quot;rawScript&quot;: &quot;echo 11&quot;
+               },
+               &quot;description&quot;: &quot;&quot;,
+               &quot;timeout&quot;: {
+                       &quot;strategy&quot;: &quot;&quot;,
+                       &quot;interval&quot;: null,
+                       &quot;enable&quot;: false
+               },
+               &quot;runFlag&quot;: &quot;NORMAL&quot;,
+               &quot;conditionResult&quot;: {
+                       &quot;successNode&quot;: [&quot;&quot;],
+                       &quot;failedNode&quot;: [&quot;&quot;]
+               },
+               &quot;dependence&quot;: {},
+               &quot;maxRetryTimes&quot;: &quot;0&quot;,
+               &quot;retryInterval&quot;: &quot;1&quot;,
+               &quot;taskInstancePriority&quot;: &quot;MEDIUM&quot;,
+               &quot;workerGroup&quot;: &quot;default&quot;,
+               &quot;preTasks&quot;: []
+       }, {
+               &quot;type&quot;: &quot;SHELL&quot;,
+               &quot;id&quot;: &quot;tasks-58183&quot;,
+               &quot;name&quot;: &quot;e&quot;,
+               &quot;params&quot;: {
+                       &quot;resourceList&quot;: [],
+                       &quot;localParams&quot;: [],
+                       &quot;rawScript&quot;: &quot;echo 22&quot;
+               },
+               &quot;description&quot;: &quot;&quot;,
+               &quot;timeout&quot;: {
+                       &quot;strategy&quot;: &quot;&quot;,
+                       &quot;interval&quot;: null,
+                       &quot;enable&quot;: false
+               },
+               &quot;runFlag&quot;: &quot;NORMAL&quot;,
+               &quot;conditionResult&quot;: {
+                       &quot;successNode&quot;: [&quot;&quot;],
+                       &quot;failedNode&quot;: [&quot;&quot;]
+               },
+               &quot;dependence&quot;: {},
+               &quot;maxRetryTimes&quot;: &quot;0&quot;,
+               &quot;retryInterval&quot;: &quot;1&quot;,
+               &quot;taskInstancePriority&quot;: &quot;MEDIUM&quot;,
+               &quot;workerGroup&quot;: &quot;default&quot;,
+               &quot;preTasks&quot;: [&quot;cond&quot;]
+       }, {
+               &quot;type&quot;: &quot;SHELL&quot;,
+               &quot;id&quot;: &quot;tasks-43996&quot;,
+               &quot;name&quot;: &quot;f&quot;,
+               &quot;params&quot;: {
+                       &quot;resourceList&quot;: [],
+                       &quot;localParams&quot;: [],
+                       &quot;rawScript&quot;: &quot;echo 33&quot;
+               },
+               &quot;description&quot;: &quot;&quot;,
+               &quot;timeout&quot;: {
+                       &quot;strategy&quot;: &quot;&quot;,
+                       &quot;interval&quot;: null,
+                       &quot;enable&quot;: false
+               },
+               &quot;runFlag&quot;: &quot;NORMAL&quot;,
+               &quot;conditionResult&quot;: {
+                       &quot;successNode&quot;: [&quot;&quot;],
+                       &quot;failedNode&quot;: [&quot;&quot;]
+               },
+               &quot;dependence&quot;: {},
+               &quot;maxRetryTimes&quot;: &quot;0&quot;,
+               &quot;retryInterval&quot;: &quot;1&quot;,
+               &quot;taskInstancePriority&quot;: &quot;MEDIUM&quot;,
+               &quot;workerGroup&quot;: &quot;default&quot;,
+               &quot;preTasks&quot;: [&quot;cond&quot;]
+       }, {
+               &quot;type&quot;: &quot;CONDITIONS&quot;,
+               &quot;id&quot;: &quot;tasks-38972&quot;,
+               &quot;name&quot;: &quot;cond&quot;,
+               &quot;params&quot;: {},
+               &quot;description&quot;: &quot;&quot;,
+               &quot;timeout&quot;: {
+                       &quot;strategy&quot;: &quot;&quot;,
+                       &quot;interval&quot;: null,
+                       &quot;enable&quot;: false
+               },
+               &quot;runFlag&quot;: &quot;NORMAL&quot;,
+               &quot;conditionResult&quot;: {
+                       &quot;successNode&quot;: [&quot;e&quot;],
+                       &quot;failedNode&quot;: [&quot;f&quot;]
+               },
+               &quot;dependence&quot;: {
+                       &quot;relation&quot;: &quot;AND&quot;,
+                       &quot;dependTaskList&quot;: [{
+                               &quot;relation&quot;: &quot;AND&quot;,
+                               &quot;dependItemList&quot;: [{
+                                       &quot;depTasks&quot;: &quot;d&quot;,
+                                       &quot;status&quot;: &quot;SUCCESS&quot;
+                               }]
+                       }]
+               },
+               &quot;maxRetryTimes&quot;: &quot;0&quot;,
+               &quot;retryInterval&quot;: &quot;1&quot;,
+               &quot;taskInstancePriority&quot;: &quot;MEDIUM&quot;,
+               &quot;workerGroup&quot;: &quot;default&quot;,
+               &quot;preTasks&quot;: [&quot;d&quot;]
+       }]
+</code></pre>
+<p>从案例中可以知道SHELL/DEPENDENT/CONDITIONS类型的节点的json构成(其他任务类似SHELL),preTasks标识前置依赖节点。conditionResult结构比较固定,而dependence结构复杂,DEPENDENT和CONDITIONS类型任务的dependence结构还不一样,所以为了统一,我们将conditionResult和dependence整体放到params中,params对应表字段的task_params。</p>
+<p>这样我们就确定了t_ds_task_definition表</p>
+<pre><code class="language-mysql"><span class="hljs-keyword">CREATE</span> 
<span class="hljs-keyword">TABLE</span> <span 
class="hljs-string">`t_ds_task_definition`</span> (
+  <span class="hljs-string">`id`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> 
AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;self-increasing id&#x27;</span>,
+  <span class="hljs-string">`code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;encoding&#x27;</span>,
+  <span class="hljs-string">`name`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>) 
<span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;task definition name&#x27;</span>,
+  <span class="hljs-string">`version`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;task 
definition version&#x27;</span>,
+  <span class="hljs-string">`description`</span> <span 
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;description&#x27;</span>,
+  <span class="hljs-string">`project_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;project 
code&#x27;</span>,
+  <span class="hljs-string">`user_id`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;task 
definition creator id&#x27;</span>,
+  <span class="hljs-string">`task_type`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">50</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;task 
type&#x27;</span>,
+  <span class="hljs-string">`task_params`</span> <span 
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;job custom parameters&#x27;</span>,
+  <span class="hljs-string">`flag`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;0 not 
available, 1 available&#x27;</span>,
+  <span class="hljs-string">`task_priority`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">4</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;job 
priority&#x27;</span>,
+  <span class="hljs-string">`worker_group`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>) 
<span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;worker grouping&#x27;</span>,
+  <span class="hljs-string">`fail_retry_times`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;number of failed retries&#x27;</span>,
+  <span class="hljs-string">`fail_retry_interval`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;failed retry interval&#x27;</span>,
+  <span class="hljs-string">`timeout_flag`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span 
class="hljs-keyword">DEFAULT</span> <span 
class="hljs-string">&#x27;0&#x27;</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;timeout 
flag:0 close, 1 open&#x27;</span>,
+  <span class="hljs-string">`timeout_notify_strategy`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">4</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;timeout notification policy: 0 warning, 1 
fail&#x27;</span>,
+  <span class="hljs-string">`timeout`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span 
class="hljs-string">&#x27;0&#x27;</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;timeout 
length,unit: minute&#x27;</span>,
+  <span class="hljs-string">`delay_time`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span 
class="hljs-string">&#x27;0&#x27;</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;delay 
execution time,unit: minute&#x27;</span>,
+  <span class="hljs-string">`resource_ids`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) 
<span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;resource id, separated by comma&#x27;</span>,
+  <span class="hljs-string">`create_time`</span> datetime <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;create 
time&#x27;</span>,
+  <span class="hljs-string">`update_time`</span> datetime <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;update time&#x27;</span>,
+  PRIMARY <span class="hljs-keyword">KEY</span> (<span 
class="hljs-string">`id`</span>,<span class="hljs-string">`code`</span>),
+  <span class="hljs-keyword">UNIQUE</span> <span 
class="hljs-keyword">KEY</span> <span class="hljs-string">`task_unique`</span> 
(<span class="hljs-string">`name`</span>,<span 
class="hljs-string">`project_code`</span>) <span 
class="hljs-keyword">USING</span> BTREE
+) <span class="hljs-keyword">ENGINE</span>=<span 
class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> 
<span class="hljs-keyword">CHARSET</span>=utf8;
+
+<span class="hljs-keyword">CREATE</span> <span 
class="hljs-keyword">TABLE</span> <span 
class="hljs-string">`t_ds_task_definition_log`</span> (
+  <span class="hljs-string">`id`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> 
AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;self-increasing id&#x27;</span>,
+  <span class="hljs-string">`code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;encoding&#x27;</span>,
+  <span class="hljs-string">`name`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>) 
<span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;task definition name&#x27;</span>,
+  <span class="hljs-string">`version`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;task 
definition version&#x27;</span>,
+  <span class="hljs-string">`description`</span> <span 
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;description&#x27;</span>,
+  <span class="hljs-string">`project_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;project 
code&#x27;</span>,
+  <span class="hljs-string">`user_id`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;task 
definition creator id&#x27;</span>,
+  <span class="hljs-string">`task_type`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">50</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;task 
type&#x27;</span>,
+  <span class="hljs-string">`task_params`</span> <span 
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;job custom parameters&#x27;</span>,
+  <span class="hljs-string">`flag`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;0 not 
available, 1 available&#x27;</span>,
+  <span class="hljs-string">`task_priority`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">4</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;job 
priority&#x27;</span>,
+  <span class="hljs-string">`worker_group`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>) 
<span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;worker grouping&#x27;</span>,
+  <span class="hljs-string">`fail_retry_times`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;number of failed retries&#x27;</span>,
+  <span class="hljs-string">`fail_retry_interval`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;failed retry interval&#x27;</span>,
+  <span class="hljs-string">`timeout_flag`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span 
class="hljs-keyword">DEFAULT</span> <span 
class="hljs-string">&#x27;0&#x27;</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;timeout 
flag:0 close, 1 open&#x27;</span>,
+  <span class="hljs-string">`timeout_notify_strategy`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">4</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;timeout notification policy: 0 warning, 1 
fail&#x27;</span>,
+  <span class="hljs-string">`timeout`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span 
class="hljs-string">&#x27;0&#x27;</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;timeout 
length,unit: minute&#x27;</span>,
+  <span class="hljs-string">`delay_time`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span 
class="hljs-string">&#x27;0&#x27;</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;delay 
execution time,unit: minute&#x27;</span>,
+  <span class="hljs-string">`resource_ids`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">255</span>) 
<span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;resource id, separated by comma&#x27;</span>,
+  <span class="hljs-string">`operator`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;operator user id&#x27;</span>,
+  <span class="hljs-string">`operate_time`</span> datetime <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;operate time&#x27;</span>,
+  <span class="hljs-string">`create_time`</span> datetime <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;create 
time&#x27;</span>,
+  <span class="hljs-string">`update_time`</span> datetime <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;update time&#x27;</span>,
+  PRIMARY <span class="hljs-keyword">KEY</span> (<span 
class="hljs-string">`id`</span>)
+) <span class="hljs-keyword">ENGINE</span>=<span 
class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> 
<span class="hljs-keyword">CHARSET</span>=utf8;
+</code></pre>
+<p><strong>注意:dev版本和1.3.6版本区别,dev版本已将description换成desc,并且新增了delayTime</strong></p>
+<pre><code class="language-json">{
+       <span class="hljs-attr">&quot;globalParams&quot;</span>: [],
+       <span class="hljs-attr">&quot;tasks&quot;</span>: [{
+                       <span class="hljs-attr">&quot;type&quot;</span>: <span 
class="hljs-string">&quot;SHELL&quot;</span>,
+                       <span class="hljs-attr">&quot;id&quot;</span>: <span 
class="hljs-string">&quot;tasks-18200&quot;</span>,
+                       <span class="hljs-attr">&quot;name&quot;</span>: <span 
class="hljs-string">&quot;d&quot;</span>,
+                       <span class="hljs-attr">&quot;code&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                       <span class="hljs-attr">&quot;params&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;resourceList&quot;</span>: [],
+                               <span 
class="hljs-attr">&quot;localParams&quot;</span>: [],
+                               <span 
class="hljs-attr">&quot;rawScript&quot;</span>: <span 
class="hljs-string">&quot;echo 5&quot;</span>
+                       },
+                       <span class="hljs-attr">&quot;desc&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                       <span class="hljs-attr">&quot;runFlag&quot;</span>: 
<span class="hljs-string">&quot;NORMAL&quot;</span>,
+                       <span 
class="hljs-attr">&quot;conditionResult&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;successNode&quot;</span>: [
+                                       <span 
class="hljs-string">&quot;&quot;</span>
+                               ],
+                               <span 
class="hljs-attr">&quot;failedNode&quot;</span>: [
+                                       <span 
class="hljs-string">&quot;&quot;</span>
+                               ]
+                       },
+                       <span class="hljs-attr">&quot;dependence&quot;</span>: 
{},
+                       <span 
class="hljs-attr">&quot;maxRetryTimes&quot;</span>: <span 
class="hljs-string">&quot;0&quot;</span>,
+                       <span 
class="hljs-attr">&quot;retryInterval&quot;</span>: <span 
class="hljs-string">&quot;1&quot;</span>,
+                       <span class="hljs-attr">&quot;delayTime&quot;</span>: 
<span class="hljs-string">&quot;0&quot;</span>,
+                       <span class="hljs-attr">&quot;timeout&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;strategy&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                               <span 
class="hljs-attr">&quot;interval&quot;</span>: <span 
class="hljs-literal">null</span>,
+                               <span 
class="hljs-attr">&quot;enable&quot;</span>: <span 
class="hljs-literal">false</span>
+                       },
+                       <span 
class="hljs-attr">&quot;waitStartTimeout&quot;</span>: {},
+                       <span 
class="hljs-attr">&quot;taskInstancePriority&quot;</span>: <span 
class="hljs-string">&quot;MEDIUM&quot;</span>,
+                       <span class="hljs-attr">&quot;workerGroup&quot;</span>: 
<span class="hljs-string">&quot;hadoop&quot;</span>,
+                       <span class="hljs-attr">&quot;preTasks&quot;</span>: [],
+                       <span class="hljs-attr">&quot;depList&quot;</span>: 
<span class="hljs-literal">null</span>
+               },
+               {
+                       <span class="hljs-attr">&quot;type&quot;</span>: <span 
class="hljs-string">&quot;SHELL&quot;</span>,
+                       <span class="hljs-attr">&quot;id&quot;</span>: <span 
class="hljs-string">&quot;tasks-55225&quot;</span>,
+                       <span class="hljs-attr">&quot;name&quot;</span>: <span 
class="hljs-string">&quot;e&quot;</span>,
+                       <span class="hljs-attr">&quot;code&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                       <span class="hljs-attr">&quot;params&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;resourceList&quot;</span>: [],
+                               <span 
class="hljs-attr">&quot;localParams&quot;</span>: [],
+                               <span 
class="hljs-attr">&quot;rawScript&quot;</span>: <span 
class="hljs-string">&quot;echo 6&quot;</span>
+                       },
+                       <span class="hljs-attr">&quot;desc&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                       <span class="hljs-attr">&quot;runFlag&quot;</span>: 
<span class="hljs-string">&quot;NORMAL&quot;</span>,
+                       <span 
class="hljs-attr">&quot;conditionResult&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;successNode&quot;</span>: [
+                                       <span 
class="hljs-string">&quot;&quot;</span>
+                               ],
+                               <span 
class="hljs-attr">&quot;failedNode&quot;</span>: [
+                                       <span 
class="hljs-string">&quot;&quot;</span>
+                               ]
+                       },
+                       <span class="hljs-attr">&quot;dependence&quot;</span>: 
{},
+                       <span 
class="hljs-attr">&quot;maxRetryTimes&quot;</span>: <span 
class="hljs-string">&quot;0&quot;</span>,
+                       <span 
class="hljs-attr">&quot;retryInterval&quot;</span>: <span 
class="hljs-string">&quot;1&quot;</span>,
+                       <span class="hljs-attr">&quot;delayTime&quot;</span>: 
<span class="hljs-string">&quot;0&quot;</span>,
+                       <span class="hljs-attr">&quot;timeout&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;strategy&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                               <span 
class="hljs-attr">&quot;interval&quot;</span>: <span 
class="hljs-literal">null</span>,
+                               <span 
class="hljs-attr">&quot;enable&quot;</span>: <span 
class="hljs-literal">false</span>
+                       },
+                       <span 
class="hljs-attr">&quot;waitStartTimeout&quot;</span>: {},
+                       <span 
class="hljs-attr">&quot;taskInstancePriority&quot;</span>: <span 
class="hljs-string">&quot;MEDIUM&quot;</span>,
+                       <span class="hljs-attr">&quot;workerGroup&quot;</span>: 
<span class="hljs-string">&quot;hadoop&quot;</span>,
+                       <span class="hljs-attr">&quot;preTasks&quot;</span>: [
+                               <span class="hljs-string">&quot;def&quot;</span>
+                       ],
+                       <span class="hljs-attr">&quot;depList&quot;</span>: 
<span class="hljs-literal">null</span>
+               },
+               {
+                       <span class="hljs-attr">&quot;type&quot;</span>: <span 
class="hljs-string">&quot;SHELL&quot;</span>,
+                       <span class="hljs-attr">&quot;id&quot;</span>: <span 
class="hljs-string">&quot;tasks-67639&quot;</span>,
+                       <span class="hljs-attr">&quot;name&quot;</span>: <span 
class="hljs-string">&quot;f&quot;</span>,
+                       <span class="hljs-attr">&quot;code&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                       <span class="hljs-attr">&quot;params&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;resourceList&quot;</span>: [],
+                               <span 
class="hljs-attr">&quot;localParams&quot;</span>: [],
+                               <span 
class="hljs-attr">&quot;rawScript&quot;</span>: <span 
class="hljs-string">&quot;echo 7&quot;</span>
+                       },
+                       <span class="hljs-attr">&quot;desc&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                       <span class="hljs-attr">&quot;runFlag&quot;</span>: 
<span class="hljs-string">&quot;NORMAL&quot;</span>,
+                       <span 
class="hljs-attr">&quot;conditionResult&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;successNode&quot;</span>: [
+                                       <span 
class="hljs-string">&quot;&quot;</span>
+                               ],
+                               <span 
class="hljs-attr">&quot;failedNode&quot;</span>: [
+                                       <span 
class="hljs-string">&quot;&quot;</span>
+                               ]
+                       },
+                       <span class="hljs-attr">&quot;dependence&quot;</span>: 
{},
+                       <span 
class="hljs-attr">&quot;maxRetryTimes&quot;</span>: <span 
class="hljs-string">&quot;0&quot;</span>,
+                       <span 
class="hljs-attr">&quot;retryInterval&quot;</span>: <span 
class="hljs-string">&quot;1&quot;</span>,
+                       <span class="hljs-attr">&quot;delayTime&quot;</span>: 
<span class="hljs-string">&quot;0&quot;</span>,
+                       <span class="hljs-attr">&quot;timeout&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;strategy&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                               <span 
class="hljs-attr">&quot;interval&quot;</span>: <span 
class="hljs-literal">null</span>,
+                               <span 
class="hljs-attr">&quot;enable&quot;</span>: <span 
class="hljs-literal">false</span>
+                       },
+                       <span 
class="hljs-attr">&quot;waitStartTimeout&quot;</span>: {},
+                       <span 
class="hljs-attr">&quot;taskInstancePriority&quot;</span>: <span 
class="hljs-string">&quot;MEDIUM&quot;</span>,
+                       <span class="hljs-attr">&quot;workerGroup&quot;</span>: 
<span class="hljs-string">&quot;hadoop&quot;</span>,
+                       <span class="hljs-attr">&quot;preTasks&quot;</span>: [
+                               <span class="hljs-string">&quot;def&quot;</span>
+                       ],
+                       <span class="hljs-attr">&quot;depList&quot;</span>: 
<span class="hljs-literal">null</span>
+               },
+               {
+                       <span class="hljs-attr">&quot;type&quot;</span>: <span 
class="hljs-string">&quot;CONDITIONS&quot;</span>,
+                       <span class="hljs-attr">&quot;id&quot;</span>: <span 
class="hljs-string">&quot;tasks-67387&quot;</span>,
+                       <span class="hljs-attr">&quot;name&quot;</span>: <span 
class="hljs-string">&quot;def&quot;</span>,
+                       <span class="hljs-attr">&quot;code&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                       <span class="hljs-attr">&quot;params&quot;</span>: {},
+                       <span class="hljs-attr">&quot;desc&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                       <span class="hljs-attr">&quot;runFlag&quot;</span>: 
<span class="hljs-string">&quot;NORMAL&quot;</span>,
+                       <span 
class="hljs-attr">&quot;conditionResult&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;successNode&quot;</span>: [
+                                       <span 
class="hljs-string">&quot;e&quot;</span>
+                               ],
+                               <span 
class="hljs-attr">&quot;failedNode&quot;</span>: [
+                                       <span 
class="hljs-string">&quot;f&quot;</span>
+                               ]
+                       },
+                       <span class="hljs-attr">&quot;dependence&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;relation&quot;</span>: <span 
class="hljs-string">&quot;AND&quot;</span>,
+                               <span 
class="hljs-attr">&quot;dependTaskList&quot;</span>: [{
+                                       <span 
class="hljs-attr">&quot;relation&quot;</span>: <span 
class="hljs-string">&quot;AND&quot;</span>,
+                                       <span 
class="hljs-attr">&quot;dependItemList&quot;</span>: [{
+                                                       <span 
class="hljs-attr">&quot;depTasks&quot;</span>: <span 
class="hljs-string">&quot;d&quot;</span>,
+                                                       <span 
class="hljs-attr">&quot;status&quot;</span>: <span 
class="hljs-string">&quot;SUCCESS&quot;</span>
+                                               },
+                                               {
+                                                       <span 
class="hljs-attr">&quot;depTasks&quot;</span>: <span 
class="hljs-string">&quot;d&quot;</span>,
+                                                       <span 
class="hljs-attr">&quot;status&quot;</span>: <span 
class="hljs-string">&quot;FAILURE&quot;</span>
+                                               }
+                                       ]
+                               }]
+                       },
+                       <span 
class="hljs-attr">&quot;maxRetryTimes&quot;</span>: <span 
class="hljs-string">&quot;0&quot;</span>,
+                       <span 
class="hljs-attr">&quot;retryInterval&quot;</span>: <span 
class="hljs-string">&quot;1&quot;</span>,
+                       <span class="hljs-attr">&quot;delayTime&quot;</span>: 
<span class="hljs-string">&quot;0&quot;</span>,
+                       <span class="hljs-attr">&quot;timeout&quot;</span>: {
+                               <span 
class="hljs-attr">&quot;strategy&quot;</span>: <span 
class="hljs-string">&quot;&quot;</span>,
+                               <span 
class="hljs-attr">&quot;interval&quot;</span>: <span 
class="hljs-literal">null</span>,
+                               <span 
class="hljs-attr">&quot;enable&quot;</span>: <span 
class="hljs-literal">false</span>
+                       },
+                       <span 
class="hljs-attr">&quot;waitStartTimeout&quot;</span>: {},
+                       <span 
class="hljs-attr">&quot;taskInstancePriority&quot;</span>: <span 
class="hljs-string">&quot;MEDIUM&quot;</span>,
+                       <span class="hljs-attr">&quot;workerGroup&quot;</span>: 
<span class="hljs-string">&quot;hadoop&quot;</span>,
+                       <span class="hljs-attr">&quot;preTasks&quot;</span>: [
+                               <span class="hljs-string">&quot;d&quot;</span>
+                       ],
+                       <span class="hljs-attr">&quot;depList&quot;</span>: 
<span class="hljs-literal">null</span>
+               }
+       ],
+       <span class="hljs-attr">&quot;tenantId&quot;</span>: <span 
class="hljs-number">1</span>,
+       <span class="hljs-attr">&quot;timeout&quot;</span>: <span 
class="hljs-number">0</span>
+}
+</code></pre>
+<h4>任务关系表</h4>
+<p>preTasks标识前置依赖节点,当前节点在关系表中使用postTask标识。由于当前节点肯定存在而前置节点不一定存在,所以post不可能为空,而preTask有可能为空</p>
+<pre><code class="language-mysql"><span class="hljs-keyword">CREATE</span> 
<span class="hljs-keyword">TABLE</span> <span 
class="hljs-string">`t_ds_process_task_relation`</span> (
+  <span class="hljs-string">`id`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> 
AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;self-increasing id&#x27;</span>,
+  <span class="hljs-string">`name`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>) 
<span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;relation name&#x27;</span>,
+  <span class="hljs-string">`process_definition_version`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;process version&#x27;</span>,
+  <span class="hljs-string">`project_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;project 
code&#x27;</span>,
+  <span class="hljs-string">`process_definition_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;process 
code&#x27;</span>,
+  <span class="hljs-string">`pre_task_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;pre task 
code&#x27;</span>,
+  <span class="hljs-string">`pre_task_version`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;pre task 
version&#x27;</span>,
+  <span class="hljs-string">`post_task_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;post task 
code&#x27;</span>,
+  <span class="hljs-string">`post_task_version`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;post task 
version&#x27;</span>,
+  <span class="hljs-string">`condition_type`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;condition type : 0 none, 1 judge 2 delay&#x27;</span>,
+  <span class="hljs-string">`condition_params`</span> <span 
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;condition params(json)&#x27;</span>,
+  <span class="hljs-string">`create_time`</span> datetime <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;create 
time&#x27;</span>,
+  <span class="hljs-string">`update_time`</span> datetime <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;update time&#x27;</span>,
+  PRIMARY <span class="hljs-keyword">KEY</span> (<span 
class="hljs-string">`id`</span>)
+) <span class="hljs-keyword">ENGINE</span>=<span 
class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> 
<span class="hljs-keyword">CHARSET</span>=utf8;
+
+<span class="hljs-keyword">CREATE</span> <span 
class="hljs-keyword">TABLE</span> <span 
class="hljs-string">`t_ds_process_task_relation_log`</span> (
+  <span class="hljs-string">`id`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> 
AUTO_INCREMENT <span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;self-increasing id&#x27;</span>,
+  <span class="hljs-string">`name`</span> <span 
class="hljs-built_in">varchar</span>(<span class="hljs-number">200</span>) 
<span class="hljs-keyword">DEFAULT</span> <span 
class="hljs-literal">NULL</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;relation name&#x27;</span>,
+  <span class="hljs-string">`process_definition_version`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;process version&#x27;</span>,
+  <span class="hljs-string">`project_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;project 
code&#x27;</span>,
+  <span class="hljs-string">`process_definition_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;process 
code&#x27;</span>,
+  <span class="hljs-string">`pre_task_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;pre task 
code&#x27;</span>,
+  <span class="hljs-string">`pre_task_version`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;pre task 
version&#x27;</span>,
+  <span class="hljs-string">`post_task_code`</span> <span 
class="hljs-built_in">bigint</span>(<span class="hljs-number">20</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;post task 
code&#x27;</span>,
+  <span class="hljs-string">`post_task_version`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;post task 
version&#x27;</span>,
+  <span class="hljs-string">`condition_type`</span> <span 
class="hljs-built_in">tinyint</span>(<span class="hljs-number">2</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;condition type : 0 none, 1 judge 2 delay&#x27;</span>,
+  <span class="hljs-string">`condition_params`</span> <span 
class="hljs-built_in">text</span> <span class="hljs-keyword">COMMENT</span> 
<span class="hljs-string">&#x27;condition params(json)&#x27;</span>,
+  <span class="hljs-string">`operator`</span> <span 
class="hljs-built_in">int</span>(<span class="hljs-number">11</span>) <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;operator user id&#x27;</span>,
+  <span class="hljs-string">`operate_time`</span> datetime <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;operate time&#x27;</span>,
+  <span class="hljs-string">`create_time`</span> datetime <span 
class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span> <span 
class="hljs-keyword">COMMENT</span> <span class="hljs-string">&#x27;create 
time&#x27;</span>,
+  <span class="hljs-string">`update_time`</span> datetime <span 
class="hljs-keyword">DEFAULT</span> <span class="hljs-literal">NULL</span> 
<span class="hljs-keyword">COMMENT</span> <span 
class="hljs-string">&#x27;update time&#x27;</span>,
+  PRIMARY <span class="hljs-keyword">KEY</span> (<span 
class="hljs-string">`id`</span>)
+) <span class="hljs-keyword">ENGINE</span>=<span 
class="hljs-keyword">InnoDB</span> <span class="hljs-keyword">DEFAULT</span> 
<span class="hljs-keyword">CHARSET</span>=utf8;
+</code></pre>
+<p>对于依赖关系复杂的场景</p>
+<p><img src="/img/dolphinscheduler_json_20210601/image-20210524144950185.png" 
alt="image-20210524144950185"></p>
+<h2>3、API模块如何改造</h2>
+<p><img 
src="/img/dolphinscheduler_json_20210601/1620304011852-1621754591271.png" 
alt="拆分方案-1620304011852"></p>
+<ul>
+<li>[ ] api模块进行save操作时</li>
+</ul>
+<ol>
+<li>通过雪花算法生成13位的数字作为process_definition_code,工作流定义保存至process_definition(主表)和process_definition_log(日志表),这两个表保存的是同样的数据,工作流定义版本为1</li>
+<li>通过雪花算法生成13位的数字作为task_definition_code,任务定义表保存至task_definition(主表)和task_definition_log(日志表),也是保存同样的数据,任务定义版本为1</li>
+<li>工作流任务关系保存在 
process_task_relation(主表)和process_task_relation_log(日志表),该表保存的code和version是工作流的code和version,因为任务是通过工作流进行组织,以工作流来画dag。也是通过post_task_code和post_task_version标识dag的当前节点,这个节点的前置依赖通过pre_task_code和pre_task_version来标识,如果没有依赖,pre_task_code和pre_task_version为0</li>
+</ol>
+<ul>
+<li>
+<p>[ ] 
api模块进行update操作时,工作流定义和任务定义直接更新主表数据,更新后的数据insert到日志表。关系表主表先删除然后再插入新的关系,关系表日志表直接插入新的关系</p>
+</li>
+<li>
+<p>[ ] api模块进行delete操作时,工作流定义、任务定义和关系表直接删除主表数据,日志表数据不变动</p>
+</li>
+<li>
+<p>[ ] api模块进行switch操作时,直接将日志表中对应version数据覆盖到主表</p>
+</li>
+</ul>
+<h2>4、数据交互如何改造</h2>
+<p><img src="/img/dolphinscheduler_json_20210601/json.png" alt="json"></p>
+<ul>
+<li>
+<p>[ ] 
在json拆分一期api模块controller层整体未变动,传入的大json还是在service层映射为ProcessData对象。insert或update操作在公共Service模块通过ProcessService.saveProcessDefiniton()入口完成保存数据库操作,按照task_definition、process_task_relation、process_definition的顺序保存。保存时,如果该任务已经存在并且关联的工作流未上线,则更改任务;如果任务关联的工作流已上线,则不允许更改任务</p>
+</li>
+<li>
+<p>[ ] 
api查询操作时,当前还是通过工作流id来查询,在公共Service模块通过ProcessService.genTaskNodeList()入口完成数据组装,还是组装为ProcessData对象,进而生成json返回</p>
+</li>
+<li>
+<p>[ ] 
Server模块(Master)也是通过公共Service模块ProcessService.genTaskNodeList()获得TaskNodeList生成调度dag,把当前任务所有信息放到
 MasterExecThread.readyToSubmitTaskQueue队列,以便生成taskInstance,dispatch给worker</p>
+</li>
+</ul>
+<h2>5、当前json还需做什么</h2>
+<ul>
+<li>controller对外restAPI接口改造</li>
+<li>ui模块dag改造</li>
+<li>ui模块新增task操作页面</li>
+</ul>
+<p><strong>processDefinition</strong></p>
+<table>
+<thead>
+<tr>
+<th>接口名称</th>
+<th>参数名称</th>
+<th style="text-align:center">参数说明</th>
+<th>数据类型</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td></td>
+<td>projectName</td>
+<td style="text-align:center">项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>name</td>
+<td style="text-align:center">流程定义名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>description</td>
+<td style="text-align:center">流程定义描述信息</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>globalParams</td>
+<td style="text-align:center">全局参数</td>
+<td>string</td>
+</tr>
+<tr>
+<td>save</td>
+<td>connects</td>
+<td style="text-align:center">流程定义节点图标连接信息(json格式)</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>locations</td>
+<td style="text-align:center">流程定义节点坐标位置信息(json格式)</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td><strong>timeout</strong></td>
+<td style="text-align:center"><strong>超时分钟数</strong></td>
+<td><strong>int</strong></td>
+</tr>
+<tr>
+<td></td>
+<td><strong>tenantId</strong></td>
+<td style="text-align:center"><strong>租户id</strong></td>
+<td><strong>int</strong></td>
+</tr>
+<tr>
+<td></td>
+<td><strong>taskRelationJson</strong></td>
+<td style="text-align:center"><strong>任务关系(json格式)</strong></td>
+<td><strong>string</strong></td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td style="text-align:center">--</td>
+<td>--</td>
+</tr>
+<tr>
+<td></td>
+<td>projectName</td>
+<td style="text-align:center">项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td><strong>code</strong></td>
+<td style="text-align:center"><strong>流程定义code</strong></td>
+<td><strong>long</strong></td>
+</tr>
+<tr>
+<td></td>
+<td>name</td>
+<td style="text-align:center">流程定义名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>description</td>
+<td style="text-align:center">流程定义描述信息</td>
+<td>string</td>
+</tr>
+<tr>
+<td>update</td>
+<td>releaseState</td>
+<td style="text-align:center">发布流程定义,可用值:OFFLINE,ONLINE</td>
+<td>ref</td>
+</tr>
+<tr>
+<td></td>
+<td>connects</td>
+<td style="text-align:center">流程定义节点图标连接信息(json格式)</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>locations</td>
+<td style="text-align:center">流程定义节点坐标位置信息(json格式)</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td><strong>timeout</strong></td>
+<td style="text-align:center"><strong>超时分钟数</strong></td>
+<td><strong>int</strong></td>
+</tr>
+<tr>
+<td></td>
+<td><strong>tenantId</strong></td>
+<td style="text-align:center"><strong>租户id</strong></td>
+<td><strong>int</strong></td>
+</tr>
+<tr>
+<td></td>
+<td><strong>taskRelationJson</strong></td>
+<td style="text-align:center"><strong>任务关系(json格式)</strong></td>
+<td><strong>string</strong></td>
+</tr>
+<tr>
+<td></td>
+<td>--</td>
+<td style="text-align:center">--</td>
+<td>--</td>
+</tr>
+<tr>
+<td></td>
+<td><strong>code</strong></td>
+<td style="text-align:center"><strong>流程定义code</strong></td>
+<td><strong>long</strong></td>
+</tr>
+<tr>
+<td>switch/deleteCode</td>
+<td>projectName</td>
+<td style="text-align:center">项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>version</td>
+<td style="text-align:center">版本号</td>
+<td>string</td>
+</tr>
+</tbody>
+</table>
+<p>备注:taskRelationJson格式:[{&quot;name&quot;:&quot;&quot;,&quot;pre_task_code&quot;:0,&quot;pre_task_version&quot;:0,&quot;post_task_code&quot;:123456789,&quot;post_task_version&quot;:1,&quot;condition_type&quot;:0,&quot;condition_params&quot;:{}},{&quot;name&quot;:&quot;&quot;,&quot;pre_task_code&quot;:123456789,&quot;pre_task_version&quot;:1,&quot;post_task_code&quot;:123451234,&quot;post_task_version&quot;:1,&quot;condition_type&quot;:0,&quot;condition_params&quot;:{}}]</p>
+<p>同理其他接口请求参数processDefinitionId换成code</p>
+<p><strong>schedule</strong></p>
+<table>
+<thead>
+<tr>
+<th style="text-align:center">接口名称</th>
+<th style="text-align:left">参数名称</th>
+<th>参数说明</th>
+<th>数据类型</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left"><strong>code</strong></td>
+<td><strong>流程定义code</strong></td>
+<td><strong>long</strong></td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">failureStrategy</td>
+<td>失败策略,可用值:END,CONTINUE</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center">createSchedule</td>
+<td style="text-align:left">processInstancePriority</td>
+<td>流程实例优先级,可用值:HIGHEST,HIGH,MEDIUM,LOW,LOWEST</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">schedule</td>
+<td>定时</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">warningGroupId</td>
+<td>发送组ID</td>
+<td>int</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">warningType</td>
+<td>发送策略,可用值:NONE,SUCCESS,FAILURE,ALL</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">workerGroup</td>
+<td>workerGroup</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center">--</td>
+<td style="text-align:left">--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left"><strong>code</strong></td>
+<td><strong>流程定义code</strong></td>
+<td><strong>long</strong></td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td style="text-align:center">queryScheduleListPaging</td>
+<td style="text-align:left">pageNo</td>
+<td>页码号</td>
+<td>int</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">pageSize</td>
+<td>页大小</td>
+<td>int</td>
+</tr>
+<tr>
+<td style="text-align:center"></td>
+<td style="text-align:left">searchVal</td>
+<td>搜索值</td>
+<td>string</td>
+</tr>
+</tbody>
+</table>
+<p><strong>taskDefinition</strong>(新增)</p>
+<table>
+<thead>
+<tr>
+<th>接口名称</th>
+<th>参数名称</th>
+<th>参数说明</th>
+<th>数据类型</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>save</td>
+<td>projectName</td>
+<td>项目名称</td>
+<td></td>
+</tr>
+<tr>
+<td></td>
+<td>taskDefinitionJson</td>
+<td>task信息</td>
+<td>string</td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td></td>
+<td>projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td>update</td>
+<td>code</td>
+<td>task code</td>
+<td>long</td>
+</tr>
+<tr>
+<td></td>
+<td>taskDefinitionJson</td>
+<td>task信息</td>
+<td>string</td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td></td>
+<td>projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td>switch/deleteCode</td>
+<td>task_code</td>
+<td>taskCode</td>
+<td>long</td>
+</tr>
+<tr>
+<td></td>
+<td>version</td>
+<td>版本号</td>
+<td>int</td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td>query/delete</td>
+<td>projectName</td>
+<td>项目名称</td>
+<td>string</td>
+</tr>
+<tr>
+<td></td>
+<td>task_code</td>
+<td>task code</td>
+<td>long</td>
+</tr>
+<tr>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+<td>--</td>
+</tr>
+<tr>
+<td>queryTaskListPaging</td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+<p>taskDefinitionJson:[{&quot;name&quot;:&quot;test&quot;,&quot;description&quot;:&quot;&quot;,&quot;task_type&quot;:&quot;SHELL&quot;,&quot;task_params&quot;:[],&quot;flag&quot;:0,&quot;task_priority&quot;:0,&quot;worker_group&quot;:&quot;default&quot;,&quot;fail_retry_times&quot;:0,&quot;fail_retry_interval&quot;:0,&quot;timeout_flag&quot;:0,&quot;timeout_notify_strategy&quot;:0,&quot;timeout&quot;:0,&quot;delay_time&quot;:0,&quot;resource_ids&quot;:&quot;&quot;}]</p>
+<p>对应需求issue</p>
+<pre><code>[Feature][JsonSplit-api] api module controller design #5498 
+1. [Feature][JsonSplit-api]processDefinition save/update interface  #5499 
+2. [Feature][JsonSplit-api]processDefinition switch interface #5501 
+3. [Feature][JsonSplit-api]processDefinition delete interface #5502 
+4. [Feature][JsonSplit-api]processDefinition copy interface #5503 
+5. [Feature][JsonSplit-api]processDefinition export interface #5504 
+6. [Feature][JsonSplit-api]processDefinition list-paging interface #5505 
+7. [Feature][JsonSplit-api]processDefinition move interface #5506 
+8. [Feature][JsonSplit-api]processDefinition 
queryProcessDefinitionAllByProjectId interface #5507 
+9. [Feature][JsonSplit-api]processDefinition select-by-id interface #5508 
+10. [Feature][JsonSplit-api]processDefinition view-tree interface #5509 
+11. [Feature][JsonSplit-api]schedule create interface #5510 
+12. [Feature][JsonSplit-api]schedule list-paging interface #5511 
+13. [Feature][JsonSplit-api]schedule update interface #5512 
+14. [Feature][JsonSplit-api]taskDefinition save interface #5513 
+15. [Feature][JsonSplit-api]taskDefinition update interface #5514 
+16. [Feature][JsonSplit-api]taskDefinition switch interface #5515 
+17. [Feature][JsonSplit-api]taskDefinition query interface #5516 
+18. [Feature][JsonSplit-api]taskDefinition delete interface #5517 
+19. [Feature][JsonSplit-api]WorkFlowLineage interface #5518 
+20. [Feature][JsonSplit-api]analysis interface #5519 
+21. [Feature][JsonSplit-api]executors interface #5520 
+22. [Feature][JsonSplit-api]processInstance interface #5521 
+23. [Feature][JsonSplit-api]project interface #5522 
+</code></pre>
+</section><footer class="footer-container"><div 
class="footer-body"><div><h3>联系我们</h3><h4>有问题需要反馈?请通过以下方式联系我们。</h4></div><div 
class="contact-container"><ul><li><img class="img-base" 
src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><a 
href="/zh-cn/community/development/subscribe.html"><p>邮件列表</p></a></li><li><img 
class="img-base" src="/img/twittergray.png"/><img class="img-change" 
src="/img/twitterblue.png"/><a 
href="https://twitter.com/dolphinschedule";><p>Twitt [...]
+  <script 
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-with-addons.min.js"></script>
+  <script 
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.98926a5.js"></script>
+  <script src="/build/blog.md.57874be.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";;
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/zh-cn/blog/dolphinscheduler_json.json 
b/zh-cn/blog/dolphinscheduler_json.json
new file mode 100644
index 0000000..acee196
--- /dev/null
+++ b/zh-cn/blog/dolphinscheduler_json.json
@@ -0,0 +1,6 @@
+{
+  "filename": "dolphinscheduler_json.md",
+  "__html": "<h2>dolphinscheduler 
json拆解</h2>\n<h2>1、为什么拆解json</h2>\n<p>在dolphinscheduler 
1.3.x及以前的工作流中的任务及任务关系保存时是以大json的方式保存到数据库中process_definiton表的process_definition_json字段,如果某个工作流很大比如有100或者1000个任务,这个json字段也就非常大,在使用时需要解析json,非常耗费性能,且任务没法重用;基于大json,在工作流版本及任务版本上也没有好的实现方案,否则会导致数据大量冗余。</p>\n<p>故社区计划启动json拆解项目,实现的需求目标:</p>\n<ul>\n<li>大json完全拆分</li>\n<li>新增工作流及任务版本</li>\n<li>引入全局唯一键(code)</li>\n</ul>\n<h2>2、如何设计拆解后的表</h2>\n<h3>1、1.3.6版本工作流</h3>\n<p>1、比如在当前1.3.6版本创建个a--&gt;b的工作流</p>\n<p><img
 [...]
+  "link": "/dist/zh-cn/blog/dolphinscheduler_json.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/zh-cn/blog/index.html b/zh-cn/blog/index.html
index e86af16..59f4813 100644
--- a/zh-cn/blog/index.html
+++ b/zh-cn/blog/index.html
@@ -11,12 +11,12 @@
   <link rel="stylesheet" href="/build/blog.acc2955.css">
 </head>
 <body>
-  <div id="root"><div class="blog-list-page" data-reactroot=""><header 
class="header-container header-container-dark"><div class="header-body"><a 
href="/zh-cn/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div 
class="search search-dark"><span class="icon-search"></span></div><span 
class="language-switch language-switch-dark">En</span><div 
class="header-menu"><img class="header-menu-toggle" 
src="/img/system/menu_white.png"/><div><ul class="ant-menu whiteClass 
ant-menu-ligh [...]
+  <div id="root"><div class="blog-list-page" data-reactroot=""><header 
class="header-container header-container-dark"><div class="header-body"><a 
href="/zh-cn/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div 
class="search search-dark"><span class="icon-search"></span></div><span 
class="language-switch language-switch-dark">En</span><div 
class="header-menu"><img class="header-menu-toggle" 
src="/img/system/menu_white.png"/><div><ul class="ant-menu whiteClass 
ant-menu-ligh [...]
   <script 
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-with-addons.min.js"></script>
   <script 
src="//cdn.jsdelivr.net/npm/[email protected]/dist/react-dom.min.js"></script>
   <script>window.rootPath = '';</script>
   <script src="/build/vendor.98926a5.js"></script>
-  <script src="/build/blog.e648da6.js"></script>
+  <script src="/build/blog.cfdb16c.js"></script>
   <script>
     var _hmt = _hmt || [];
     (function() {

Reply via email to