mycat+mysql+jdbc实现根据手机号尾号分库分表存储以及效率对比
关键字
- 手机号分割
- mycat
- 水平分库分表
- 大数据
测试环境
- jdk1.7+mysql5.5+mycat1.5+myeclise10.7
建表建库
- 建立四个数据库 A组:db1、db2、db3;B组:db;
- 前三个属于mycat操作的数据库,db属于对于的不同数据库。
- 在上述数据库中均创建user表,包括id、name、password、phone、post(手机尾号);
需求
- 插入20条数据,根据手机尾号,尾号为0、1、2的存入到db1;3、4、5存入到db2;其它存入到db3; db存入所有手机号。
- 插入20条数据,结果要求:1:对比A组和B组插入时间效率。
- 在A组和B组插入100w条数据,对比效率。
- 分根据分区字段查询中间数据,对比查询效率。
- 不根据分区字段查:查询中间数据,对比查询效率。
- 根据分区字段和不是分区字段一起查,查看效率。
sql
sql
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` varchar(255) NOT NULL, `name` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `phone` varchar(255) DEFAULT NULL, `post` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ----------------------------
测试结果
- 分区成功;
- 20条数据:A组:总时长:826ms;B组:总时长:556ms;
-
- 插入20w条时间:A组:总时长:1231524ms;B组:直接崩溃,错误原因:MESSAGE: No buffer space available (maximum connections reached?): connect
- 插入2w条时间:A组:总时长:总时长:116931ms;B组:总时长:105410ms
2w条数据查询中间数据:A组:总时长:273ms;B组:总时长:258ms[注:查询是根据id查询的,分区字段是post]
2w条数据查询中间数据:A组:总时长:总时长:269;B组:总时长:503ms[注:查询是根据post查询的,分区字段是post]
2w条数据查询中间数据:A组:总时长:264ms; B组:总时长:总时长:280ms[注:查询是根据post和手机号查询的,分区字段是post]