水平分库分表..." />

汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql

概  述:http://www.cnblogs.com/dunitian/p/6041323.html#com

以下内容皆为个人摸索,没有人尤其指点(公司不给力啊!DBA和大牛都木有。。。),所以难免出错,如有错误欢迎指正,小子勇于接受批评~(*^__^*)
~

style=”line-height: 1.5;”>水平分库分表和垂直分库分表,大家都隔三差五谈,我说下自家的通晓,看图:

新濠娱乐会员注册 1

垂直分表就不用说了,基本上会SQLServer的都会。

 

垂直分库就是依照工作须求来分库,比如教育多重的,可以分为资讯,课程,用户(学生,高校)七个数据库。比如电商的可以分为订单,商品,用户(商家,消费者)多少个数据库。那边只是举个例证,具体的你得根据你们自己事情的莫过于情形来分,不是分的越多越好,最好是碰见瓶颈了再去做那个工作(那一个进度才能学到很多东西)

水平分表紧要就两种方法,Hash取余法和岁月路由法。本身最紧要说下时间路由的方法,那种方案中期扩容和野史数据抽离【重组列索引更劲爆哦~】比较便于。

style=”color: #ff6600;”>举个简单的路由表:(时间你可以用传统的格式,我那边用的是时刻轴)

这些是小说表的时刻路由表,每趟查询小说的时候依照查询的日子探访

新濠娱乐会员注册 2

比如我现在准备写入数据,当前光阴 2016/11/18 16:37:29 ==》1479458249

select RTableName from
Route_Article where where
1479458249 between RCreateTime andREndTime**

就可以领会自己应当往哪些表里面写多少:==》Article2

同理,想查询某个时间的数码也是可以因而路由表知道该往哪些表里面查询

新濠娱乐会员注册 3

 

