Fork me on GitHub

数据库扩展

复制和分离

主从复制

复制原理:

主从复制

  1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
  2. slave将master的binary log events拷贝到它的中继日志(relay log);
  3. slave重做中继日志中的事件。

复制过程对于主服务器的影响非常有限。当存在多个从服务器同时从一个主武器进行复制的时候,主服务器的磁盘压力会有不同程度额增长,可以采用多级复制策略解决。

读写分离

对于查询操作比较密集的站点,将读操作分配给从服务器,写操作分配给主服务器。

mysqlroute数据库反向代理

mysqlroute工作在应用程序和mysql服务器之间,负责所有请求和响应数据的转发。mysqlroute会将应用的读请求分配到主服务器上,将写请求分配到从服务器上,最后将结果返回给应用,在开始时只需要对mysqlroute做一些配置即可。

也可以使用Mycat数据库中间件

垂直分区

当数据库写操作频繁的站点来说,可以采用垂直分区来解决。

将不同类型的数据库转移到独立的数据库服务器上,然后又可以对分出去的数据库做主从复制来实现读写分离。

水平分区

当通过垂直分区后,数据库的主服务器再次无法承受写操作压力时,我们可以将同一数据表中的记录通过特定的算法进行分离,分别保存到不同的数据库表中,从而可以部署到不同的服务器服务器上。

分区和分表

在分区之前要先分表,分表只是单台数据库的优化策略。为了让数据库的可扩展,便需要考虑分区,将表迁移到其它的数据库服务器上。

分片策略

分片字段的选择:一般选择数据表的主键,但得保证不能使用auto_increment自增类型,可以自己实现一个id生成器(使用redis可实现)。

哈希算法

可以采用取模的方式,数据分布均匀,扩容要成倍扩容,2台服务器扩展到4台服务器。

范围

会造成访问不均的情况。

时间

适合归档性质的数据。

映射关系

映射表维护比较麻烦。

分区反向代理

关系型数据库瓶颈

  • 缓存
------本文结束感谢阅读------
欣赏此文?求鼓励,求支持!