[P0] 查重优化: 分片指纹存储改造 #1657

Closed
opened 2026-09-03 18:43:48 +08:00 by xiaoxia · 0 comments
Owner

背景

当前查重系统"一个视频一个指纹",无法定位重复片段、无法计算查重率百分比。需要改为按时间分片存储。

任务

  1. 新建 alembic migration,创建 video_fingerprint_chunks 表:
    • id (主键), video_id (外键), project_id (索引), user_id (索引)
    • start_time_ms (int, 分片起始时间毫秒), end_time_ms (int, 分片结束时间毫秒)
    • phash_binary (String 64位十六进制), color_histogram (JSON, 32bins×3通道)
    • frame_count (int), created_at
  2. 分片策略:短视频(≤60s)每2秒一片,长视频每5秒一片
  3. 改造 compute_fingerprint() 在计算指纹时同步存储分片数据
  4. 更新 GeneratedVideo 实体和 Repository,支持分片查询
  5. 存量指纹重建脚本:遍历所有已有视频的指纹,用新算法重新计算并存入分片表。部署后在 staging 先跑一遍验证,再在生产执行

技术债务约束(铁律)

  • 存量重建脚本必须随本 Issue 一起交付,不允许遗留旧格式数据
  • 新代码必须有单元测试覆盖
  • API 向后兼容:旧的 is_duplicate 布尔字段保留不删,新字段是扩展不是替换
  • 旧查重逻辑代码改造完成后直接替换,不留 if/else 分支兼容新旧两套逻辑

优先级

P0 - 所有后续查重优化的基础

依赖

## 背景 当前查重系统"一个视频一个指纹",无法定位重复片段、无法计算查重率百分比。需要改为按时间分片存储。 ## 任务 1. 新建 alembic migration,创建 `video_fingerprint_chunks` 表: - `id` (主键), `video_id` (外键), `project_id` (索引), `user_id` (索引) - `start_time_ms` (int, 分片起始时间毫秒), `end_time_ms` (int, 分片结束时间毫秒) - `phash_binary` (String 64位十六进制), `color_histogram` (JSON, 32bins×3通道) - `frame_count` (int), `created_at` 2. 分片策略:短视频(≤60s)每2秒一片,长视频每5秒一片 3. 改造 `compute_fingerprint()` 在计算指纹时同步存储分片数据 4. 更新 `GeneratedVideo` 实体和 Repository,支持分片查询 5. **存量指纹重建脚本**:遍历所有已有视频的指纹,用新算法重新计算并存入分片表。部署后在 staging 先跑一遍验证,再在生产执行 ## 技术债务约束(铁律) - 存量重建脚本必须随本 Issue 一起交付,不允许遗留旧格式数据 - 新代码必须有单元测试覆盖 - API 向后兼容:旧的 `is_duplicate` 布尔字段保留不删,新字段是扩展不是替换 - 旧查重逻辑代码改造完成后直接替换,不留 if/else 分支兼容新旧两套逻辑 ## 优先级 P0 - 所有后续查重优化的基础 ## 依赖 无
xiaoxia added this to the 技术债务与优化 milestone 2026-09-03 18:43:48 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1657