数据库高并发解决方案整理

4 篇文章 0 订阅
3 篇文章 0 订阅

一、项目的架构设计方面:
1、分库分表,分库,按照业务模块分离,分表,可以按照日期,甚至按照业务字段拆分表都算作是分表,横向与纵向而已;具体的分表的方式方法也有很多,比如mycat当然mycat已经过期,dble是其升级版不过是针对mysql但是更强更方便;这种对业务没有侵入性;还有比较流行的shardingjdbc,完全可以封装一个工具包,项目中引用开发,只需定义好分片规则,缺点是对代码有一些侵入性。
2、分离活跃数据,比如任务,有进行中有已完成,如果对未完成的操作比较频繁,又或者按日期分离,只保留本周的,具体看应用场景
二、代码开发方面:
1、缓存,但是得注意数据库跟缓存的一致性问题,具体可以参考:https://blog.csdn.net/yrsg666/article/details/115636643
2、使用存储过程,将一次请求多次访问数据库操作的业务放在存储过程中,这样可以一次访问多次操作
3、队列批量处理,比如使用ArrayBlockingQueue可以实现队列的批量操作,逻辑:每次数据来了放入队列,启动一个消费线程,从队列中一次性拉取所有,使用batch操作,同样可以减少对数据库的并发。
4、索引,这个基本就不用细说了,具体很多细节
三、数据库本身方面:
1、数据库集群,比如读写分离,很常见
四、数据库具体设计
1、对查询优化,尽量避免全表扫描,考虑在常用字段上建索引where以及order by
2、避免where字句中使用null判断而引起的放弃索引,比如不设置null而设置0或者“”
3、不是所有索引一定生效,当命中太多也许会失效
4、索引不是越多越好,影响插入更新效率,一般不要超过6个
5、避免更新索引字段,导致索引更新,效率降低很多
6、使用varchar替换char
五、sql语句方面
1、避免where子句中使用!= <> 等索引失效
2、in 与 not in慎用,效率很低,几十个还可以,不要过大,能用between 别用in
3、避免子句中使用or连接条件,导致索引失效比如 select id from t where num= 0 or num = 1 可以select id from t where num= 0 union  select id from t where num = 1
4、like %abc% 会不走索引,abc%没事
后续的参考 :https://www.cnblogs.com/peke/p/8036172.html
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值