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

03.SQLServer性能优化之—存储优化体系

汇总篇: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地图