news 2026/6/10 16:17:55

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/5/28 18:55:33

数学建模应用:RMBG-2.0在图像分析赛题中的创新使用

数学建模应用:RMBG-2.0在图像分析赛题中的创新使用 1. 从一张模糊的卫星图说起 去年参加数学建模竞赛时,我们队抽到一道图像分析题:给定一组低分辨率、带云层遮挡的农田遥感图像,要求估算不同作物的种植面积比例。当时团队花了整…

作者头像 李华
网站建设 2026/5/29 2:36:13

AnimateDiff一键部署教程:基于GPU加速的文生视频实战指南

AnimateDiff一键部署教程:基于GPU加速的文生视频实战指南 1. 为什么你需要AnimateDiff 最近在做短视频内容时,我经常遇到一个头疼的问题:想把一段产品介绍文案变成动态视频,但传统剪辑软件操作复杂,外包成本又太高。…

作者头像 李华
网站建设 2026/6/9 22:45:30

WMS系统集成Qwen2.5-VL:智能仓储视觉检测

WMS系统集成Qwen2.5-VL:智能仓储视觉检测 1. 传统仓储管理的痛点在哪里 仓库里每天都在发生着大量重复性检查工作——新到货的纸箱是否破损、货架上的商品摆放是否整齐、库存标签是否清晰可读、托盘堆叠高度是否合规。这些看似简单的事情,却需要仓管员…

作者头像 李华
网站建设 2026/6/10 19:50:21

Qwen3-Reranker-4B入门必看:重排序vs嵌入vs生成模型的技术边界厘清

Qwen3-Reranker-4B入门必看:重排序vs嵌入vs生成模型的技术边界厘清 你是不是也遇到过这样的困惑: 搜索结果排在前面的文档,语义相关性却不高; 用向量相似度召回的文本,和用户真实意图总差那么一口气; 明明…

作者头像 李华
网站建设 2026/5/31 16:23:07

Lychee Rerank MM开源可部署:哈工大深圳NLP团队贡献的工业级重排序系统

Lychee Rerank MM开源可部署:哈工大深圳NLP团队贡献的工业级重排序系统 1. 这不是普通重排序,是多模态语义对齐的新实践 你有没有遇到过这样的问题:在图文混合搜索中,输入一段文字描述,系统返回的图片却和你想的完全…

作者头像 李华
网站建设 2026/6/10 10:34:54

数据库课程设计中的多语言支持:Hunyuan-MT 7B应用

数据库课程设计中的多语言支持:Hunyuan-MT 7B应用 1. 为什么数据库课程设计需要多语言能力 在高校数据库系统课程设计中,学生常常需要面对一个现实问题:如何让数据库应用真正走向国际化?我们见过太多次这样的场景——学生小组开…

作者头像 李华