IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:事务管理

共 2 篇相关文章

IT 累计浏览 9,155

一个典型支付系统的设计与实现

作者从实际业务需求出发,分享了一个在两周内从零实现的小型支付系统的设计与实践。文章坦言,网上的支付系统资料多偏重理论研究,因此作者将这套“麻雀虽小,五脏俱全”的系统完整地呈现出来,它既能作为轻量级支付系统使用,也适合作为第三方应用接入时的支付流水层。 系统的核心在于一个清晰务实的数据库设计。作者详细列出了包括账户状态、余额、流水、价格和应用锁在内的六张关键表结构,并解释了每张表字段的设计意图,比如用bigint存储分单位的金额以避免浮点数精度问题,以及利用seqid序列号来应对并发。 实现上,文章重点剖析了支付操作和账户锁定两个典型场景。支付流程被拆解为发起方与系统内部的两层逻辑,并附有清晰的流程图。系统采用了“先写入流水,再更新账户”的稳健策略以最大限度保证数据不丢失。同时,针对不同类型的返回码(如逻辑错误与系统错误),给出了明确的流水记录建议。账户锁定则直接利用了数据库的行级锁机制。整个系统设计紧扣事务性保证与对账等核心需求,是一次对小型支付系统关键模块的完整实践复盘。

IT 累计浏览 3,639

Oracle In-memory Undo运作原理

这篇文章讲的是Oracle中undo机制的演进,特别是从传统undo到In-Memory UNDO(IMU)特性的核心原理与差异。 传统undo通过回滚段管理,其信息必须先读入缓冲区并产生redo,这带来了IO和日志写入开销。IMU的巧妙之处在于,它直接在shared pool中为每个事务分配私有的内存空间作为undo buffer,这使得一致性读操作可以在内存中高效完成,而无需频繁访问磁盘上的undo块。 文章关键点在于澄清了一个常见误解:IMU模式下,undo信息依然会被写入redo log以确保崩溃恢复,但写入时机和方式发生了变化。它允许undo信息在内存中停留更久,并采用批量合并的方式写入,显著减少了redo的产生量。同时,IMU与10g引入的private redo strands特性协同工作,进一步提升了事务处理的并发性能。 作者通过专利文献、性能专著及个人实验,剖析了这个相对隐蔽的特性。值得注意的是,IMU在RAC等复杂环境下可能被自动禁用,了解其适用边界对优化数据库性能很有帮助。