可扩展性的定义:当增加资源以获得执行更多的工作系统能获得划算的同等提升。
向上扩展(垂直扩展):提升服务器的硬件性能。
向外扩展(水平扩展):一般都是复制,拆分,数据分片(sharding)。
- 复制:如主从复制分担读的压力。
- 拆分:如按照功能拆分,将不同的表放在不同的库上。
- 数据分片(sharding):把数据分成一小片,然后存放在不同的库上。
目前,为了实现水平扩展,数据分片是最常用最成功的方式。
作者说:能不做分片就不要做分片。除非到了不能解决的性能瓶颈。可以先考虑提升服务器性能,复制,或者汇总表,或者使用solr等提升查询性能。
选择分片键的方式:
先画出实体关系图,根根据各个实体的关系,做出分片。ps:这是个复杂的过程,其实是根据你的表之间的关系,每个表的数据可以如何划分等。
一下来自网络:
数据分区根据切分规则,可以分为两类:
1、垂直切分
数据的垂直切分,也可以称之为纵向切分。将数据库想象成为由很多个一大块一大块的"数据块"(表)组成,我们垂直的将这些"数据块"切开,然后将他们分散到多台数据库主机上面。这样的切分方法就是一个垂直(纵向)的数据切分。以表为单位,把不同的表分散到不同的数据库或主机上。规则简单,实施方便,适合业务之间耦合度低的系统。
2.水平切分
一般来说,简单的水平切分主要是将某个访问极其平凡的表再按照某个字段的某种规则来分散到多个表之中,每个表中包含一部分数据。以行为单位,将同一个表中的数据按照某种条件拆分到不同的数据库或主机上。相对复杂,适合单表巨大的系统。
参考:http://blog.csdn.net/michael_kong_nju/article/details/47147403
mysql没有想mongodb一样提供分片的功能,现在的分片是通过各种中间件来实现的。分片是一种概念,可以部署多个mysql服务器,然后通过客户端或者代理就可以实现分片,mysql本身不需要做什么。