前言
对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。
数据切分:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失;
负载均衡策略:可以降低单台机器的访问负载,降低宕机的可能性;
集群方案:解决了数据库宕机带来的单点数据库不能访问的问题;
读写分离策略:最大限度了提高了应用中读取数据的速度和并发量;
这里主要谈及数据切分和其相关数据库优化(主从复制,读写分离)的概念
数据切分
其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。
切分后遇到很多问题(例如:跨库join,父子表join, 分布式事务等),这也是需要考虑的。
数据库分表
垂直划分和水平划分
垂直切分---分模块使用字段不同的而划分不同字段结构的表;水平切分---分同一个模块下的多个结构相同的子表
1、垂直划分
把不同功能,不同使用频率的数据列分别放到不同的表中,但是如果同一个模块的数据量太大就会存在性能瓶颈
例如:把常用的字段放一个表,不常用的放一个表
把字段比较大的比如text的字段拆出来放一个表里面
使用的话是根据具体业务来拆,查询时使用多表联查,可以再配合redis存储
2、水平划分
垂直切分解决不了大表的瓶颈,如果同一个功能中表的数据量过大,就要对该表进行切分,为水平切分
例如:用户表user分