ing name){ Stringsql="insert intohwdb.uc_user(user_id,uc_name,created_time)values(?,?,?)"; int i=0; long uid =user_id.longValue(); Connectionconn=cnn; try{ PreparedStatement preStmt=conn.prepareStatement(sql); preStmt.setLong(1, uid); preStmt.setString(2,name); preStmt.setString(3,getTimeByCalendar()); i=preStmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return i;//返回影响的行数,1为执行成功 } }
?
6.4 测试代码
User_id按照注册年月日时分秒+9999,这样的思路是,一秒满足9999个并发,也不会,至于如何统一规划这全局的9999个,可以设置一个静态的全局变量,而且这个全局变量会及时保存到某个DB中,这样基本保证了不重复,比如user_id:2015053010401005、2015053010401006、2015053010401007,测试代码如下:
MySQLTestmt=newMySQLTest(); // BigIntegerbi = newBigInteger("2015053010401005"); Stringport=mt.getDBPort(bi.longValue()); Connection conn=mt.getConn(port); mt.insert(conn,bi, "tim--"+bi.longValue());
1)通过%3来获取DB连接;
余0 --> db1(3307端口) 余1 --> db2(3308端口) 余2 --> db3(3309端口)
2)查看结果
运行结束后,可以去3个实例相应的查看录入的数据,如下所示:
Id为2015053010401005应该录入到db1(3307端口)
[root@data02 ~]# mysql--socket=/usr/local/mysql3307/mysql.sock -e "select * fromhwdb.uc_user;"; +------------------+-----------------------+---------------------+ | user_id | uc_name | created_time | +------------------+-----------------------+---------------------+ | 2015053010401005 | tim--2015053010401005 |2015-04-30 09:27:48 | +------------------+-----------------------+---------------------+ [root@data02 ~]#
Id为2015053010401006应该录入到db2(3308端口)
[root@data02 ~]# mysql--socket=/usr/local/mysql3308/mysql.sock -e "select * fromhwdb.uc_user;"; +------------------+-----------------------+---------------------+ | user_id | uc_name | created_time | +------------------+-----------------------+---------------------+ | 2015053010401006 | tim--2015053010401006 |2015-04-30 09:27:57 | +------------------+-----------------------+---------------------+ [root@data02 ~]#
Id为2015053010401007应该录入到db3(3309端口)
[root@data02 ~]# mysql--socket=/usr/local/mysql3309/mysql.sock -e "select * fromhwdb.uc_user;"; +------------------+-----------------------+---------------------+ | user_id | uc_name | created_time | +------------------+-----------------------+---------------------+ | 2015053010401007 | tim--2015053010401007| 2015-04-30 09:28:01 | +------------------+-----------------------+---------------------+ [root@data02 ~]#
6.5总结
基本和预想的一样的,数据通过模id取余数的方法,水平拆分到不同的库里面,这里只是简单演示了下,实际生产的复杂程度远比这个要高的多,所以大家遇到的问题会更多,但是水平拆分的理念都是类似的,这条路是光明的,大家可以放心走下去。