1. 11 Jul, 2026 1 commit
    • - 新增 MySQL 和 PostgreSQL 连接池类,支持按需创建和自动回收连接
      - 增加连接池全局实例及其获取函数,实现连接复用
      - 修改原有连接获取函数,改用连接池管理连接
      - 添加 refresh_conn 函数用于检测和刷新断开的连接
      - 在 runner 模块中批处理循环前调用 refresh_conn 保证长时间任务连接可用
      - 用 close_all_pools 统一关闭所有连接池连接,替代原单独关闭调用
      - 提升长期运行任务的数据库连接稳定性与效率
      沈秋雨 authored
  2. 10 Jul, 2026 8 commits
    • - 扩展 run_etl.py,添加 --init-yinyan-records2 参数支持初始化 yinyan_song_records2
      - 提升 BATCH_SIZE 从 100 到 1000,提升批处理效率
      - 实现 _NulSafePgConnection 及 _NulSafePgCursor,自动清理 PostgreSQL 参数中的 NUL 字符,防止插入错误
      - 新增查询接口 iter_hk_songs_records2_batches 和 fetch_all_song_record_relations,用于提取满足 records2 条件的歌曲关联数据
      - 在 runner.py 中实现 initialize_yinyan_song_records2,写入所有合格歌曲关系并统一去除 records1 已存在的重复关系
      - 在 writer.py 中新增 insert_yinyan_song_records2 和 delete_yinyan_song_records2_existing_relations 函数,实现批量插入和基于 records1 的重复关系删除
      - 新增单元测试覆盖 NUL 字符清理、records2 插入及去重逻辑,保障代码质量和功能稳定性
      沈秋雨 authored
    • 沈秋雨 authored
    • 沈秋雨 authored
    • - 修改路径顺序,将平台(platform)调整至类别(category)之后
      沈秋雨 authored
    • - 引入
      - 修改查询条件,将 platform_song_id 为空视为未导入状态
      - 在标记资源转存失败时,将 platform_song_id 设置为哨兵值 -1
      - 更新测试用例,验证 platform_song_id 字段的正确更新及查询条件调整
      - 删除旧的 resource_transfer_failed 字符串常量及相关引用
      沈秋雨 authored
    • - 在 run_etl.py 添加 backfill-qq-invalid-covers 命令行选项
      - 配置文件中新增 HTTP_TRANSFER_RETRIES 和 RETRY_BACKOFF_SECONDS
      - oss.py 中实现下载资源的重试逻辑,避免超时和连接断开失败
      - runner.py 中引入资源必要性校验,确保音频、封面、歌词均成功转存
      - 实现根据歌词和封面有效性选择更合适的QQ录音记录进行替换
      - 实现 backfill_qq_invalid_covers 函数,处理无专辑占位封面的QQ歌曲
      - 无候选的QQ歌曲在crawler和yinyan记录中删除,并软删除 HK 歌曲
      - 资源转存失败的记录在yinyan_song_records标记,避免重复处理
      - run函数中增加对QQ、酷狗、网易备选录音的支持和筛选
      - 增加对应的数据库操作函数支持替换、删除以及状态标记
      - 测试覆盖下载重试、资源转存失败处理及选择替代录音逻辑
      - 所有下载失败均返回空URL,不阻断流程以保证稳定性
      - 异常处理增强,确保未成功上传资源的歌曲不入库
      - 未匹配到HK歌曲的情况增加日志警告及延迟重试机制
      沈秋雨 authored
    • - run_etl.py中新增--backfill-empty-singers参数支持回填操作
      - runner.py新增backfill_empty_singers主流程函数及qq、酷狗、网易分平台回填实现
      - writer.py新增查询缺失singers的歌曲及更新singers字段的数据库操作函数
      - 回填过程中处理歌手头像的转存及歌手与歌曲关联关系的维护
      - 支持批量分批次处理,避免长时间阻塞与重复无效查询
      - 完整回填流程整合蜘蛛库和pg库连接资源管理,并日志记录处理结果
      沈秋雨 authored
    • - 新增HTTP连接池配置,提升请求性能和资源复用
      - 使用requests Session统一管理HTTP连接,减少请求开销
      - 实现_url清洗函数,过滤无效或非法URL
      - 并行执行音频、封面、歌词及歌手头像的OSS转存任务,提升效率
      - 按平台统一构建导入数据payload,简化处理流程
      - 批量写入歌曲、歌手、专辑及关联关系,提升数据库操作性能
      - 替换原平台单独处理函数为统一预处理及写入方法
      - 取消原单线程顺序处理,改为线程池并发执行数据准备和导入
      - 获取平台歌曲及歌手信息支持传入缓存参数,减少重复查询
      - 优化异常处理及日志记录,提高稳定性和可维护性
      - 新增歌手索引和性别等字段辅助函数,完善歌手信息处理
      沈秋雨 authored
  3. 09 Jul, 2026 14 commits
    • - 将批量查询录音数从1000调整为100,适配具体需求
      - 新增按录音id批量查询录音函数,避免按歌曲id查询全部平台数据
      - 修改runner流程中以录音id批量预取录音数据,减少重复查询
      - 增加spider数据批量预取,避免逐条调用造成性能瓶颈
      - 优化写入yinyan_song_records时采用批量更新语句,提高更新效率
      - 新增测试覆盖fetch_platform_records_by_record_ids函数的查询准确性
      - 调整测试用例以适配新增的批量查询函数及写入逻辑
      沈秋雨 authored
    • - 配置新增公共访问及下载重写基础URL变量,支持下载地址重写
      - oss模块新增内部下载地址重写函数,改进下载时的URL处理逻辑
      - transfer_url函数判断是否为目标OSS桶URL,避免重复上传
      - runner模块改为仅处理待推送yinyan_song_records对应的单条录音
      - 精简runner中对录音记录的查询与处理逻辑,提升性能及正确性
      - writer模块fetch_pending_yinyan_song_records增加platform字段过滤
      - 新增单元测试覆盖OSS下载地址重写和runner的录音导入逻辑调整
      沈秋雨 authored
    • - 将默认批处理大小 BATCH_SIZE 从 1 增大到 1000 提高效率
      - 添加 BACKFILL_BATCH_SIZE 环境变量支持,默认为 5000 用于补数据批量控制
      - 使用 SQL 的 VALUES 语法替换 executemany 实现批量更新 yinyan_song_records 平台字段
      - 修改 runner 中补数据查询改用 BACKFILL_BATCH_SIZE 以提升性能
      - 更新相关单元测试以适配新的批量更新 SQL 语句和参数格式
      沈秋雨 authored
    • - 将BATCH_SIZE由4调整为1以支持更细粒度的数据处理
      - 在runner中为QQ音乐歌曲构建完整album_json对象并序列化
      - 修改upsert_qq_songs接口,新增album_json参数的传递和入库支持
      - 在writer模块SQL插入语句中添加album字段,支持json类型数据写入
      - 编写单元测试验证album_json字段正确生成与写入逻辑
      - 兼容旧逻辑,album_json字段为空时不影响其他数据写入
      沈秋雨 authored
    • - 在 ETL 入口增加 --backfill-yinyan-platforms 参数,支持回填缺失平台代码
      - 实现回填函数 backfill_yinyan_record_platforms,批量更新 platform 为空的记录
      - fetch_all_platform_records 支持获取所有录音供歌手数据缺失的回退使用
      - 通过 _pick_record_with_singer 函数优先选取有歌手数据的录音
      - 初始化函数跳过已存在 song_id 的批次,避免重复处理
      - yinyan_song_records 插入时允许更新 platform 字段,平台数据更完整
      - upsert_yinyan_song_records 增加 record_id 更新支持,修正推送逻辑
      - 所有平台歌曲标题拆分版本号存储 version 字段,支持特殊版本标记
      - 在各平台封面缺失时使用歌曲封面回退,保证封面不为空
      - spider 模块新增 probe_*_has_singers 函数校验录音是否有关联歌手
      - writer 模块完善更新平台代码的操作及相关查询辅助函数
      - utils 新增 split_title_version 助手,提取括号中版本信息
      - upload_plain_lyric_to_bucket 上传时添加内容类型头,避免文本编码问题
      - 测试覆盖添加回填功能及版本号拆分相关逻辑,提高稳定性维护性
      沈秋雨 authored
    • - 在runner.py中将platform字段添加至初始数据字典
      - 在writer.py中修改SQL语句以插入platform信息
      - 更新批量插入参数,包含platform字段
      - 保持原有冲突处理逻辑不变,防止重复插入
      沈秋雨 authored
    • - 移除 audit_hk_songs_duplicates.py 中删除零时长歌曲的逻辑
      - 新增 utils.py 工具模块,提供音频 MD5 计算、歌词处理、OSS 上传等函数
      - etl_to_crawler/oss.py 添加 transfer_url_with_md5 函数,用于下载音频、计算 MD5 并上传 OSS
      - etl_to_crawler/lyric.py 增加 ensure_newlines 函数,确保歌词内容行间带换行符
      - etl_to_crawler/runner.py 改进音频转存调用,返回音频 MD5 值
      - 通过 safe_upload_lyric 函数上传去时间戳的纯文本歌词,失败时使用原始歌词 URL
      - etl_to_crawler/writer.py 在歌曲数据写入中新增 audio_md5 字段支持
      - 重构 yinyan_song_records 逻辑,新增初始化函数 initialize_yinyan_song_records
      - run_etl.py 增加 --init-yinyan-records 命令行参数支持仅初始化状态表
      - 优化 ETL 运行流程,从预标记状态表中拉取待处理歌曲逐批处理,提高效率
      - 新增相关单元测试以覆盖音频 MD5 计算和任务处理逻辑修改
      沈秋雨 authored
    • - 替换所有歌手、专辑和歌曲的 provider_name 常量为 PROVIDER_YINYAN
      - 增加 crawler_source_data 字段传递原始采集数据 JSON
      - 更新 upsert 函数,支持写入 provider_name 和 crawler_source_data 字段
      - 修改数据库写入 SQL,新增 provider_name 和 crawler_source_data 两列
      - 添加相关单元测试,验证 provider_name 和 crawler_source_data 是否正确写入
      - 统一整合 QQ、酷狗、网易等平台数据结构,增强数据来源追踪能力
      沈秋雨 authored
    • - 新增 PROVIDER_KUGOU 常量用于标识数据提供者
      - 增加 _source_json 方法以支持复杂数据的JSON序列化
      - 在处理酷狗歌手数据时添加provider_name和crawler_source_data字段
      - 在处理酷狗专辑和歌曲数据时添加对应的provider_name和crawler_source_data字段
      - netease歌曲数据处理新增album_json字段以存储专辑数据的JSON表示
      - 写入数据库时酷狗歌手、专辑、歌曲表增加provider_name和crawler_source_data列及其对应数据
      - 网易歌曲写入增加album_json字段支持
      - 新增单元测试覆盖酷狗及网易歌曲处理与数据库写入的新增字段和逻辑
      沈秋雨 authored
    • 沈秋雨 authored
    • 沈秋雨 authored
    • - run_etl.py中新增resume相关参数支持断点续传和手动起始位置
      - reader.py中修改iter_hk_songs_batches函数,改用id游标替代offset分页
      - runner.py新增断点状态文件管理功能,支持状态读写与断点继续
      - run函数接受断点续传参数并根据状态文件恢复进度
      - 处理每批次导入成功后保存断点状态,确保可中断恢复
      - 新增单元测试覆盖断点续传逻辑,验证正确使用start_after_id参数
      - 调整接口参数传递与兼容性,保持向后兼容性和灵活性
      沈秋雨 authored
    • - 调整批处理大小为3以适应新需求
      - 扩展fetch_platform_records查询字段,增加录音优先级排序机制
      - 新增select_primary_record方法以选出最优录音记录
      - 修改runner确保每首歌只写入一个主要引擎录音关联
      - 新增upsert_yinyan_song_records接口,实现引擎歌曲记录的批量写入和替换
      - 添加对应单元测试覆盖录音选择逻辑和写入功能
      沈秋雨 authored
  4. 08 Jul, 2026 13 commits
  5. 07 Jul, 2026 1 commit
    • - 新增 audit_hk_songs_duplicates.py,支持基于name、lyricist和composer字段检测重复数据
      - 支持生成重复组和重复详情的SQL查询语句
      - 实现重复数据的合并计划生成及软删除重复记录功能
      - 支持修复暂存表中merge跳过的记录,实现existing_into_new和new_into_existing的合并处理
      - 增加命令行参数,支持输出CSV、应用合并和修复合并方向处理
      
      feat(backfill): 增量补全bpm_class字段脚本
      
      - 新增 backfill_bpm_class.py,从源库获取录音BPM并映射为bpm_class分类
      - 支持指定目标表和每批处理条数,支持dry-run模式仅打印计划
      - 采用主版本优先策略查询录音BPM数据,跳过无效或异常BPM
      
      fix(import): 优化歌词处理和缓存逻辑
      
      - 判断歌词文本是否实质为空,避免无效歌词上传OSS
      - 修正合并逻辑中merge_direction对staging状态和导入ID的设置
      - 扩展原声正则匹配规则,增加用户创作原声匹配
      - 新增构建歌词缓存项和追加写入缓存函数,减少重复下载
      - 调整load_existing_l2_candidates增加seen_keys参数避免重复缓存加载
      沈秋雨 authored
  6. 06 Jul, 2026 3 commits
    • - 修改 sync_inserted_lyrics_cache 函数,新增 seen_keys 参数用于跳过已存在歌词缓存
      - 实现追加写入方式,同步新增歌词缓存时不再全量读取,提升性能
      - 在主逻辑中初始化并传递 lyrics_cache_seen_keys,避免重复写入缓存
      - 更新测试用例,增加追加写入场景覆盖,防止误读缓存文件读取操作
      - 修正缓存文件路径统一使用 lyrics_cache_path,增强代码一致性
      沈秋雨 authored
    • - 抽取歌词缓存读取和写入为独立函数 _read_existing_lyrics_cache 与 _write_existing_lyrics_cache
      - load_existing_l2_candidates 中改用新缓存读写函数,增加缓存加载日志和进度输出
      - 处理下载异常时保证已下载缓存的歌词及时持久化,避免丢失数据
      - 新增 sync_inserted_lyrics_cache 函数实现新增歌词缓存同步写入功能
      - 后台写入线程写入数据库后调用歌词缓存同步,记录新增条数日志
      - 修改批量写入队列数据结构,传递缓存同步相关数据
      - 优化去重统计日志显示格式,新增 format_dedup_stats 函数统一格式化
      - L2审核界面新增 skip 筛选选项,调整相关前端和后端代码支持该状态
      - 移除 L2 审核界面中保存按钮,避免误操作手动保存
      - 补充单元测试覆盖缓存同步、缓存读取异常处理和去重统计日志格式输出
      沈秋雨 authored
    • - 新增 L2 候选加载缓存机制,避免重复下载歌词内容
      - L2 去重返回 top-K 召回候选信息,丰富判定依据
      - 分类函数新增跳过导入的规则,如空歌词且作者不详、原声类歌曲名等
      - 实现作者字段(作词、作曲)增量合并功能,避免重复覆盖
      - 对合并冲突添加异常处理并记录日志,确保稳定执行
      - 引入后台线程异步写入数据库,提升批量处理性能
      - 优化 L1 索引更新,避免去重误差,提高去重准确率
      - 扩展统计字段,新增作者合并和跳过导入计数
      - 前端增加决策过滤选项,支持根据决策筛选展示记录
      - 修改界面显示逻辑,支持删除已审核样本,完善用户操作
      - 调整页面显示候选数目为 Top5,优化视觉体验
      - 参数新增 L2 精确哈希自动合并的最小歌词长度配置
      - 添加数据库表结构自动迁移,新增 recalled_candidates 字段支持新功能
      - 增强程序中断时数据库写入的安全关闭与日志提示
      沈秋雨 authored