news 2026/4/16 10:45:30

Go 定时任务调度系统的数据库表结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Go 定时任务调度系统的数据库表结构

设计一个Go 定时任务调度系统的数据库表结构。这是一个完整的企业级设计方案,包含任务管理、执行记录、调度节点、日志追踪等核心模块。

核心表结构设计

1. 任务表 (jobs) - 核心配置

sql

复制

CREATE TABLE jobs ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, job_key VARCHAR(64) NOT NULL COMMENT '业务唯一标识(如: order.auto_cancel)', name VARCHAR(128) NOT NULL COMMENT '任务名称', description VARCHAR(500) DEFAULT NULL COMMENT '任务描述', -- 调度配置 cron_expr VARCHAR(64) NOT NULL COMMENT 'Cron表达式(如: 0 0 * * *)', timezone VARCHAR(32) DEFAULT 'Asia/Shanghai' COMMENT '执行时区', schedule_type TINYINT DEFAULT 1 COMMENT '调度类型:1-cron,2-固定间隔,3-一次性', interval_seconds INT DEFAULT NULL COMMENT '固定间隔秒数(schedule_type=2)', -- 执行配置 executor_type TINYINT DEFAULT 1 COMMENT '执行器类型:1-http,2-shell,3-gRPC,4-函数', executor_config JSON NOT NULL COMMENT '执行器配置(JSON格式)', timeout_seconds INT DEFAULT 300 COMMENT '执行超时时间(秒)', retry_times TINYINT DEFAULT 3 COMMENT '失败重试次数', retry_interval INT DEFAULT 60 COMMENT '重试间隔(秒)', -- 路由策略 routing_policy TINYINT DEFAULT 1 COMMENT '路由策略:1-随机,2-轮询,3-一致性hash,4-指定节点', target_nodes JSON DEFAULT NULL COMMENT '指定节点ID列表', -- 状态控制 status TINYINT DEFAULT 0 COMMENT '状态:0-停用,1-启用,2-暂停', start_time DATETIME DEFAULT NULL COMMENT '生效开始时间', end_time DATETIME DEFAULT NULL COMMENT '生效结束时间', -- 告警配置 alarm_config JSON DEFAULT NULL COMMENT '告警配置: 超时/失败/成功通知', -- 统计字段 total_runs INT DEFAULT 0 COMMENT '总执行次数', success_runs INT DEFAULT 0 COMMENT '成功次数', fail_runs INT DEFAULT 0 COMMENT '失败次数', last_run_time DATETIME DEFAULT NULL COMMENT '最后执行时间', last_run_result TINYINT DEFAULT NULL COMMENT '最后执行结果:0-失败,1-成功', -- 审计字段 created_by VARCHAR(64) NOT NULL COMMENT '创建人', updated_by VARCHAR(64) NOT NULL COMMENT '更新人', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, deleted_at DATETIME DEFAULT NULL COMMENT '软删除', UNIQUE KEY uk_job_key (job_key), INDEX idx_status (status), INDEX idx_schedule_type (schedule_type), INDEX idx_deleted_at (deleted_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定时任务配置表';

2. 任务执行记录表 (job_logs) - 执行历史

sql

复制

CREATE TABLE job_logs ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, job_id BIGINT UNSIGNED NOT NULL COMMENT '任务ID', job_key VARCHAR(64) NOT NULL COMMENT '任务标识', -- 执行信息 trigger_type TINYINT DEFAULT 1 COMMENT '触发方式:1-自动调度,2-手动触发,3-失败重试', run_id VARCHAR(64) NOT NULL COMMENT '本次执行唯一ID(雪花ID)', execute_node VARCHAR(64) NOT NULL COMMENT '执行节点ID', -- 调度时间 schedule_time DATETIME(3) NOT NULL COMMENT '计划执行时间(毫秒精度)', actual_start DATETIME(3) DEFAULT NULL COMMENT '实际开始时间', actual_end DATETIME(3) DEFAULT NULL COMMENT '实际结束时间', duration_ms INT DEFAULT NULL COMMENT '执行耗时(毫秒)', -- 执行结果 status TINYINT DEFAULT 0 COMMENT '状态:0-等待,1-运行中,2-成功,3-失败,4-超时,5-取消', exit_code INT DEFAULT NULL COMMENT '退出码', result_data TEXT DEFAULT NULL COMMENT '执行结果/返回值', error_msg TEXT DEFAULT NULL COMMENT '错误信息', -- 上下文 trace_id VARCHAR(64) DEFAULT NULL COMMENT '分布式追踪ID', input_params JSON DEFAULT NULL COMMENT '输入参数', output_logs LONGTEXT DEFAULT NULL COMMENT '执行日志输出', -- 重试信息 retry_count TINYINT DEFAULT 0 COMMENT '当前重试次数', parent_log_id BIGINT UNSIGNED DEFAULT NULL COMMENT '父执行记录ID(重试链)', created_at DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3), INDEX idx_job_id_schedule (job_id, schedule_time), INDEX idx_run_id (run_id), INDEX idx_trace_id (trace_id), INDEX idx_status_created (status, created_at), INDEX idx_execute_node (execute_node, created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务执行记录表' PARTITION BY RANGE (TO_DAYS(created_at)) ( PARTITION p_current VALUES LESS THAN (TO_DAYS('2025-03-01')), PARTITION p_future VALUES LESS THAN MAXVALUE );

3. 调度节点表 (scheduler_nodes) - 集群管理

sql

复制

CREATE TABLE scheduler_nodes ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, node_id VARCHAR(64) NOT NULL COMMENT '节点唯一标识(机器指纹)', node_name VARCHAR(128) NOT NULL COMMENT '节点名称', node_ip VARCHAR(32) NOT NULL COMMENT '节点IP', node_port INT NOT NULL COMMENT '服务端口号', -- 节点属性 node_role TINYINT DEFAULT 1 COMMENT '角色:1-worker,2-master,3-master+worker', node_group VARCHAR(64) DEFAULT 'default' COMMENT '节点分组', labels JSON DEFAULT NULL COMMENT '标签(如: os=linux,zone=beijing)', capabilities JSON DEFAULT NULL COMMENT '能力列表(如: ["shell","http","docker"])', -- 状态监控 status TINYINT DEFAULT 0 COMMENT '状态:0-离线,1-在线,2-忙碌,3-维护中', last_heartbeat DATETIME DEFAULT NULL COMMENT '最后心跳时间', cpu_usage DECIMAL(5,2) DEFAULT NULL COMMENT 'CPU使用率', memory_usage DECIMAL(5,2) DEFAULT NULL COMMENT '内存使用率', load_avg DECIMAL(5,2) DEFAULT NULL COMMENT '系统负载', running_jobs INT DEFAULT 0 COMMENT '当前运行任务数', -- 版本信息 version VARCHAR(32) DEFAULT NULL COMMENT '程序版本', start_time DATETIME DEFAULT NULL COMMENT '启动时间', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_node_id (node_id), INDEX idx_status_group (status, node_group), INDEX idx_heartbeat (last_heartbeat) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='调度节点表';

4. 任务锁定表 (job_locks) - 分布式锁

sql

复制

CREATE TABLE job_locks ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, job_id BIGINT UNSIGNED NOT NULL, run_id VARCHAR(64) NOT NULL COMMENT '执行ID', node_id VARCHAR(64) NOT NULL COMMENT '持有节点', lock_until DATETIME NOT NULL COMMENT '锁过期时间', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_job_id (job_id), INDEX idx_lock_until (lock_until) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务分布式锁(防止重复执行)';

5. 任务依赖表 (job_dependencies) - DAG 支持

sql

复制

CREATE TABLE job_dependencies ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, job_id BIGINT UNSIGNED NOT NULL COMMENT '当前任务', parent_job_id BIGINT UNSIGNED NOT NULL COMMENT '父任务', dependency_type TINYINT DEFAULT 1 COMMENT '依赖类型:1-强依赖(父失败则跳过),2-弱依赖(仅等待)', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_job_parent (job_id, parent_job_id), INDEX idx_parent_job (parent_job_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务依赖关系表';

6. 告警记录表 (job_alarms) - 通知历史

sql

复制

CREATE TABLE job_alarms ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, job_id BIGINT UNSIGNED NOT NULL, log_id BIGINT UNSIGNED DEFAULT NULL COMMENT '关联执行记录', alarm_type TINYINT NOT NULL COMMENT '告警类型:1-失败,2-超时,3-成功,4-节点离线', alarm_level TINYINT DEFAULT 1 COMMENT '级别:1-警告,2-严重,3-紧急', notify_channels JSON NOT NULL COMMENT '通知渠道: ["email","sms","webhook"]', notify_targets JSON NOT NULL COMMENT '通知对象', notify_content TEXT NOT NULL COMMENT '通知内容', status TINYINT DEFAULT 0 COMMENT '状态:0-待发送,1-已发送,2-发送失败', sent_at DATETIME DEFAULT NULL, error_info VARCHAR(500) DEFAULT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_job_id_created (job_id, created_at), INDEX idx_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='告警通知记录';

7. 任务版本表 (job_versions) - 配置变更历史

sql

复制

CREATE TABLE job_versions ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, job_id BIGINT UNSIGNED NOT NULL, version INT NOT NULL COMMENT '版本号', -- 变更内容 change_type TINYINT NOT NULL COMMENT '变更类型:1-创建,2-修改,3-启用,4-停用,5-删除', change_data JSON NOT NULL COMMENT '变更内容快照', change_reason VARCHAR(500) DEFAULT NULL COMMENT '变更原因', created_by VARCHAR(64) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_job_version (job_id, version), INDEX idx_created_at (created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务配置版本历史';

实体关系图 (ERD)

复制

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ jobs │ │ job_logs │ │ scheduler_nodes │ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │ PK id │◄──────┤ FK job_id │ │ PK id │ │ job_key │ │ run_id │ │ node_id │ │ cron_expr │ │ execute_node │──────►│ node_ip │ │ executor_... │ │ status │ │ status │ │ status │ │ duration_ms │ │ last_heart...│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ job_dependencies│ │ job_alarms │ ├─────────────────┤ ├─────────────────┤ │ PK id │ │ PK id │ │ FK job_id │ │ FK job_id │ │ FK parent_job_id│ │ FK log_id │ │ dependency...│ │ alarm_type │ └─────────────────┘ └─────────────────┘ ┌─────────────────┐ ┌─────────────────┐ │ job_locks │ │ job_versions │ ├─────────────────┤ ├─────────────────┤ │ PK id │ │ PK id │ │ FK job_id │ │ FK job_id │ │ run_id │ │ version │ │ node_id │ │ change_data │ │ lock_until │ │ created_by │ └─────────────────┘ └─────────────────┘

关键设计要点

表格

复制

设计点说明
雪花IDrun_id使用雪花算法,支持分布式环境唯一标识
分表分区job_logs按时间分区,历史数据自动归档
乐观锁job_locks实现分布式锁,防止集群重复调度
软删除所有表支持deleted_at软删除,便于审计
JSON字段灵活存储配置,避免频繁 DDL
毫秒精度时间字段使用DATETIME(3)支持毫秒级追踪

需要我补充Go 结构体定义DAO 层代码,或者针对PostgreSQL/MongoDB的适配版本吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 11:54:36

通义千问2.5-7B vs InternLM2-7B性能对比:长文本处理实测

通义千问2.5-7B vs InternLM2-7B性能对比:长文本处理实测 1. 为什么长文本能力正在成为AI模型的分水岭 你有没有遇到过这样的情况:把一份30页的产品需求文档粘贴进对话框,模型刚读到第5页就开始“忘事”?或者让AI总结一份技术白…

作者头像 李华
网站建设 2026/4/15 4:49:38

3D Face HRN多场景落地:教育实训、元宇宙头像、数字人建模全解析

3D Face HRN多场景落地:教育实训、元宇宙头像、数字人建模全解析 1. 这不是“修图”,是把一张照片变成可编辑的3D人脸模型 你有没有试过——只用手机拍一张正面自拍照,几秒钟后,就得到一个能放进Blender里旋转、打光、换材质的3…

作者头像 李华
网站建设 2026/4/15 12:19:34

ChatGLM3-6B-128K多模态应用:结合计算机视觉技术

ChatGLM3-6B-128K多模态应用:结合计算机视觉技术 想象一下,你手头有一堆产品图片,需要快速生成商品描述、回答客户关于图片细节的提问,甚至分析图片里的数据图表。传统做法得找设计师、文案、数据分析师,一圈下来费时…

作者头像 李华
网站建设 2026/4/2 5:50:01

BGE Reranker-v2-m3与Python爬虫结合:智能数据清洗与排序方案

BGE Reranker-v2-m3与Python爬虫结合:智能数据清洗与排序方案 你是不是也遇到过这种情况?用Python爬虫辛辛苦苦抓了一大堆数据,结果发现里面什么都有——重复内容、无关信息、质量参差不齐的页面,整理起来简直让人头疼。传统的清…

作者头像 李华
网站建设 2026/4/11 14:08:00

SDXL-Turbo效果实录:从空白画布到完整赛博朋克场景构建

SDXL-Turbo效果实录:从空白画布到完整赛博朋克场景构建 1. 为什么说SDXL-Turbo是“打字即出图”的绘画革命 你有没有试过在AI绘图工具里输入提示词,然后盯着进度条数秒、甚至几十秒?等画面出来后发现构图不对、风格跑偏,又得重写…

作者头像 李华