呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
#优质博文 #数据库 #系统架构 #后端 #运维
探讨了传统“软删除”模式(如 archived_at 列)带来的长期复杂性,并对比分析了触发器、应用层事件和 WAL 等更优的替代方案。
对于新项目,作者优先推荐基于触发器的方案,因为它部署简单、不引入额外基建,且有效隔离了活跃数据与归档数据。
The challenges of soft delete
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
author Atlas9
探讨了传统“软删除”模式(如 archived_at 列)带来的长期复杂性,并对比分析了触发器、应用层事件和 WAL 等更优的替代方案。
对于新项目,作者优先推荐基于触发器的方案,因为它部署简单、不引入额外基建,且有效隔离了活跃数据与归档数据。
The challenges of soft delete
AI 摘要:本文深入分析了在数据库中直接使用 archived_at 字段实现软删除(Soft Delete)的弊端,指出这种做法会导致数据膨胀、索引效率下降、查询逻辑复杂化以及数据迁移困难等问题。作者对比了三种替代方案:应用层异步归档、数据库触发器(Triggers)记录 JSON 快照以及基于 WAL 的变更数据捕获(CDC)。作者认为,对于大多数新项目,使用触发器将删除的数据转移至独立的归档表是平衡简洁性与实用性的最佳选择。
[以下是方便搜索索引的大纲 (AI 生成),请读原文]
1. 传统软删除模式的弊端
• 数据膨胀与性能损耗:99% 的已删除数据永不被读取,却占用了昂贵的存储,导致数据库备份与恢复耗时剧增。
• 查询与索引复杂化:应用代码必须在每个查询中过滤已删除记录,索引也需要额外关注这些“死数据”,增加了误读风险。
• 数据迁移(Migration)难题:旧的归档数据可能不符合新的 Schema 约束或校验规则,导致数据库迁移变得棘手。
• 恢复逻辑不一致:恢复记录往往不只是修改一个状态位,还可能涉及外部系统调用,重复编写创建逻辑容易滋生 Bug。
2. 替代方案一:应用层归档 (Application Level Archiving)
• 机制与优势:在删除记录时发送事件(Event)到消息队列(如 SQS),由另一个服务将其序列化为 JSON 并存储至 S3 等对象存储中。
• 优点:主库结构保持纯净,处理异步化提高性能。
• 缺点:增加了基础设施复杂度,且 S3 中的归档数据难以直接通过 SQL 查询进行检索
3. 替代方案二:数据库触发器 (Triggers)
• 实现方式:利用 PostgreSQL 触发器在执行 DELETE 前,将行数据转换为 JSONB 格式并插入一个通用的 archive 归档表。
• 级联删除处理:通过会话变量(Session Variable)追踪根源,记录级联删除(Cascade Delete)是由哪个父表操作引起的。
• 优势:兼具性能与灵活性,主表无冗余数据,归档表易于清理(例如清理 90 天前的数据)且仍然支持 SQL 查询。
4. 替代方案三:基于 WAL 的变更数据捕获 (CDC)
• 技术栈:利用 Debezium、Kafka 或 pgstream 等工具读取 PostgreSQL 的预写日志(WAL),过滤删除事件并流转至外部存储。
• 优势:对主库性能几乎零影响,无需修改业务逻辑或添加触发器。
• 运维挑战:需要维护复杂的 Kafka 集群;需警惕 WAL 积压(Lag)导致主库磁盘写满,需合理配置 max_slot_wal_keep_size。
author Atlas9
#优质博文 #新动态 #后端 #数据库 #ORM #Prisma #AI
Vibe Coding 给 Prisma 都整的加了个安全护栏了(草
太体贴了哥(
Release 6.15.0 · prisma/prisma
Vibe Coding 给 Prisma 都整的加了个安全护栏了(草
太体贴了哥(
Release 6.15.0 · prisma/prisma
AI 摘要:本次版本聚焦稳定性与平台适配:为可能由 AI 代理触发的破坏性命令加入安全确认护栏;统一 prisma-client 运行时选项并允许无模型 schema 生成客户端;提供与 Vercel Fluid 的连接池托管方案;宣布 Prisma Postgres Management API 达到 GA 并接入 Pipedream;为 npx create-db 新增 --json 输出;强化 Prisma Postgres 直连能力,接近 GA,同时继续提供企业级支持服务。
1. 亮点
• AI 安全护栏:CLI 识别常见 AI 代理(如 Claude Code、Gemini CLI、Qwen Code、Cursor、Aider、Replit),对 prisma migrate reset --force 等破坏性操作要求显式确认,避免 AI 自动执行不可逆数据库重建。文档
• prisma-client 运行时与 schema 灵活性:
• 运行时输入统一:node 移除改用 runtime = "nodejs";deno-deploy 移除改用 runtime = "deno";vercel 替换为 runtime = "vercel-edge";edge-light 作为 vercel-edge 的别名。
• nodejs、deno、bun 共用内部代码路径但保留独立输入值;VS Code 扩展已同步更新。
• 支持的运行时为:nodejs、deno、bun、workerd(alias cloudflare)、vercel-edge(alias edge-light)、react-native。
• 生成阶段改进:即使 schema 无模型也可用新生成器 prisma-client 成功生成客户端(与旧 prisma-client-js 一致)。文档
• 与 Vercel Fluid 协作:为解决无服务器挂起导致的连接泄漏,结合 Vercel attachDatabasePool 与 Prisma driver adapters,挂起前释放空闲连接,防止耗尽连接池;提供 pg + PrismaPg 的示例用法。Vercel 介绍 · 部署文档