图数据库并发控制与批量更新
图库的并发模型和关系型库并不一样:锁粒度落在节点与关系上,遍历语义放大了写写冲突的概率。本文讲清 MVCC 与锁的协作、隔离级别与幻读、图上的死锁成因与规避顺序、乐观重试与显式锁的取舍、UNWIND 批量 upsert 的批大小与事务边界、集群下 leader 写 follower 读的书签一致性,以及幂等批量更新的完整实现与监控指标。
tag
图库的并发模型和关系型库并不一样:锁粒度落在节点与关系上,遍历语义放大了写写冲突的概率。本文讲清 MVCC 与锁的协作、隔离级别与幻读、图上的死锁成因与规避顺序、乐观重试与显式锁的取舍、UNWIND 批量 upsert 的批大小与事务边界、集群下 leader 写 follower 读的书签一致性,以及幂等批量更新的完整实现与监控指标。
上一节讲了 database/sql 的原语,本节把它们组装成 TaskAPI 的仓储层。实现增删改查五个方法,用 LastInsertId 取自增 ID、用 RowsAffected 判断记录是否存在、把 ErrNoRows 翻译成领域错误,并用 BeginTx/Commit/Rollback 与 defer Rollback 惯用法保证多步写入的原子性。
讲清 Hibernate 的 flush 究竟在什么时候发生:提交前、查询前与显式 flush 三条路径,FlushMode 各取值的语义,@Transactional(readOnly=true) 在 Hibernate 层真正改了什么,以及 IDENTITY 主键为何导致立即插入。
系统讲解 psql 与 mysql 客户端的批处理用法:连接参数安全传递、事务与错误处理、批量导出导入、慢查询与锁排查,以及幂等迁移脚本的工程化实践。
讲清 @Transactional 的边界为什么该画在 Service 而不是 Controller 或 Repository,自调用与 private 方法失效的代理原理,只读事务与超时的真实作用,事务内做远程调用的危害,TransactionTemplate 的适用场景,以及 REQUIRES_NEW 与 NESTED 在 JPA 下的语义差异。
分析 Redis 网络 RTT 开销与 pipeline 原理与实现,对比 MULTI/EXEC 事务与 WATCH 乐观锁、pipeline 与事务的差异、批量写优化案例、Lua 脚本对比以及最佳实践与注意事项。
从死锁成因与四大必要条件出发,详解 InnoDB 死锁检测机制、锁等待监控、死锁日志分析方法,并给出解除与预防死锁的工程化清单。
深入图数据库的存储与执行内核:无索引邻接(index-free adjacency)为何让图查询快、节点/关系/属性在磁盘上的记录布局、遍历引擎与执行计划、标签与属性索引、属性存储与压缩、内存图 vs 磁盘图、事务写入与 WAL、从 Cypher 到物理计划的流水线,以及 Neo4j / JanusGraph / NebulaGraph 的存储引擎对比,帮助理解图数据库快在哪里、瓶颈在哪里。
系统对比 Scala 三大数据库访问方案——Slick(函数式 ORM)、Doobie(纯 JDBC 效果型)、Quill(编译期 SQL DSL):连接管理、类型安全查询、事务、schema 迁移,覆盖 PostgreSQL/MySQL 实战。
系统覆盖 PHP 数据库访问:PDO 预处理与占位符陷阱、Eloquent vs Doctrine ORM 对比、事务与隔离级别、连接管理、MySQL 索引/EXPLAIN/慢查询治理、分页与大数据量、Laravel 迁移。
run 是一台状态机:queued → running → succeeded/failed/cancelled。本节用 UPDATE ... WHERE status='queued' RETURNING 的返回行数判断谁抢到执行权,真跑两个并发 worker 抢同一个 run,并演示「先 SELECT 再 UPDATE」为什么会把同一个任务跑两遍。
深度讲解 Go database/sql 标准库:连接池参数(SetMaxOpenConns/SetMaxIdleConns/SetConnMaxLifetime)、事务与隔离级别、预编译 Prepare、批量插入、NULL 处理、防注入、扫描空值,以及生产环境常踩的坑与排查。
事务开在哪一层、跨仓库的写操作怎么共享同一个事务,比「会不会写 BEGIN」难得多。本节在真实 Postgres 上复现 READ COMMITTED 的丢失更新,实测 FOR UPDATE 与乐观锁两种修法如何把 1100 修回 1200,复现 REPEATABLE READ 的 40001 与死锁 40P01 并给出重试策略,最后列出长事务、事务中发 HTTP 这类拖死连接池的坑。
系统讲解 Kafka 事务机制与 Exactly-Once 语义:幂等生产者原理、事务协调器与两阶段提交、read-process-write 端到端精确一次模式、事务消费与隔离级别、Outbox 模式集成、事务性能代价与适用场景
深入数据库原理核心:关系模型与 SQL、存储与页、B+ 树与 LSM 索引、事务 ACID、隔离级别与锁、WAL 日志恢复、查询优化执行计划、范式与反范式,构建理解任何数据库系统的基础框架。
Neo4j 生产级调优手册:ACID 事务模型与隔离级别、锁与死锁处理、标签/属性/关系类型的 Schema 设计、单属性/复合/全文/向量索引选型、EXPLAIN 与 PROFILE 执行计划逐运算符解读、page cache 与内存配置调优。
数据库事务的 ACID 四大特性实现机制,四种隔离级别与脏读、不可重复读、幻读三种并发异常现象的完整解析。
MongoDB 多文档事务: 开启事务、ACID 保证、隔离级别、会话管理与性能考量
使用 go-redis/v9 在 Go 中操作 Redis,覆盖连接池、Pipeline 批量操作、事务(WATCH/MULTI/EXEC)、Lua 脚本与完整缓存封装
使用官方 mongo-driver 在 Go 中操作 MongoDB,覆盖 CRUD、聚合、事务、Change Streams