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端口)
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端口)
基本和预想的一样的,数据通过模id取余数的方法,水平拆分到不同的库里面,这里只是简单演示了下,实际生产的复杂程度远比这个要高的多,所以大家遇到的问题会更多,但是水平拆分的理念都是类似的,这条路是光明的,大家可以放心走下去。