文章目录
- 一、切分
- 水平切分
- 垂直切分
- 水平切分策略
- 二、主从复制
- 三、读写分离
一、切分
水平切分
水平切分又称为sharding,它是将同一个表中的记录拆分到多个结构相同的表中。当一个表的数据不断增多的时候,sharding是必然的选择,它可以将数据分布到集群的不同节点上,从而缓解单个数据库的压力。
垂直切分
垂直切分指的是将一张表按列拆分成多个表,通常是按照列的关系密集程度进行切分,也可以利用垂直切分将经常被使用的列和不经常被使用的列进行切分到不同的表中。
在数据库的层面使用垂直切分将按数据库中表的密集程度部署到不同的库中,例如将原来的电商数据库垂直切分成商品数据库、用户数据库等。
水平切分策略
哈希取模:hash(key) % N;
范围:可以是ID范围也可以是时间范围
映射表:使用单独的一个数据库来存储映射关系
二、主从复制
原理如下图所示:
主要涉及到了三个线程: binlog线程, IO线程,SQL线程。
1.binlog线程: 负责将主服务器上的数据更改写入二进制的日志
2.IO线程:负责从主服务器读取二进制日志,并写入slave服务器的relay log。
3.sql线程: 负责读取relay log,解析出主服务器已经执行的数据更改并且写入slave 服务器中。
三、读写分离
主服务器处理写操作和实时性要求比较高的读操作,而slave服务器处理读操作。
读写分离能提高性能的原因在于:
- 主从服务器负责各自的读和写,极大程度缓解了锁的争用;
- 从服务器可以使用 MyISAM,提升查询性能以及节约系统开销;
- 增加冗余,提高可用性。
读写分离常用代理的方式来进行时西安,代理服务器接收应用层传来的读写请求,然后决定转发到哪一个服务器