日期:2014-05-16 浏览次数:20794 次
前段时间看了一下Mysql数据库切分方面的知识,感觉某些点还挺有技巧的,决定小小的对自己所看的知识点进行一下总结。
随着企业的不断发展,需要存储的数据不断加大,以往把数据放在单一的数据库中的做法越来越成为存取数的瓶颈,因此就对数据库提出了以下的一些要求:
1、为了降低单台数据库 负载,引入数据库切分。
2、考虑到大多数数据库操作大都“多读少写”,因此,在数据库中引入“读写分离”机制。
3、为了数据库容灾,在数据库中引入备库的思想。
基于以上需要mysql数据库可以从以下几方面入手进行改造:
一、数据库水平切分
考虑一个情况, 一个表中现在有5000w条数据,在这个表中增加(insert)一条新的数据,insert完毕后,数据库会针对这张表重新建立索引,5000w行数据建立索引的系统开销是不容忽视的。因此为了解决以上问题,我们引入了第一个数据切分的方式: 数据库内的水平切分。这种切分方式是 对数据通过一系列的切分规则,将数据分布到一个数据库的不同表中,比如将article分为article_001,article_002等子表,若干个子表水平拼合有组成了逻辑上一个完整的article表。但是这种方式仍然将读取限定在了一台数据库,因此由此产生了另外一种切分: 物理上的水平切分,即将数据分布到不同的DB服务器上,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。
那通过哪些方法能够将数据库拆分呢,总结了下,主要有几下几点: