当前位置: 首页 > news >正文

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的适配版本吗?

http://www.jsqmd.com/news/357857/

相关文章:

  • 数学建模应用:RMBG-2.0在图像分析赛题中的创新使用
  • 2026年上海热门旅行社排名,景中游国际旅行社创新能力强上榜 - myqiye
  • PasteMD开发者案例:嵌入VS Code插件,右键菜单直接调用本地Markdown美化
  • Hunyuan-MT Pro效果展示:中→日技术文档术语一致性与敬语处理案例
  • 通义千问2.5-7B vs InternLM2-7B性能对比:长文本处理实测
  • ccmusic-database模型效果对比:传统机器学习vs深度学习
  • 干式细胞复苏仪怎么选择,智能干式细胞复苏仪国产品牌分析 - 工业品网
  • 圣光艺苑保姆级部署:Docker镜像拉取+4090环境变量配置全记录
  • php python+vue投票毕业设计论文
  • 2026年福州热门美术画室年度排名,美术画室哪家靠谱 - 工业设备
  • Unity集成CTC语音唤醒插件:小云小云游戏交互方案
  • FLUX.小红书极致真实V2效果实测:8K显示器下1024x1536图放大200%仍保持锐利
  • DeepSeek-R1-Distill-Qwen-1.5B响应延迟优化:批处理配置指南
  • LFM2.5-1.2B-Thinking效果展示:Ollama中生成带格式表格、流程图描述、UML用例
  • Face3D.ai Pro多场景落地:中小企业无需3D美术师即可生成数字人资产
  • 不踩雷! 降AIGC网站 千笔·降AIGC助手 VS WPS AI 研究生必备
  • 开源多模态模型新选择:Qwen3-VL-2B图文问答实战落地
  • DeepChat效果实测:Llama3本地推理在复杂逻辑链、多跳问答、长文本摘要中的表现
  • Yi-Coder-1.5B在单片机开发中的应用:寄存器配置智能化
  • Nano-Banana在SpringBoot微服务架构中的应用
  • php python+vue私募基金产品网上销售系统原型开发开题报告
  • Qwen2.5-Coder-1.5B在Dify中的应用:低代码AI应用开发
  • BGE Reranker-v2-m3与Python爬虫结合:智能数据清洗与排序方案
  • Gemma-3-270m在IDEA开发环境中的集成指南
  • 【小程序毕设源码分享】基于springboot+小程序的福建畲族文化交流与交易平台小程序的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 关于Linux服务器的协作问题
  • Granite-4.0-H-350m与Claude Code对比:代码生成能力评测
  • GLM-4v-9b实战案例:在线教育平台接入GLM-4v-9b实现习题图智能批改
  • lychee-rerank-mm开发者案例:为内部知识库添加图文语义检索增强模块
  • 农业信息化平台如何实现Word表格到网页的无缝转换?