-- ============================================================ -- 004_crawl_source_status.sql -- 目的:为 crawl_source 增加「最近一次运行状态」冗余列。 -- -- 背景:原 Sources() 查询需全表扫描 crawl_log(只增不减的表)以取每源最近一条, -- 随运行时间线性劣化。改为在抓取结束时把最近结果写入 crawl_source 冗余列, -- 查询时零 JOIN、零扫描。 -- -- 幂等设计:可重复执行,已存在的列会被跳过。 -- ============================================================ USE `recruitment`; -- MySQL 8.0 不支持 ADD COLUMN IF NOT EXISTS,故用存储过程判断后再执行。 DROP PROCEDURE IF EXISTS `add_crawl_source_status_cols`; DELIMITER $$ CREATE PROCEDURE `add_crawl_source_status_cols`() BEGIN -- 最近一次抓取时间 IF NOT EXISTS ( SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'recruitment' AND TABLE_NAME = 'crawl_source' AND COLUMN_NAME = 'last_log_at' ) THEN ALTER TABLE `crawl_source` ADD COLUMN `last_log_at` DATETIME NULL DEFAULT NULL COMMENT '最近一次抓取时间(冗余,避免全表扫描 crawl_log)'; END IF; -- 最近一次抓取条数 IF NOT EXISTS ( SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'recruitment' AND TABLE_NAME = 'crawl_source' AND COLUMN_NAME = 'last_log_fetched' ) THEN ALTER TABLE `crawl_source` ADD COLUMN `last_log_fetched` INT NOT NULL DEFAULT 0 COMMENT '最近一次抓取条数(冗余)'; END IF; -- 最近一次新增条数 IF NOT EXISTS ( SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'recruitment' AND TABLE_NAME = 'crawl_source' AND COLUMN_NAME = 'last_log_new' ) THEN ALTER TABLE `crawl_source` ADD COLUMN `last_log_new` INT NOT NULL DEFAULT 0 COMMENT '最近一次新增条数(冗余)'; END IF; -- 最近一次错误信息 IF NOT EXISTS ( SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'recruitment' AND TABLE_NAME = 'crawl_source' AND COLUMN_NAME = 'last_log_error' ) THEN ALTER TABLE `crawl_source` ADD COLUMN `last_log_error` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '最近一次错误信息(冗余)'; END IF; END$$ DELIMITER ; CALL `add_crawl_source_status_cols`(); DROP PROCEDURE IF EXISTS `add_crawl_source_status_cols`; -- ------------------------------------------------------------ -- 数据源适配配置初始化: -- 为两个已启用的静态源补一份 config,启用增量窗口与限速(后续可按需调整)。 -- 注意:仅当 config 为空时才写入,避免覆盖已有配置。 -- ------------------------------------------------------------ UPDATE `crawl_source` SET `config` = JSON_OBJECT('incrDays', 30, 'maxItems', 60, 'delayMs', 500, 'minScore', 2) WHERE (`config` IS NULL OR `config` = '' OR `config` = '{}') AND `source_type` = 1 AND `enabled` = 1;