从业务场景看分库分表
互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要求。
因此,量级较大的业务场景,MySQL的读压力往往会首先成为系统瓶颈所在。
此时,在数据库层面,DBA通常会建议通过横向扩展备库节点的方式,采用读写分离技术来提升业务系统的读性能、读并发能力。
以上是典型的互联网读写分离需求。
除了这种多见的读瓶颈问题,在大型网站和海量数据的业务场景,数据库常见的性能瓶颈下面的两地问题会更加突出:
一是大量的并发读写操作,导致单库出现负载压力过大;
二是单表存储数据量过大,导致查询效率低下。
该种情况,由于业务的读写请求较高,MySQL在主从之间的数据同步容易引发主从延迟问题。改进的做法是,我们可能会架构设计上,需要敦促业务在写入主库之前最好将同一份数据落到缓存,以避免高并发场景下从从库中获取不到指定数据的情况发生。
如果写压力进一步扩大,并且数据量急剧快速增长,DB写节点即主库就会成为整个系统的瓶颈。在MySQL的日常运营中,如果DB中表和表之间的数据很多是没有关系的,或者根本不需要表关联Join操作,我们可以考虑按照业务把不同的数据放到不同的服务器中,即垂直分库或叫垂直切分。
不过需要注意的是,垂直分库无法解决单表数据量过大的问题,由于单一业务的数据信息仍然落盘在单表中,如果单表数据量太大,就会极大地影响SQL执行的性能。
由此