一一中文网

手机浏览器扫描二维码访问

第16章 二面 技术总监(第2页)

我们当时用了虚拟列加上函数索引的变通方式。

先在表里增加一个虚拟列,值是cASEwhEN语句判断状态是否为‘待付款’,然后对这个虚拟列建立索引。

虽然不如8.0的原生函数索引直接,但在当时场景下,对特定状态查询的优化效果非常明显,查询速度提升了五倍左右”

。

陈锋点了点头,在面前的笔记本上记录了什么。

“继续”

。

“第三步是引入缓存和读写分离”

。

林晨流畅地接上,“对订单的概要信息,比如订单号、金额、状态、时间,这些变更不频繁但查询量巨大的数据,用Redis做了一层缓存,缓存策略是惰性更新加定期刷新。

同时,将历史订单的查询路由到只读从库,减轻主库压力。

这三步做完,再加上一些代码层面的优化,比如批量操作代替循环单条操作、避免N+1查询,最终达到了目标”

。

“缓存用的Redis,你们怎么解决缓存和数据库的一致性问题”

?陈锋追问,问题开始深入。

“我们采用了比较经典的‘先更新数据库,再删除缓存’策略。

但这里有个坑,如果数据库更新成功,缓存删除失败,还是会有一致性问题。

所以我们引入了一个简单的重试机制,删除失败后放入一个延迟队列,最多重试三次。

同时,给缓存数据设置了相对较短的过期时间,比如五分钟,作为最终兜底,确保即使缓存删除一直失败,数据也不会长时间脏读”

。

“如果遇到缓存穿透呢?比如有人恶意用不存在的订单号频繁查询”

。

“我们在缓存层加了一层布隆过滤器。

查询前先过布隆过滤器,如果判断订单号大概率不存在,直接返回空,不继续查缓存和数据库。

对于少量误判的情况,因为订单系统对‘订单不存在’这个结果的实时性要求不是极端苛刻,可以接受偶尔多一次缓存未命中后查库的代价”

。

陈锋脸上看不出满意与否,只是接着问:“订单表数据量有多大?拆分后,你们怎么处理分页查询,比如用户要查自己第50页的历史订单”

?“拆分前单表大概一亿两千万行。

拆分后,主表数据量不变,但查询效率提升。

分页查询,尤其是深度分页,确实是个挑战。

我们优化了方案,不是直接用LImItoffset,size,因为offset越大越慢。

对于用户查自己订单的场景,我们利用了‘用户Id+创建时间’的复合索引,并且要求前端传递上一页最后一条订单的创建时间作为查询锚点,使用whEREuser_id=?ANdcreate_time<?oRdERbYcreate_timedEScLImItsize这种方式,实现了性能稳定的分页”

。

接下来的二十分钟,问题如同层层剥笋,从数据库索引的b+树原理、联合索引的最左前缀匹配原则,到Redis的Rdb和AoF持久化机制优劣、集群模式下的数据分片与迁移,再到系统监控指标(qpS、tpS、响应时间分位值)、线上故障排查流程。

陈锋的问题既有广度,触及多个技术栈,又有深度,往往在一个点上追问两三层,考察是否真正理解而不仅仅是会用。

林晨的回答总体流畅,十年的实战经验给了他底气。

有些细节他回答得非常详尽,甚至提到了当年踩过的具体坑和解决过程;有些地方他坦诚地表示“这块当时不是我主要负责,但我了解大致方案是……”

。

当被问到一道关于分布式事务最终一致性在订单场景下如何保证的问题时,他思考了几秒,才结合消息队列和补偿机制给出了回答。

热门小说推荐
渣攻的歌后老婆失忆了_漫浪星

渣攻的歌后老婆失忆了_漫浪星

TXT下载,最新章节,无错,番外...

被病娇师尊强制和谐以后

被病娇师尊强制和谐以后

TXT下载,最新章节,无错,番外...

女配她掀桌不干了笔趣阁

女配她掀桌不干了笔趣阁

TXT下载,最新章节,无错,番外...

神医毒妃腹黑宝宝

神医毒妃腹黑宝宝

穿越当晚,新婚洞房。云绾宁被墨晔那狗男人凌虐的死去活来,后被抛之后院,禁足整整四年!本以为,这四年她过的很艰难。肯定变成了个又老又丑的黄脸婆!但看着她身子各位书友要是觉得神医毒妃腹黑宝宝还不错的话请不要忘记向您QQ群和微博里的朋友推荐哦!1w3452453977...

每日热搜小说推荐