MySql水平分表方案,自己亲测

场景:用户注册后,在用户登录的时候,可以通过用户名,手机号,邮箱进行登录。

分表方案:

用户表 user_1,user_2,user_3............user_10

存储关系表:uid_1,uid_2.........uid_20

uid_n的字段:uid(使用crc20转换用户名,手机号,邮箱后的数字),type(1用户名,2手机号,3邮箱),val(对应的用户数据),tb_no(用户表分表的序号)。

举例:

一个用户注册:用户名 admin 手机号 15927434211 邮箱 [email protected] 性别 男

在入库的时候计算 admin的CRC32值为152155,然后使用取模的方式计算出分表将要插入user_5,将用户信息插入user_5,同时计算出手机号15927434211 的CRC32值为135697 及 邮箱 [email protected]的CRC32值为152564.然后将(152155,135697,152564用户名,手机号,邮箱的CRC32值)按分表算法,分别算出应插入的表分别为(uid_3,uid_1,uid_6),插入的数据分别应为(152155,1,'admin',3),(135697,2,'15927434211',3),(152564,3,'[email protected]',3).

在查询的时候可以通过分表算法和数据的uid找到存储关联信息的表uid_n,然后获取tb_no。应为查询的不同的分表,程序中可以去自己定义分表的前缀。(按照此方法,还可以将用户信息的自增长id的uid存到表中)。参考过的文章:http://www.liaoxuefeng.com/article/001437480923144e567335658cc4015b38a595bb006aa51000

(使用php进行的测试,这里分表后,不是每个表中的数据都是均分的)

http://www.liaoxuefeng.com/article/001437480923144e567335658cc4015b38a595bb006aa51000

猜你喜欢

转载自blog.csdn.net/d_x_p_m_12/article/details/79495433
今日推荐