之前遇到的一个面试题,一直在想有没有什么好的答案。 大概意思就是说,在支付宝里,假设我经营着一个很火爆的业务,这个业务的个人客户认为是无限多的,但是我们公司账户只有有限个。我和我的客户要转来转去,量也可以认为是相当大的。公司账户需要写账户余额表,账户流水表(包含变动之前余额,变动金额,变动之后金额)完整的记录下来,寻找最快的解决方案。现在的方案是采用 MySQL 事务,每个账户是一条数据记录,钱都在这一条数据里,在人多的时候,会出现很多失败的情况,因为业务量很大的情况下,一个账户变成了热点数据,一行记录被很多线程抢,就会出现问题。之前一个大佬 的想法是 把一个账户的钱,拆分出来,拆成 N 多个小账户,每次转账找到其中一个,结掉再根据此时的其他账户的总余额,写交易记录。相当于是把一条数据变成 N 多条,每次取 1 条,但是他这个方案,是不是在找账户的时候 要引入一定的随机性,不然 每次按照一定的规律去找,符合条件的这一条数据也会变成新的热点数据,问题实际上还是存在的。