MySQL Sharding 详解

背景

    我们知道,当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大。采用MySQL Replication多mater多salve方案,在上层做负载均衡,虽然能够一定程度上缓解压力。但是当一张表中的数据变得非常庞大时,压力还是非常大的。试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,都会面临巨大的性能压力。

定义

    数据sharding,也称作数据切分,或分区。是通过某种条件,把同一个数据库中的数据分散到多个数据库或者多台机器上,以减小单台机器压力。

分类

    数据分区根据切分规则,可以分为两类:

    1.垂直切分

    数据的垂直切分,也可以称之为 纵向切分。将数据库想象成为由很多个一大块一大块的“数据块”(表)组成,我们垂直的将这些“数据块”切开,然后将他们分散到多台数据库主机上面。这样的切分方法就是一个垂直(纵向)的数据切分。以表为单位,把不同的表分散到不同的数据库或者主机上。规则简单,实施方便,适合业务之间耦合度低的系统。

MySQL Sharding 详解_第1张图片

    垂直切分的优点:

    (1) 数据库的拆分简单明了,拆分规则明确;

    (2)应用程序模块清晰明确,整合容易;

    (3)数据维护方便易行,容易定位;

    垂直切分的缺点:

    (1)部分表关联无法在数据库级别完成,需要在程序中完成;

    (2)对于访问极其频繁且数据量大的表仍然存在性能瓶颈,不一定能满足要求;

    (3)业务处理相对更为复杂;

    (4)切分达到一定程度之后,扩展性会遇到限制;

    (5)过度切分可能会带来系统过度复杂而难以维护。

    2.水平切分

        一般来说,简单的水平切分主要是将某个访问极其频繁的表再按照某个字段的某种规则来分散到多个表之中,每个表中包含一部分数据。以行为单位,将同一个表中的数据按照某种条件拆分到不同的数据库或者主机上。相对复杂,适合单表巨大的系统。

    水平切分的优点:

    (1)表关联基本能够在数据库端全部完成;

    (2)不会存在某些超大型数据量和高负载的表遇到瓶颈的问题;

    (3)应用程度端整体构架改动相对较少;

    (4)事务处理相对简单;

    (5)只要切分规则能够定义好,基本上较难遇到扩展性限制;

    水平切分的缺点:

    (1)切分规则相对更为复杂,很难抽象出一个能够满足整个数据库的切分规则;

    (2)后期数据的维护难度有所增加,人为手工定位数据更困难;

    (3)应用系统各模块耦合度较高,可能会对后期数据的迁移拆分造成一定的困难。

3.联合拆分

    实际的应用场景中,除了那些负载并不是太大,业务逻辑也相对简单的系统可以通过上面两种切分方法之一来解决扩展性问题之外,恐怕其他大部分业务逻辑稍微复杂一点,系统负载大一些的系统,都无法通过上面任何一个数据的切分方法来实现更好的扩展性,而需要将上述两种切分方法结合使用,不同的场景使用不同的切分方法。

MySQL Sharding 详解_第2张图片

    联合拆分的优点:

    (1)可以充分利用垂直拆分和水平切分各自的优势而避免各自的缺陷;

    (2)让系统扩展性得到最大化提升;

    联合切分的缺点:

    (1)数据库系统构架比较复杂,维护难度更大;

    (2)应用程序构架也相对更复杂;

实现方案

http://blog.csdn.net/michael_kong_nju/article/details/47147403

参考文章:

http://blog.csdn.net/bluishglc/article/details/6161475

   

    

你可能感兴趣的:(mysql,sharding)