mysql数据分块_[ZZ]MySQL分表分块到主从

1. 记得大学的时候搭建一个网站,数据库,开发环境,web服务一股脑全部在一台机器上,用几个数M的大图片做webpage的背景,觉得很cool。没有访问就没有数据库优化问题。

2. 以MySQL为例,当一个table中有数百万条记录的时候,查询自然就会越来越慢。这时通常做的就是分库分表。

分库:垂直拆分

简单的说就是将1个DB中不同的table人为的分离到不同的DB。

比如:DB中存有用户信息和群信息2个table,用户又属于一个群。把原来的1个DB分成2个。一个存用户DB,一个群DB,这就是分库。

优势:对于不同的库可以有不同的操作逻辑,自然分散数据库压力。

问题:不能跨库查询,不能保证数据的一致性和完整性。例如,插入用户信息的同时应该把用户加入群中。分库后设计2个DB的操作。不能用transaction来完成。

分表:水平拆分

我们有一个user的table,因为它过大。我们按照userID这个字段的最后一位来拆分。将user拆分为user_0, user_1...user_9。这样也可以分散压力。不过程序上的复杂度也会提高。

拆分的Rule是非常重要,要考虑到各个表的平衡和可扩展性。

CREATE TABLE user (id INT, name DECIMAL(7,2), date DATE) ENGINE=INNODB

PARTITION BYHASH(MONTH(date)) PARTITIONS 12;

上面就是一个按照月份拆分的例子。

Memcached(缓存技术)+ 分库分表 是初期用来缓解数据库压力的办法。

3. 主从设置,MySQL Replication为例。

一主多从:

一般来说是由一台主库和多台从库组成,从库可以作备份和容灾,当主库出现故障时,从库就手动变成主库。

(1)对Master(主库)的操作都记录在log中。

(2)Slave(从库)将主库的log events拷贝到自己的relay log中。

(3)Slave重做log中的事件,反映在从库中。

一般写操作master,读从slave中取得。多个slave可以分流查询的压力。一般主从的设置都是配合Proxy或Amoeba来操作,下面将介绍。

bbb4fa1ead3bc78887e4e3fb9595cf9f.png

具体设置参考:

主从+MySQL Proxy(MySQL Amoeba)

在主从设置的基础上,还可以通过使用Proxy或Amoeba来将读写分离,从而减轻数据库压力。

5c20363d505466779b0f8574cdaecfd3.png

以Mysql Proxy为例。Proxy相当于一个处于Client和Server之间的连接器。由Lua脚本写成。使用其可以将读写分离。对于写的操作,我们让master来处理,写之后Slave自动同步master的更改。而对于读,我们用slave来处理。

多主多从:

多主多从的设置,是一个loop环形,每个DB既是前一个DB的Slave又是后一个的Master。

注意的地方就是在对各个DB做插入操作时,要设置好auto_increment_increment和auto_increment_offset.为了防止最后merge时出现的主键冲突错误。

优势: 一个Master挂掉,也还可以继续DB操作。每个DB都可以进行读写,分散压力。

多主多从的设计,写操作不在只能在一个master上进心,而是可以在任何DB上进行。读的操作压力也可以更好的分散到各个DB中。

原地址:

http://blog.sina.com.cn/s/blog_7e89c3f501012vpr.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值