缓存+数据库构建高可靠的扣减方案

数据库和纯缓存实现的扣减方案

  • 数据库方案的性能较差;

  • 纯缓存方案虽不会导致超卖,但因缓存不具备事务特性,极端情况下会存在缓存里的数据无法回滚,导致出现少卖的情况。

顺序写的性能更好

在向磁盘进行数据操作时,向文件末尾不断追加写入的性能要远大于随机修改的性能。数据库同样是插入要比更新的性能好。

借力顺序写的架构

 

 写入数据库不是异步写入,而是在扣减的时候同步写入。

insert 的数据库称为任务库,它只存储每次扣减的原始数据,而不做真实扣减(即不进行 update)

利用了数据库顺序写入要比更新性能快的这一特性。此外,在写入的基础之上,又利用了数据库的事务特性来保证数据的最终一致性。当异常出现后,通过事务进行回滚,来保证数据库里的数据不会丢失。

 

通过无状态的存储提升可用性。同样的逻辑,任务库主要提供两个作用,一个是事务支持,其次是随机的扣减流水任务的存取。

 

 “顺序追加写要比随机修改的性能好”这个技巧,其实在很多场景里都有应用,是一个值得你深入学习和理解的技能。比如数据库的 Redo log、Undo log;Elasticsearch 里的 Translog 都是先将数据按非结构化的方式顺序写入日志文件里,再进行正常的变更。当出现宕机后,采用日志进行数据恢复。

 

posted @ 2023-03-08 11:14  jiaozg  阅读(39)  评论(0)    收藏  举报