当系统压力超过初始设计时,可以考虑sharding设计。
MySQL5以后提供了sharding分片能力,按照物理位置贴合用户分布整合数据,从而得到更快响应。
sharding分为垂直分区和水平分区。垂直就是把不同的表分散到不同的数据库或主机。适合耦合度低系统。水平分区以行为单位,将同一个表的数据拆分到不同数据库或主机上,适合复杂系统。
此外,sharding还可以分为静态和动态。静态即分区键是静态分配的。可能数据不均衡。动态则引入一个字典,然后定位在哪个分片。每次查询要2步,且可能存在单点故障。
最早的先驱者是Google开源的Hibernate shards。这是Hibernate应用横向分割的分布式数据库解决方案的框架。
淘宝当年去ioe,是因为这些传统软件已经无法支持互联网规模的服务能力。谷歌已经证明了廉价pc server 加开源软件确实能支撑巨大的服务能力。
淘宝 TDDL ( TAOBAO DISTRIBUTE DATA LAYER )
参见:
http://qq85609655.iteye.com/blog/2035176
http://www.oschina.net/question/28_76941