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

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

时间:2023-03-08 11:22:19浏览次数:34  
标签:缓存 扣减 数据库 写入 顺序 性能

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

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

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

顺序写的性能更好

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

借力顺序写的架构

 

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

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

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

 

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

 

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

 

标签:缓存,扣减,数据库,写入,顺序,性能
From: https://www.cnblogs.com/jiaozg/p/17191344.html

相关文章

  • 数据库实现并发扣减
    读业务的特点是写少读多扣减类业务的定义,我把关于扣减的实现,需要关注的技术点总结如下:当前剩余的数量需要大于等于当次需要扣减的数量,即不允许超卖;对同一个数据的数......
  • (数据库系统概论|王珊)第十章数据库恢复技术:习题
    pdf下载:密码7281专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解目录名词解释简答题应用题名词解释事务:是......
  • 配运基础数据缓存瘦身实践
    作者:京东物流 张仲良一、背景:在现代物流的实际作业流程中,会有大量关系到运营相关信息的数据产生,如商家,车队,站点,分拣中心,客户等等相关的信息数据,这些数据直接支撑齐了物......
  • 《数据库基础语法》1. 在SQL的世界里一切都是关系
    楔子SQL是每个开发人员都应该掌握的,很多人可能觉得SQL没啥大不了的,但是说真的,SQL要是写好了,是很厉害的。下面我们来从零开始学习SQL。基本概念正如Linux中一切皆文......
  • 《数据库基础语法》6. 日期和时间的存储与格式转换
    楔子上次我们介绍了SQL中常见的字符函数,学习了如何对文本数据进行连接、大小写转换、子串的查找和替换等处理。下面我们继续讨论常见的日期和时间函数,以及不同数据类型......
  • 《数据库基础语法》5. 什么是函数?如何利用函数提高效率
    楔子SQL语句主要的功能就是对数据进行处理和分析。为了避免重复造轮子,提高数据处理的效率,SQL为我们提供了许多标准的功能模块:函数(Function)。SQL函数是一种具有某种功......
  • 连上mysql数据库了,先小发表一下
    首先我的mysql是8.0版本的,用的8版本的驱动包就连接失败找不到类,后来换成5版本的就好了。一开始我按照网上的教程,告诉我需要在子线程才能执行jdbc的连接,代码如下所示:r......
  • 关系型数据库特点
    1)数据集中控制。在文件管理方法中,文件是分散的,每个用户或每种处理都有各自的文件,这些文件之间一般是没有联系的,因此,不能按照统一的方法来控制、维护和管理。而数据库则很好......
  • 缓存算法介绍
    缓存算法(页面置换算法)之LRU算法LRU进阶之LRU-K和2Q缓存淘汰算法(LFU、LRU、ARC、FIFO、2Q)分析LRU(LeastRecentlyUsed)算法思想每次内存溢出时,把最长时间未被访......
  • 【Azure Redis 缓存】使用StackExchange.Redis,偶发ERROR - Timeout performing HSET
    问题描述使用StackExchange.Redis作为Redis客户端SDK,连接AzureRedis服务,长期运行后发现,每天都偶发TimeoutError。错误消息如下: StackExchange.Redis.RedisTimeou......