满库 当数据库扼住系统性能咽喉,直接分库分表能解决吗?
浏览量:1649
时间:2021-03-14 21:50:08
作者:admin
当数据库扼住系统性能咽喉,直接分库分表能解决吗?
分库分表是比较靠后的优化手段,因为成本比较高。
遇到数据库瓶颈:
- 首先考虑sql优化,这是最简单的方法。对现有系统基本没有影响。
- 其次就是考虑数据库的读写分离,这也是相对简单的方法。在数据库层面进行配置,系统层面只需要调整一下获取数据库连接的逻辑。读数据时即可以获取主库连接,也可以获取从库连接。写数据时只获取主库连接。
- 再考虑增加缓存层。将数据缓存到缓存中,当再次访问时不再从数据库获取。一般缓存层对系统是透明的,基本对系统本身没有影响。但是引入缓存,也引入了相应的需要考虑的问题,比如雪崩,命中率,分布式缓存等
- 还有一种非技术手段,就是改需求。引起性能问题的原因是否是需求不合理?或者需求太复杂?是否可以简化需求?此方法对系统的影响也相对较小。
- 最后才考虑分库分表。优先分库,因为相对分表更简单。将对应的表移动到新库,调整系统获取数据库连接的逻辑。这里需要考虑要移动哪些表,在提高性能的前提下,首先尽量避免分布式事务。
- 最最后,考虑分表。分表的主要原因是单表数据量太大。分表又分纵切和横切。纵切就是按列切,比如用户表,常用信息为基本信息表,其它信息为详情表。横切就是按行切,比如一亿数据量的表切分为十张一千万的表。这里就涉及数据该存放到哪张表,或从哪张表里取。分表后又可以分库,来进一步优化。
- 如果涉及到分布式事务,又要考虑如何保证分布式事务。理论方面2pc,3pc,paxos,cap,base。对应的中间件的使用。
对系统的设计和优化不是人云亦云,需要根据实际的场景来进行处理。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。
下一篇
队列为空怎么表示 队列训练口令