水平分库之前提了瞬间文件组(http://www.cnblogs.com/dunitian/p/5276431.html)前边还会有一篇小说举办扩充表达(http://www.cnblogs.com/dunitian/p/6078512.html),那边就隐瞒了

事实上集团中间用的最多的是复合型的,比如:水平分库分表 ,水平分库+垂直分库+分表

诚然有了这方面的瓶颈的话水平分表一般只好解决,并不可能真的化解,毕竟依然在一台服务器上。单表的数据量是缩减了,不过IO,连接数,带宽之类的瓶颈并不能够有多大的创新。

水平分库分表可以把IO瓶颈解决部分,优化成效依然很明确的:

新濠娱乐会员注册 4

 

 

水平分库+垂直分库+分表,这些方案得以行使链接服务器,那样路由表就绝不改了,把路由表的表名改成完全的名目( style=”color: #ff6600;”>前边会说更好的法门)

看直观图: style=”color: #ff6600;”>[192.168.1.250].[BigValues].[dbo].[Article]

新濠娱乐会员注册 5

我概括模拟一下:我PC的IP是:192.168.1.9

先在长途数据库稍微插点多少:2013-1-1 ~
2015-1-1的多少,量倒是不多,200W左右

新濠娱乐会员注册 6

 没有跨库查询过的老同志,可以先预习一下同义词相关的学识:http://www.cnblogs.com/dunitian/p/6041323.html#tyc

 先设置一下链接服务器。我自己搜索的这一个主意也许和网上的不太雷同,不要慌(不可能,我按照网上的没成功啊+_+)

新濠娱乐会员注册 7

安全性里面安装一下用户名和密码

新濠娱乐会员注册 8

可以了,看看吧:

新濠娱乐会员注册 9

 先看看效果:

新濠娱乐会员注册 10

以此感觉挺好的,一般景观下都是没问题的,然而遇到数据库名字或者表改了就蛋疼了,得改多少东西??关键是不太便宜,名字那么长。。。===》so,引入了同义词

create synonym Article for
[192.168.1.250]新濠娱乐会员注册,.[BigValues].[dbo].[Article]

新濠娱乐会员注册 11

再看看效果啊:

新濠娱乐会员注册 12

 

style=”line-height: 1.5; background-color: initial;”>—————————————————————————————————–

style=”line-height: 1.5; background-color: initial;”>是不是感觉特简单,也想改善起来了?(⊙o⊙)…,其实自己依旧提出快到瓶颈的时候再改,不然你会很蛋疼的,现在自家就概括说多少个蛋疼的地点~PS:附带我的缓解方案

 

简易说下有哪些问题:

 

style=”color: #ff6600;”>1.全局ID的问题,既然分表了,那么首先件业务就是把自拉长去掉,(eg:表A,ID为44,表B,ID为44,那自己取44的数额时,取哪个吧?)

一开首我是用GUID的措施,一贯觉得这么些不太好,为什么呢,我一般用户ID或者管理人ID会用GUID,那样Burp的强力解猜就比较上门槛了(不难利用:http://www.cnblogs.com/dunitian/p/5724872.html

后来发现,GUID的主键基本上满意必要,然而无种类,而且太长了,排序什么的都各个不便利,后来就找其它办法,很多,比如时间轴,后来发觉高并发下仍旧有重新的(毕竟已经不是单机了)最终利用了 style=”color: #ff0000;”>雪花算法https://github.com/twitter/snowflake

C#本子的外国朋友已经封装了,大家可以去看望:https://github.com/ccollie/snowflake-net

style=”color: #888888; text-decoration: line-through;”>强大的网友出来个简化版本: style=”color: #888888; text-decoration: line-through;”>http://blog.csdn.net/\*\*\*/article/details/\*\*\*6  style=”color: #888888;”> style=”color: #888888;”>(地址我就不贴了,对先辈需要最起码的体贴)

style=”color: #ff0000;”>一起始我用的是那一个本子,后来意识多线程的情形下有重复项。。。(demo: style=”color: #ff0000;”>https://github.com/dunitian/TempCode/tree/master/2016-11-16/Twitter\_Snowflake

新濠娱乐会员注册 13

style=”line-height: 1.5; background-color: initial;”>全局ID的急剧探究:https://q.cnblogs.com/q/53552/

切切实实已毕:http://www.cnblogs.com/dunitian/p/6130543.html

 

2.跨库Join

MySQL相比较蛋疼,MSSQL好像没那么难,我是用链接服务器+同义词的艺术解决的(上边演示的),若是有更好方案得以提点一下小子^_^

看图:

新濠娱乐会员注册 14

无数时候可以参见MyCat的局地东西,跨库查询肯定效用没有单机高。有时候会做一些处理来尽量幸免跨库Join

譬如说表A,表B,表C…常用的大局表我会把他们每个数据库存几回,那样就有利于多了(注意一下数量同步啊)

还有就是冗余一些字段

例如:产品表有这么些字段:商品展图ID,展图URL,缩略展图URL。按理说那是不客观的,可是不那样干就得跨库查询了,适当牺牲嘛~

再比如说:订单表里面:用户ID,用户名,店铺ID,店铺名,商品缩略展图。这样也是不创建的,不过。。。商品和订单大家都懂的,牵扯的表太多,有点夸大了~

日后分库的时候能够参考MyCat的ER分库 ( style=”color: #ff6600;”>相关联的联手分)

新濠娱乐会员注册 15

新濠娱乐会员注册 16

 

3.跨库排序、聚合等

诸如要求Count,那么每个表都得单独求一下Count,然后汇总Count。那些进度可以经过应用程序去做到,毕竟可以根据路由表来归并集中

排序就相比较蛋疼了,假设是按时间分表字段)的还好,因为大家路由表就是按时间分表的,相对简便易行。假设依照某个字段排序的话。。。。。(⊙o⊙)…不能就取每个表里面的数目吧。

众四个人总是疑忌为何分页越往前面越慢(按时间不怕,大家就是按时间分表的,你去相应时间区里面取就好了)

比如说按字段1排序,每一页20条数据,须要取第一页的多寡==》

新濠娱乐会员注册 17

取第五页的数码==》想想看,这么搞的话,怎么不卡?你们有更好的缓解办法可以说,小子比较菜O(∩_∩)O

新濠娱乐会员注册 18

 

(⊙o⊙)…,最终说下自己近来在切磋的解决方案:

分布式数据库访问层: style=”color: #ff6600;”>携程DAL ,支持MySQL,SQLServer。支持Net,Java

Ctrip
DAL支持流行的分库分表操作,帮助Java和C#,接济Mysql和MSSqlServer。使用该框架可以在有效地掩护公司已有数据库投资的同时,急迅,可靠地为商家提供数据库访问层的横向扩张能力。

开源地址:https://github.com/ctripcorp/dal

文档连串:https://github.com/ctripcorp/dal/wiki/

新濠娱乐会员注册 19

 新濠娱乐会员注册 20

 

以此是后备方案:(清晨让情侣去问了有的MyCat的小编,他说MyCat开发的时候就一向不限定数据库和开发语言,MySQL,SQLServer都是支持的,换个端口而已,开发语言也没怎么范围,只要您能两次三番MyCat就能用)

数据库中间组件:MyCat style=”color: #ff00ff;”>(我还没探讨,改天如果可以就发篇作品)

官网:http://mycat.io/

文档:https://github.com/MyCATApache/Mycat-doc

开源地址:https://github.com/MyCATApache/Mycat-Server

 

新濠娱乐会员注册 21

 

04.SQLServer性能优化之—读写分离&数据同步 http://www.cnblogs.com/dunitian/p/6041758.html

网站地图xml地图