复制和分离
主从复制
复制原理:

- master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
- slave将master的binary log events拷贝到它的中继日志(relay log);
- slave重做中继日志中的事件。
复制过程对于主服务器的影响非常有限。当存在多个从服务器同时从一个主武器进行复制的时候,主服务器的磁盘压力会有不同程度额增长,可以采用多级复制策略解决。
读写分离
对于查询操作比较密集的站点,将读操作分配给从服务器,写操作分配给主服务器。
mysqlroute数据库反向代理
mysqlroute工作在应用程序和mysql服务器之间,负责所有请求和响应数据的转发。mysqlroute会将应用的读请求分配到主服务器上,将写请求分配到从服务器上,最后将结果返回给应用,在开始时只需要对mysqlroute做一些配置即可。
也可以使用Mycat数据库中间件
垂直分区
当数据库写操作频繁的站点来说,可以采用垂直分区来解决。
将不同类型的数据库转移到独立的数据库服务器上,然后又可以对分出去的数据库做主从复制来实现读写分离。
水平分区
当通过垂直分区后,数据库的主服务器再次无法承受写操作压力时,我们可以将同一数据表中的记录通过特定的算法进行分离,分别保存到不同的数据库表中,从而可以部署到不同的服务器服务器上。
分区和分表
在分区之前要先分表,分表只是单台数据库的优化策略。为了让数据库的可扩展,便需要考虑分区,将表迁移到其它的数据库服务器上。
分片策略
分片字段的选择:一般选择数据表的主键,但得保证不能使用auto_increment自增类型,可以自己实现一个id生成器(使用redis可实现)。
哈希算法
可以采用取模的方式,数据分布均匀,扩容要成倍扩容,2台服务器扩展到4台服务器。
范围
会造成访问不均的情况。
时间
适合归档性质的数据。
映射关系
映射表维护比较麻烦。
分区反向代理
MyCAT
Spock Proxy
关系型数据库瓶颈
- 缓存
全文检索
方案1:xunsearch http://www.xunsearch.com/
方案2:Elasticsearch
Elasticsearch入门教程参考:
NOSQL
