Loading......

朋友圈

朋友们的最新动态

12 Updates
lcrworld's blog 头像
lcrworld's blog

从邮件里捞回丢失的评论:SQLite WAL 备份踩坑全记录

2026 年 7 月 9 日 · 数据恢复纪实 评论丢了 上一篇文章讲到 git reset --hard 覆盖了 WAL 文件导致数据库清空,靠凌晨 3 点的自动备份恢复了 45 篇文章和 167 条动态。当时以为数据全部救回来了。 直到有人反馈:「昨天晚上的一些评论没了」 一查数据库,评论表最大 ID 是 311,最后一条停在 7 月 8 日上午 11:21。但 nginx 访问日志清楚地记录着——7 月 8 日下午到晚上,还有 10 条评论 POST 请求。 也就是说,311 号到 320 号之间的 9 条评论,在备份里就不存在。备份本身就不完整。 为什么备份没有这些评论? 答案藏在 SQLite 的 WAL 模式里。 WAL 模式的工作原理 SQLite 的 WAL(Write-Ahead Logging)模式下,写入操作不会直接写主数据库文件,而是先写到 blog.db-wal 日志文件中。只有当日志文件达到一定大小(默认 1000 页 ≈ 4MB),或手动执行 PRAGMA wal_checkpoint 时,数据才会合并(checkpoint)到主库 blog.db。 写入

link-l9gzhh92
lcrworld's blog 头像
lcrworld's blog

一条 git reset --hard,我的数据库空了!

2026 年 7 月 9 日 · 一次惊心动魄的线上事故 事故发生 今天凌晨在检查博客的 RSS 订阅功能时,顺手测了一下 API,结果看到了令人血压飙升的一幕: // GET /api/articles?page=1&limit=2 {"rows":[],"total":0,"page":1,"limit":2} // GET /api/moments?limit=2 {"rows":[],"total":0,"page":"2","totalPages":0} 所有数据都没了。 文章、动态、评论——全部返回空数组。赶紧登上服务器查数据库: $ node -e "import Database from 'better-sqlite3'; const db = new Database('data/blog.db', { readonly: true }); console.log('articles:', db.prepare('SELECT COUNT(*) as c FROM articles').get().c); console.log('moments:', db.pr

link-l9gzhh92
meytao 头像
meytao

FastAPI系列-20-ORM总结

本系列终章以借书和还书操作为例,阐述跨表事务的原子性是如何成为数据层闭环的最后拼图。借书须在同一个异步会话内,将图书状态改为“借出”并新增借阅记录,通过一次 `await db.commit()` 提交,避免图书被标记借出却缺失记录的不一致状态;还书同样需原子性地填充归还时间并复位图书状态。文章定义了 `Borrow` 模型与借还 DAO 事务实现,并点明高并发下需用 `SELECT FOR UPDATE` 行锁、时间字段统一使用 UTC 及软删除过滤等避坑要点。全文回顾了异步栈下四条一致规律:DAO 函数皆为 `async def`、Engine 应用级单例、Session 请求级作用域、事务边界显式控制,并将第 03 章至第 19 章的 CRUD 主干与跨表事务收束为完整的数据层闭环。

link-aepan49i
meytao 头像
meytao

FastAPI系列-19-数据操作之删除

本文阐述在图书管理API中采用软删除方案,将删除操作转换为UPDATE语句,在deleted_at列写入UTC时间戳而非物理删除,以实现数据可逆恢复与审计完整。所有面向用户的查询必须在DAO层统一附加deleted_at IS NULL过滤,确保已删除行对业务透明,避免幽灵数据。删除时使用SQLAlchemy Core的update,根据rowcount判断资源是否存在或已被删除,统一抛出NotFoundError并返回404。为提升性能,建立(deleted_at,id)复合索引,使未删除记录的过滤与排序均能高效利用索引。此外,特别强调了应用层生成时间戳的语义优势、全局查询过滤的一致性,以及唯一索引冲突和定期清理墓碑行等注意事项。

link-aepan49i
lcrworld's blog 头像
lcrworld's blog

博客 V2.0 正式发布:我给这个小破站做了一次大手术

写在前面 可以打开v1博客对照食用,效果更佳哦 博客上线两个月了。V1 版本就是个能跑的毛坯房——文章能发、评论能写、页面能看,仅此而已。作为一个对细节有执念的人,我实在受不了那些粗糙的地方,于是花了一个半月做了次全面升级。 这篇文章聊聊 V2 版本到底多了些什么。文中一些功能加了「立即体验」链接,读完了可以直接去试试。 V2 都更新了啥? AI 智能助手——评论 @lcr 召唤 AI 回复,文章自动生成智能摘要 全站灯箱系统——图片视频统一查看器,双指缩放、缩略图导航、下载 评论邮件通知——有人回复你的评论会发邮件,多条合并 RSS 订阅 + 邮件订阅——两种方式追踪博客更新 暗色模式——全站适配,一键切换 媒体库全面重做——相册系统 + 精选页面 + 入场动画 管理后台数据大盘——访客数据、设备分析、最近访客详情 页面性能优化——首屏加载速度大幅提升,返回不重新加载 友人帐全面美化——粒子背景、3D 磁吸、弹簧动画 怀旧版博客——交互式预览旧版博客 朋友圈实验页面——仿微信朋友圈九宫格动态 文章置顶轮播——首页置顶文章卡片轮播展示 代码块一键复制——hover 显示复制按钮 阅读进

link-l9gzhh92