闲扯mysql proxy根据时间分布式分表

曾经有过想法用python实现一个伪mysql代理端,不求兼容mysql,只求能合理的实现数据路由。 

正文开始,这段时间在尝试看kingshard代码,然后一直在思考mysql的分布式分库分表的问题。
我们知道mysql的水平分表有hash,range的时候。 而被range的字段可以是id(数字),也可以是时间段。  那么问题就来了.  当你扩展使用mycat、kingshard、atlas类型的mysql proxy或者是程序自己实现db路由都会遇到这类问题。 


该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。

http://xiaorui.cc/2016/02/24/%E9%97%B2%E6%89%AFmysql-proxy%E6%A0%B9%E6%8D%AE%E6%97%B6%E9%97%B4%E5%88%86%E5%B8%83%E5%BC%8F%E5%88%86%E8%A1%A8/



下面是按照每月的模式进行分表. 

因为数据量很大,又因为更好的管理数据,所以表按照日期放在不同的mysql上. 

#blog: xiaorui.cc

ec_2014-01  -->  mysql-A
ec_2014-02  -->  mysql-B
ec_2014-03  -->  mysql-C

ec_2014-04  -->  mysql-A

对于mysql proxy来说,他会根据年月取出相关的表,然后针对年月hash得到是哪台mysql.

因为性能考虑,我又想增加一个 mysql-D 节点. 

那么理论上关系成这样了. mysql-A的ec_2014-04数据需要copy到mysql-D ?

2014-04  -->  mysql-A   --->>>>  2014-04  -->  mysql-D

难道每次增删节点,我需要平衡下数据? 或者用一个配置表来控制关系?

我以前在乐视的时候会平衡数据,好奇其他的大厂是怎么解决的? 带着这个疑问我问了一些大厂的dba高手及kingshard作者陈非,他们给我的回复是一定要预先设计好架构,如果真的因为各种情况增加或减少节点,那么需要自己平衡数据的。  做法很简单,就是复用proxy的hash调度算法,一个个的move数据。 当然这些是可以自动化运维起来的。  

这么一折腾,我对于mysql按照日期分表的问题清晰了。  

下面分享一个我在weibo看到的一个mysql proxy总结图,涵盖了不少有名气的proxy。  比如cobar,Mycat,kingshard,atlas 。 


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注