跳到主要内容

database_enhance

当数据库的查询压力过大时,我们要考虑对其进行扩展。这里提供一些思路。

复制和分离

数据库可以通过赋值来创建冗余副本,达到分散查询压力的目的。

主从复制

几乎所有的主流数据库产品都支持主从复制。所有的插入更新放在主库,查询放在从库。

具体配置见 MySQL官方文档 和 另外一篇简易文档

读写分离

主从复制以后,我们可以只对主库进行插入更新操作,所有的查询放到从库。 我们需要使用多个数据连接选项,并且修改数据访问层的代码。说起来不难,但是实际很复杂。我们可以不修改代码,使用数据库反向代理。

数据库反向代理

它是在MySQL客户端和MySQL服务器端中间添加一层。客户端的请求先到代理,代理再给服务器,服务器将结果返回给代理,代理再给客户端。 具体参考 官方文档 和另外一篇简易文档

垂直分区

业务还在增长,主库承受不了写操作。从库不能解决插入和更新问题,它是将读操作分离。这时候我们考虑将写操作也分离。

垂直分区:将不同数据库 | 同一个库中不需要进行联合查询的表放到不同的服务器上。

水平分表|分区

业务继续增长,一台服务器只有一个库也扛不住了,怎么办?

将同一张表的数据通过特定的算法进行分离分别保存在不同的数据表中(分表),进而可以将其部署到不同的数据库服务器上(分区)。

其实这个是逻辑层的划分,需要业务和经验结合。

针对水平分区,Spock Proxy 这个软件可以有MySQL proxy的作用。