想要数据库的性能足够高,巧妙的设计很重要,事务的操作范围要足够的小。
在大并发的情况下跨网络多次交互,就不可避免的由于网络的延迟、丢包等原因导致事务的执行时间变长,出现雪崩的概率就会大大增加。
大并发数据库的操作原则就是事务操作尽量少跨网络交互,一旦跨网络使用事务尽量使用乐观锁来解决,少用悲观锁,尽量缩短当前 session 持有锁的时间。
- 转化 update 为 innser
这里主要是使用 insert on duplicate key update
如果有需要边界处理的情形,例如扣费。如果客户余额充足进行扣费处理 转化思路 select from update group by。
- 消除 select from update
为了保证数据的一致性会加上 for update ,但是也意味着数据库将 block。
可以先思考,把需要处理的数据由大的范围缩小为小的范围,然后再对数据进行处理。