2024年9月

如何解决服务中的事务问题

我们经常会被问到这样一个问题:在一个下单流程中,如何保证数据的一致性。

如果我们在单服务单库中运行,那么很简单,使用数据库的事务就可以了。

但是正常来说,现在的所有服务都会采用微服务的架构,也就是说一个下单流程中,「订单服务」到「库存锁定」到「生成账单」到「支付交易」到「回调变更状态」,这几步将会有多个服务来共同完成。

此时我们必然不能让用户的任何一步失败,又或者必须保证失败后回滚一定成功,否则用户钱扣了,交易却没成功;或者造成了超卖,这些都会造成严重客诉。

为此才会引入分布式事务这个概念,也就是保障多个事务之间的一致性,要么全部成功,要么全部失败。

- 阅读剩余部分 -

聊聊 MySQL 索引与索引设计

本文讲的都是比较基础的点,原理点到为止,适合人群为数据库小白,希望能够从数据库层面进行一些优化的同学。

最近在做旧项目改造的时候发现了很多不合理的索引设计,或者干脆就没有设计索引,开发者仿佛把在线业务的表当做了离线表那样想怎么查就怎么查,导致了整个接口相当缓慢,甚至有可能拖垮整个服务 / DB。

于是我发现一些很常规的优化似乎其实并不是每个人都很清楚,所以今天就来聊聊 SQL 的索引优化。

因为我们的项目都是 MySQL / MongoDB 的,而我基本也只学了 MySQL,因此这里以 MySQL 为主,MongoDB 为辅来进行索引设计的解读。

- 阅读剩余部分 -