并发扣款一致性优化,CAS下ABA问题,这个话题还没聊完!!!
大家有非常多的留言,大概有这么几类:(1)是否存在ABA问题?(2)为什么不能用:UPDATEt_yueSETmoney=money-$diffANDmoney>=$diff;(3)能否借助redis事务来扣减余额;画外音:请务必阅读前序文章:《并发扣款,如何保证数据的一致性?》。问题比较多,
几千万记录,数据库表结构如何平滑变更?
继续回答知识星球水友提问。问题域:数据量大、并发量高场景,如何在流量低峰期,平滑实施表结构变更?画外音,一般来说,是指增加表的属性,因为:(1)如果是减column,升级程序不使用即可;(2)如果是修改column,程序兼容性容易出问题;首先,一起看下有哪些常见方案。方案一:在线修改表结构。画外音:
每秒20W次并发分词检索,架构如何设计?
继续回答星球水友提问。==沈哥,我们有个业务,类似于“标题分词检索”,并发量非常大,大概20W次每秒,数据量不是很大,大概500W级别,而且数据不会频繁更新,平均每天更新一次,请问有什么好的方案么?==这是一个典型的,短文本分词搜索的问题,简单聊聊自己的经验。常见的文本检索方案有哪些?(1)数据库L
每秒30W次的点赞业务,怎么优化?
继续答星球水友提问,30WQPS的点赞计数业务,如何设计?可以看到,这个业务的特点是:(1)吞吐量超高;(2)能够接受一定数据不一致;画外音:计数有微小不准确,不是大问题。先用最朴素的思想,只考虑点赞计数,可以怎么做?有几点是最容易想到的:(1)肯定不能用数据库抗实时读写流量;(2)redis天然支
盘口数据频繁变化,100W用户如何实时通知?
继续答星球水友提问:盘口数据频繁变化,如何做缓存与推送,如何降低数据库压力?并没有做过相关的业务,结合自己的架构经验,说说自己的思路和想法,希望对大家有启示。一、业务抽象(1)有很多客户端关注盘口,假设百万级别;(2)数据量不一定很大,上市交易的股票个数,假设万级别;(3)写的量比较大,每秒钟有很多
几万条群离线消息,如何高效拉取,会不会丢?
继续答球友提问:(1)群离线消息是推还是拉?(2)几万条群离线消息,怎么保证不丢失?群离线消息,是推还是拉?关于写扩散、读扩散的问题,之前专门撰文写过,今天不直接同步结论,重点说说设计的思考过程。画外音:结论不如思路重要。假如群离线是推,流程应该如何?会遇到什么问题?先看看群离线消息的核心数据结构。
粉丝关系链,10亿数据,如何设计?
继续答星球水友提问,大数据量,高并发量,好友关系链、粉丝关系链要如何设计?什么是关系链业务?关系链主要分为两类,弱好友关系与强好友关系,两类都有典型的互联网产品应用。弱好友关系的建立,不需要双方彼此同意:用户A关注用户B,不需要用户B同意,此时用户A与用户B为弱好友关系,对A而言,暂且理解为“关注”
处理亿级数据的“定时任务”,如何缩短执行时间?
继续答水友提问。问题抽象:(1)用户会员系统;(2)用户会有分数流水,每个月要做一次分数统计,对不同分数等级的会员做不同业务处理;数据假设:(1)假设用户在100w级别;(2)假设用户日均1条流水,也就是说日增流水数据量在100W级别,月新增流水在3kW级别,3个月流水数据量在亿级别;常见解决方案:
用单库自增键来生成id了,后期怎么分库?哎,这个坑大!
星球水友“写代码的”提问:沈老师,我们现在用户中心是单库单表,uid使用数据库自增主键,uid被很多业务关联,不能变化。现在用户中心数据量逐步变大,有分库需求了,如何由单库升级为多库,保持历史uid不变,并且新生成的数据不冲突,有什么好办法么?==问题描述完==应该有不少公司都会利用数据库“插入数据
1000亿文本信息,高并发MD5查询,这么大数据量的业务怎么弄?
==星球水友提问==沈老师,你好,想请教一个身份证信息检索的问题。公司有一个每秒5万并发查询的业务,(假设)根据身份证MD5查询身份证信息,目前有1000亿条数据,纯文本存储,前几天看你写LevelDB,请问这个业务能利用LevelDB内存数据库进行存储么?有没有其他优化方案?画外音:LevelDB
30亿日志,检索+分页+后台展示,你是否遇到过更奇葩的需求?
沈老师,你好,想请教一个数据库查询日志,前台页面显示的问题。需求:(1)按照某些特定检索条件查询日志;(2)通过前台Web页面查询并显示相关日志信息;(3)检索需求包含用户,时间段区间,类型等特定字段;希望做到:(1)查询速度尽可能快;(2)支持分页查询;目前方案:日志信息存储在Oracle中,根据
高速飞机上换引擎,MQ如何实现平滑迁移?
前几天,杨紫琼同学在知识星球提问,说公司要切换MQ,从一个旧的服务商升级为新的服务商,问有没有什么好方案。这个需求估计还挺普遍的,这里分享一些经验。一、MQ架构简述如上图,使用MQ异步通信,一般分为三层:消息发送方:使用MQ客户端生成消息。MQ-client::SendMsg(topic,msg);
数据库软件架构,到底要设计些什么?
一、基本概念概念一:单库概念二:分片分片解决“数据量太大”这一问题,也就是通常说的“水平切分”。一旦引入分片,势必面临“数据路由”的新问题,数据到底要访问哪个库。路由规则通常有3种方法:(1)范围:range优点:简单,容易扩展。缺点:各库压力不均(新号段更活跃)。(2)哈希:hash优点:简单,数
DBA防跑路,是不是备份最重要? | 数据库系列
前几天又看到新闻,某厂用户数据又丢了,据说是实习生的锅。数据安全性,是DBA最重要的职责,没有之一,今天系统性的说一下MySQL的备份。画外音:估计不是DBA和OP对这个问题也不太关注,权当了解知识吧。MySQL的备份分两大类:(1)物理备份(PhysicalBackup)(2)逻辑备份(Logic
MySQL表锁,以为自己懂了,结果一个答对的都没有!!!
关于MySQL的如下问题,你能准确的答出来么?(1)和行锁相比,表锁有什么优势?(2)频繁groupby的业务,用MyISAM更好,还是InnoDB更好,为什么?(3)某个session占有了表写锁,有另外N个session又要对表进行写操作,MySQL是如何处理的?(4)某个session释放了表
频繁插入(insert)的业务,用什么存储引擎更合适? | 数据库系列
继续回答星球水友提问:沈老师,MyISAM只支持表锁,但网上文章却说,在并发插入量比较大的时候,比较适合使用MyISAM,这矛盾吗?这个问题,涉及MySQL表锁的一些细节,借着这个问题,系统性说下表锁的“所以然”。画外音:网上不少文章只说结论,不说为什么,容易让人蒙圈。MySQL表锁知识系统性梳理。
数据库,主键为何不宜太长长长长长长长长?
继续回答星球水友提问:沈老师,我听网上说,MySQL数据表,在数据量比较大的情况下,主键不宜过长,是不是这样呢?这又是为什么呢?这个问题嘛,不能一概而论:(1)如果是InnoDB存储引擎,主键不宜过长;(2)如果是MyISAM存储引擎,影响不大;先举个简单的栗子说明一下前序知识。假设有数据表:t(i
如何避免回表查询?什么是索引覆盖? | 1分钟MySQL优化系列
《迅猛定位低效SQL?》留了一个尾巴:selectid,namewherename='shenjian'selectid,name,sexwherename='shenjian'多查询了一个属性,为何检索过程完全不同?什么是回表查询?什么是索引覆盖?如何实现索引覆盖?哪些场景,可以利用索引覆盖来优化
如何利用工具,迅猛定位低效SQL? | 1分钟系列
《两个工具分析SQL死锁》《SQL空值带来的大坑》两个案例分析,展现了MySQL性能分析工具explain的强大。《同一个SQL语句,为啥性能差异咋就这么大呢?》详细叙述了explain结果中最重要的type字段(连接类型)的含义。其实,explain结果中还有一个Extra字段,对分析与优化SQL
同一个SQL语句,为啥性能差异咋就这么大呢?(1分钟系列)
《数据库允许空值,往往是悲剧的开始》一文通过explain来分析SQL的执行计划,来分析null对索引命中情况的影响,有不少朋友留言,问explain结果中的type字段,ref,ALL等不一样的值究竟是什么含义。今天花1分钟简单说下,常见的type结果及代表的含义,并且通过同一个SQL语句的性能差