MySQL Sharding 详解

背景数据库

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


定义负载均衡

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


分类优化

    数据分区根据切分规则,能够分为两类:ui

    1.垂直切分.net

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

    垂直切分的优势:
索引

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

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

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

    垂直切分的缺点:

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

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

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

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

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

    2.水平切分

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

    水平切分的优势:

    (1)表关联基本可以在数据库端所有完成;

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

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

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

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

    水平切分的缺点:

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

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

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


3.联合拆分

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

    联合拆分的优势:

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

    (2)让系统扩展性获得最大化提高;

    联合切分的缺点:

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

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


实现方案

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


参考文章:

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

相关文章
相关标签/搜索