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]