#343
结论
会有压力,而且在你这个会话场景里通常不划算把图片二进制直接塞进 SQLite 主库。你们这次 PR 采用的“附件落盘 + SQLite 存元数据”是更稳妥的默认方案。
对比(结合当前 PR)
- 图片直接存 SQLite(BLOB)
- 优点:事务一致性最好(消息与图片可同事务提交)、备份恢复单文件简单、路径管理更少。
- 缺点:
session.db 体积增长快,WAL/Checkpoint 开销上升;大对象读写会拉高锁等待与 I/O 峰值;VACUUM/备份/同步变慢;热点查询更容易被大页读拖慢。
- 图片存本地目录,SQLite 只存路径/元数据(你们当前方案)
- 优点:数据库保持轻量,消息增量写入更稳定;大文件 I/O 与结构化查询解耦;列表、摘要、分页查询性能更可控。
- 缺点:需要处理“DB 记录与文件”双写一致性(孤儿文件/悬挂记录)、搬迁与备份要同时覆盖 DB+assets、路径安全与清理策略要做好。
建议
- 对 NeoCode 这种“文本消息高频 + 图片附件低频且可能偏大”的负载,优先保持现在方案。
- 若后续要进一步增强可靠性,可加三件事:
- 启动时或定时做
session_assets 与磁盘文件对账修复。
- 明确原子写流程(先临时文件再 rename,再写元数据;失败回滚清理)。
- 备份/迁移工具强制打包
session.db + assets/,避免只备份其一。
本次完成情况
- 已完成:问题分析与两种方案优劣对比,并给出针对本 PR 的落地建议。
- 未执行:未做代码改动、未新增测试(本次是分析答复)。
View job run
#343
结论
会有压力,而且在你这个会话场景里通常不划算把图片二进制直接塞进 SQLite 主库。你们这次 PR 采用的“附件落盘 + SQLite 存元数据”是更稳妥的默认方案。
对比(结合当前 PR)
session.db体积增长快,WAL/Checkpoint 开销上升;大对象读写会拉高锁等待与 I/O 峰值;VACUUM/备份/同步变慢;热点查询更容易被大页读拖慢。建议
session_assets与磁盘文件对账修复。session.db + assets/,避免只备份其一。本次完成情况
View job run