MySQL扩展

原创转载请注明出处:http://agilestyle.iteye.com/blog/2390898

 

业务拆分

原来一个数据库需要拆成几个库,每一块业务都使用单独的数据库来进行存储,提高吞吐和开发测试效率,同时也提升系统的稳定性

MySQL扩展
 

复制策略

拆库之后,业务继续扩大,某个库的压力越来越大,再次达到性能瓶颈,这时可以使用MySQL的复制策略来对系统进行扩展,要实现数据库的复制,需要开启Master服务端的Binary log

MySQL扩展

 

分表分库

对于互联网企业来说,大部分数据都是与用户关联的,因此,用户id是最常用的分表字段。

MySQL扩展

分库也可以通过一个关键字取模的方式,来对数据访问进行路由

MySQL扩展
有时候数据库可能面临这高并发访问的压力,又需要面对海量数据的存储问题,这时候需要对数据库采用分库分表策略,例如:

中间变量 = user_id % (库数量 x 每个库的表数量)

库 = 取整(中间变量 / 每个库的表数量)

表 = 中间变量 % 每个库的表数量

MySQL扩展
数据库经过业务拆分及分库分表之后,虽然查询性能和并发处理能力提高了,但也带来一系列的问题。比如,原本跨表的事务上升为分布式事务;由于记录被切分到不同的库与不同的表当中,难以进行多表关联查询,并且不能指定路由字段对数据进行查询。分库分表以后,如果需要对系统进行进一步扩容(路由策略变更),将变得非常不方便,需要重新进行数据迁移。
 

Reference

大型分布式网站架构设计与实践 陈康贤 著