你的位置:首页 > ASP.net教程

[ASP.net教程]架构师速成8.4


我们还是由浅入深(这个词我喜欢,你呢?)的讨论一下,分库分表的关键点(本故事纯属虚构,仅为搞笑):

  1. 当你的系统很小的时候,只有一个数据库,每个表的主键都是自增的,你都不去关心主键变成了多少,反正db保证自增,小日子过的很是惬意。但惬意的日子总是短暂的,你因为DB宕机被老板fire 3次(见上一个故事)。
  2. 进入第4个公司的时候,你发粪涂墙,将集群改成主备HA,结果顺利出任CTO,迎娶白富美,走向了人生巅峰。当然这中间也出过一些小插曲,比如:张三注册时,刚点击完注册,DB主机宕机了。张三发现刚注册的账号不能登录了,张三很生气。你说这这不算啥,让他重新注册一下账号吧。但是李四刚付款买了网站上一款价值9.98的玉镶金的超级玉佩,刚过1秒,订单就没有了。李四不愿意了,他还等着这个9.98的玉佩3天内升值500%大赚一笔呢。你灵机一动,我们写一个数据订正的程序吧,对于宕机丢失的数据进行订正,另外加送李四同学一块999的超级金树叶。问题都摆平了,你果真是维护世界和平的正义使者!
  3. 由于只要9.98的超级玉佩口碑传播太好了,有无数人等着购买,甚至有人肯出更高的价购买,但是我们是有操守的,只卖9.98,9.98你买不了吃亏,买不了上当,现在购买还可以....此处省略1000字广告。于是网站的注册用户暴涨,数据库时不时卡死。
    • 老板发飙了:“怎么回事,我造福全人类的大业,要毁在你手里,你马上解决,要是解决不了,你就是人民公敌,社会败类!我会让无数大爷大妈一人一口唾沫吐死你!”。
    • 你:看来我们要分库存储了,一台数据库,完全抵挡不住大爷大妈们的热情啊,马上给点经费吧。
    • 老板对你一阵痛骂:“这得多少金镶玉啊,要不用金镶玉付款吧”。
    • 你:老板英明。
  4. 又增加2台机器之后,突然发现你是的世界完全崩塌了。
    1. 哪些数据需要分库呢?
    2. 原来数据怎么分到这2台机器上呢?
    3. 我查询的时候怎么知道查哪一套集群?
    4. 自增主键太坑了,自增完都重复了,怎么办?
    5. 原来的关联查询(我无数牛叉的sql),分库之后怎么办?
    6. 我的事务一致性怎么办?
    7. 原来的count,sum,group怎么办?
    8. 要是需要再分我怎么办?但是你被fire3次之后,早已练成神功之-------------死猪不怕开水烫,既然天降大任于我,我就全力去搞,顺便鄙视一下这个老板。
  5. let‘s google,我靠,有专门的资料,http://blog.csdn.net/column/details/sharding.html,还有专门的书籍《MySQL性能调优与架构设计》,照猫画虎,大功告成。
    • 不明真相的群众:这样也太坑了,直接把最关键的略过了。退货,退货,揍他,揍他
    • 作者:我只是想告诉大家怎么思考,为什么会出现这些问题
    • 不明真相的群众:狡辩,揍他
    • 作者:饶命啊,大侠,我是觉得写起太费劲了。而且我也向大家展示了面向对象威力,这个分库分表就是一个完整的对象,我只需要引用他就可以了
    • 不明真相的群众:好像比较有道理,但是就是因为你敷衍,揍他
  6. 搞好之后,流量大增,老板心里乐开了花,对你大加称赞,并奖励了你一块金镶玉。
    • 老板:小子,我看好你!这块金镶玉就送给你,不日就升值1000倍,你就是大富翁了。
    • 你:呵呵,谢谢老板,老板英明
    • 老板:看你嘴甜,再送你10块
    • 你:呵呵呵,证据到手
    • 你:警察局吗,有人在诈骗
    • 老板:亚美蝶......,我是在造福全人类
    • 你:对不起,我是卧底!