feat: 抓取任务队列 + 媒体机直传 + 向量回填
crawl(品牌抓取任务队列) - /admin/internal/crawl/tasks 领取 / :id/result 回报,spider 可常驻拉任务 - 后台品牌列表支持「加入抓取队列」,队列页可看状态与重试 - 租约超时的 running 自动回收为 queued,避免 worker 崩溃后任务卡死 media(媒体机直传) - ingest 载荷新增 main_key/detail_keys/main_size/detail_sizes: 有 key 就直接落库,跳过下载与上传;与 URL 形态可逐图混用 - 细节图按 Details/DetailKeys 两者较长者遍历(只给 key 时不再丢图) - 媒体机上传的 key 不进失败回滚清单(内容寻址、可能与他人共享) - /admin/internal/upload-url 签发 S4 PUT 预签名(spider 不持有 AK/SK) embeddings(向量回填) - GET /admin/internal/embeddings/pending 派发缺向量的图(含可直接下载的 url) - POST /admin/internal/embeddings 回写向量并重算近邻;失败项计入 image_embedding_failures,连续失败到上限后退出队列(坏图不占位) - 近邻重算改为异步串行:同步会让 100 张的批次 POST 超时(实测 >60s) - 新增 key 分支单测:混用 key/url、细节图只给 key、字节数、回滚清单、向量占位
This commit is contained in:
16
db/migrations/2026-10-24-01-embedding-failures.sql
Normal file
16
db/migrations/2026-10-24-01-embedding-failures.sql
Normal file
@ -0,0 +1,16 @@
|
||||
-- 向量回填的失败计数表(媒体拆分后新增)。
|
||||
--
|
||||
-- 背景:媒体机直传后,后端拿到的是 key 而不是图片字节,向量只能由「回填 worker」
|
||||
-- (有 GPU 的机器)从存储拉图、编码、再回传。若某张图永远编不出向量
|
||||
-- (文件损坏、格式不支持、被删),没有计数就会每次回填都重试,把队列堵死。
|
||||
--
|
||||
-- 规则:同一 (kind, image_id) 连续失败 attempts 次后不再出现在待回填队列里;
|
||||
-- 回填成功时删除该行(这张图已经不需要再试了)。
|
||||
CREATE TABLE IF NOT EXISTS image_embedding_failures (
|
||||
kind varchar(16) NOT NULL,
|
||||
image_id bigint NOT NULL,
|
||||
attempts smallint NOT NULL DEFAULT 0,
|
||||
last_error text NOT NULL DEFAULT '',
|
||||
updated_at bigint NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (kind, image_id)
|
||||
);
|
||||
Reference in New Issue
Block a user