读写分离是让主库处理事务性增删改,而从库处理查操做。数据库复制来把事务性操做的数据变动同步到从库。mysql
读写操做有不一样的实现方式,每每写操做更耗时,读操做在架构角度则有更多的选择,因此读写分离是架构及系统优化很重要的一种手段。redis
分区是将持久化数据文件划分红多个小块,根据必定的规则把文件和索引进行分割,分区后的表仍是一张表,可是在真是场景中mysql分区使用不多,分区每每用在一些其余大数据中间件下,如hbase,hdfs等,mysql的读解决方案常见的有分表和分库解决方案。算法
当数据量达到必定程度后,致使处理性能不足,或者若是表中字段冷热数据比较明显,能够采用分表处理。就是把数据字段按照某种分表原则拆分到多个表中,这样能够把大表变成小表,不一样小表中数据不重复,从而提升处理效率。sql
分区和分表是对数据的拆分,对数据库性能有必定的提高,可是当数据发展到必定程度后,单纯的分表没法解决并发请求访问同一个数据库,此时数据库的瓶颈可能到了如网络IO,文件IO,CPU,内存上,这样形成单台服务器的容量,QPS、TPS接近或超过了单个数据库实例处理极限,此时每每采用垂直和水平结合的方式拆分数据,把数据存储服务拆分到多台数据库服务器上。数据库
主库负责写,从库负责读,一主多从,从而实现读写分离,最后能够依赖其余中间件对于读写两种场景特色进行优化,好比引入redis等缓存中间件或搜索引擎优化查询,引入mq机制优化写操做,下降后端数据库压力。后端
分库分表实现方式相似,讲常常访问和不常常访问的字段拆分到不一样的库表中。缓存
水平拆分是根据分片算法讲一个库表拆分到多个库表中,如按照ID最后一位对3取余,尾数是1的放到第一个库表,尾数是2的放到第二个库表。服务器