Skip to content

PR审查 #344

Description

@phantom5099

#343

结论

会有压力,而且在你这个会话场景里通常不划算把图片二进制直接塞进 SQLite 主库。你们这次 PR 采用的“附件落盘 + SQLite 存元数据”是更稳妥的默认方案。

对比(结合当前 PR)

  1. 图片直接存 SQLite(BLOB)
  • 优点:事务一致性最好(消息与图片可同事务提交)、备份恢复单文件简单、路径管理更少。
  • 缺点:session.db 体积增长快,WAL/Checkpoint 开销上升;大对象读写会拉高锁等待与 I/O 峰值;VACUUM/备份/同步变慢;热点查询更容易被大页读拖慢。
  1. 图片存本地目录,SQLite 只存路径/元数据(你们当前方案)
  • 优点:数据库保持轻量,消息增量写入更稳定;大文件 I/O 与结构化查询解耦;列表、摘要、分页查询性能更可控。
  • 缺点:需要处理“DB 记录与文件”双写一致性(孤儿文件/悬挂记录)、搬迁与备份要同时覆盖 DB+assets、路径安全与清理策略要做好。

建议

  • 对 NeoCode 这种“文本消息高频 + 图片附件低频且可能偏大”的负载,优先保持现在方案。
  • 若后续要进一步增强可靠性,可加三件事:
  1. 启动时或定时做 session_assets 与磁盘文件对账修复。
  2. 明确原子写流程(先临时文件再 rename,再写元数据;失败回滚清理)。
  3. 备份/迁移工具强制打包 session.db + assets/,避免只备份其一。

本次完成情况

  • 已完成:问题分析与两种方案优劣对比,并给出针对本 PR 的落地建议。
  • 未执行:未做代码改动、未新增测试(本次是分析答复)。

View job run

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions