水平分库 mysql_基于Mycat的MySQL水平分库分表

分库分表

分库分表分为垂直切分和水平切分:

垂直分库:把整个系统划分为不同的业务模块,根据业务模块把数据库系统划分为不同的数据库。这种方式可以突破单机单库的性能瓶颈,也可以针对不同的业务数据进行分级的管理、维护和扩展。

垂直分表:大表拆小表,基于关系数据库的列进行拆分,把列比较多的表拆分成多个表,表之间有从属关系。这种拆分一般在数据库的设计阶段就完成,否则系统的改动会比较大。这种拆分方式便于维护,也能避免数据跨页问题。

水平分表:将表中不同的数据行按照某种规则将数据分布到同库的不同表中,降低单表的数据量,提高数据的更改和查询性能。这种方式一般很少使用,因为使用的还是同一个库,在库级别还是存在着连接数、IO、CPU等性能瓶颈。

水平分库分表:与水平分表类似,只是数据分布到不同库的表中。可以缓解单机单库的性能瓶颈。这种方式使用比较普遍。

下面以水平分库分表来进行实践。

MySQL准备工作

分别在两台不同的MySQL服务器创建数据库PART_DB,创建用户part1,并授权part1用户使用数据库PART_DB:

GRANT ALL PRIVILEGES ON PART_DB.* TO 'part1'@'%' IDENTIFIED BY '123456';

FLUSH PRIVILEGES;

登录part1用户,并创建表test_tab1,字段有:id、name、type、hostname,id不使用自动增长,由客户端指定;type为varchar类型,取值范围为0001和0002(用于测试以下提到的枚举分片)。

Mycat分片配置

1.配置访问Mycat的用户名密码

在Mycat目录的conf/server.xml中添加访问用户和使用的逻辑数据库:

123456

TESTDB

2.选择分片算法

在本例子中,我们使用固定分片hash算法,该算法是取分片字段的二进制低10位进行求模运算。在Mycat目录的conf/rule.xml中已经配置好该规则(rule1和rule2),我们只需要对其中的一个规则做相应的修改就可以使用。

id

func1

2

512

columns:分片字段

algorithm:分片函数

partitionCount:分片个数列表(我们使用了两台MySQL服务器)

partitionLength:分片范围列表

以上配置表示两台MySQL服务器平均分布数据,partitionCount*partitionLength=1024

参考《Mycat权威指南》

3.配置schema.xml文件

writeType="0" dbType="mysql" dbDriver="native">

select user()

writeType="0" dbType="mysql" dbDriver="native">

select user()

注意:心跳检测语句select user(),需要给part1用户授权

4.测试

写一个简单的JDBC程序连接Mycat(和连接mysql一样),批量插入超过1024条数据,再分别到两台MySQL服务器查询数据的分布情况。

32b2b2dc2628

MySQL服务器1.png

32b2b2dc2628

MySQL服务器2.png

其它常用分片算法

1.枚举分片

2.范围分片

3.取模分片

4.日期分片

5.取模范围分片

6.一致性hash分片

7.冷热数据分片

8.按月分片

具体可参考《Mycat权威指南》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值