以下内容皆为个人摸索,没有人专门指导(公司不给力啊!DBA和大牛都木有。。。),所以难免出错,如有错误欢迎指正,小子勇于接受批评~(*^__^*) ~
水平分库分表和垂直分库分表,大家都经常谈,我说下我的理解,看图:
![]()
垂直分表就不用说了,基本上会SQLServer的都会。
垂直分库就是根据业务需求来分库,比如教育系列的,可以分为资讯,课程,用户(学生,学校)三个数据库。比如电商的可以分为订单,商品,用户(商家,消费者)三个数据库。这边只是举个例子,具体的你得根据你们自己业务的实际情况来分,不是分的越多越好,最好是遇到瓶颈了再去做这些事情(这个过程才能学到很多东西)
水平分表主要就两种方法,Hash取余法和时间路由法。我重点说下时间路由的方法,这种方案后期扩容和历史数据抽离【结合列索引更劲爆哦~】比较方便。
举个简单的路由表:(时间你可以用传统的格式,我这边用的是时间轴)
这个是文章表的时间路由表,每次查询文章的时候根据查询的时间看看
![]()
比如我现在准备写入数据,当前时间 2016/11/18 16:37:29 ==》1479458249
select RTableName from Route_Article where 1479458249<REndTime and 1479458249>RCreateTime
就可以知道我应该往哪个表里面写数据:==》Article2
同理,想查询某个时间的数据也是可以通过路由表知道该往哪个表里面查询
![]()
水平分库之前提了一下文件组(http://www.cnblogs.com/dunitian/p/5276431.html)后面还会有一篇文章进行扩展说明(http://www.cnblogs.com/dunitian/p/6078512.html),这边就不说了。
其实企业里面用的最多的是复合型的,比如:水平分库分表 ,水平分库+垂直分库+分表
真的有了这方面的瓶颈的话水平分表一般只能缓解,并不能真正解决,毕竟还是在一台服务器上。单表的数据量是减少了,但是IO,连接数,带宽之类的瓶颈并不能有多大的改善。
水平分库分

