架构师速成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块
    • 你:呵呵呵,证据到手
    • 你:警察局吗,有人在诈骗
    • 老板:亚美蝶……,我是在造福全人类
    • 你:对不起,我是卧底!
时间: 2024-09-18 23:52:57

架构师速成8.4-分库分表的关键点的相关文章

架构师速成8.3-可用性之分库分表

有状态分布式,涉及的知识就比较多了,不过我们可以拿几个现实的例子由浅入深的来理解. 数据库的分库分表 假设你是一个开发负责人,开始使用单机的数据库,突然一天数据库硬盘挂掉了.你没有做备份,然后就没有然后了. 进入第2个公司,你意识到备份的重要性,每天定时备份到另一台机器,突然有一天,数据库硬盘挂掉了.你心想幸好我有备份,然后巴拉巴拉的恢复起来,用了2个小时.老板说不错,但是--我们因为宕机造成大量用户流失,信誉下降,然后就又没有然后了.上面说的就是单点的问题. 进入第3个公司,你觉得单点很可怕,

水平分库分表的关键问题及解决思路

分片技术的由来 关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量.连接数.处理能力等都很有限,数据库本身的"有状态性"导致了它并不像Web和应用服务器那么容易扩展.在互联网行业海量数据和高并发访问的考验下,聪明的技术人员提出了分库分表技术(有些地方也称为Sharding.分片).同时,流行的分布式系统中间件(例如MongoDB.ElasticSearch等)均自身友好支持Sharding,其原理和思想都是大同小异的. 分布式全局唯一ID 在很多中小项目中,我们往往直接使用数据库自

水平分库分表的关键步骤和技术难点

在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分库所带来的问题和解决方法.本篇中,我们将继续聊聊水平分库分表的一些技巧. 分片技术的由来 关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量.连接数.处理能力等都很有限,数据库本身的"有状态性"导致了它并不像Web和应用服务器那么容易扩展.在互联网行业海量数据和高并发访问的考验下,聪明的技术人员提出了分库分表技术(有些地方也称为Sharding.分片).同时,流行的分布式系统中间件(例如MongoDB.Elas

分库分表的几种常见玩法及如何解决跨库查询等问题

在谈论数据库架构和数据库优化的时候,我们经常会听到"分库分表"."分片"."Sharding"-这样的关键词.让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着一些挑战.让人感到担忧的是,他们系统真的就需要"分库分表"了吗?"分库分表"有那么容易实践吗?为此,笔者整理了分库分表中可能遇到的一些问题,并结合以往经验介绍了对应的解决思路和建议. 垂直分表 垂直分表在日常开

【转】微服务MySQL分库分表数据到MongoDB同步方案

需求背景 近年来,微服务概念持续火热,网络上针对微服务和单体架构的讨论也是越来越多,面对日益增长的业务需求是,很多公司做技术架构升级时优先选用微服务方式.我所在公司也是选的这个方向来升级技术架构,以支撑更大访问量和更方便的业务扩展. 发现问题 微服务拆分主要分两种方式:拆分业务系统不拆分数据库,拆分业务系统拆分库.如果数据规模小的话大可不必拆分数据库,因为拆分数据看必将面对多维度数据查询,跨进程之间的事务等问题.而我所在公司随着业务发展单数据库实例已经不能满足业务需要,所以选择了拆分业务系统同时

当当开源sharding-jdbc,轻量级数据库分库分表中间件

近期,当当开源了数据库分库分表中间件sharding-jdbc. Sharding-JDBC是当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架,实现透明化数据库分库分表访问.Sharding-JDBC是继dubbox和elastic-job之后,ddframe系列开源的第3个项目. Sharding-JDBC直接封装JDBC协议,可以理解为增强版的JDBC驱动,旧代码迁移成本几乎为零. Sharding-JDBC定位为轻量级java框架,使用客户端直连数

Mycat分库分表的简单实践

   MySQL的使用场景中,读写分离只是方案中的一部分,想要扩展,势必会用到分库分表,可喜的是Mycat里已经做到了,今天花时间测试了一下,感觉还不错. 关于分库分表     当然自己也理了一下,分库分表的这些内容,如果分成几个策略或者阶段,大概有下面的几种. 最上面的第一种是直接拆表,比如数据库db1下面有test1,test2,test3三个表,通过中间件看到的还是表test,里面的数据做了这样的拆分,能够咋一定程度上分解压力,如果细细品来,和分区表的套路有些像.   接下来的几类也是不断

透明的分库分表方案

问题提出 随着应用规模的不断扩大,单机数据库就慢慢无法满足应用的需要了,这主要表现在如下方面: 存量数据越来越大,查询速度越来越慢 访问并发越来越大,磁盘IO.网络IO.CPU都慢慢成为瓶颈 事务数越来越多,事务冲突越来越严重,导致TPS越来越少 这个时候,有的人采用了换商用数据库的方案比如Oracle,然后用Oracle的RAC方式进行水平扩展.但是带来的缺点也比较明显,第一是成本太高,一般人吃不消:第二,管理复杂度较单节点有非常大的提升,风险及管理成本也相应增加:第三,对人员的水平要求更高,

mysql 分库分表的方法

分表后怎么做全文搜索 1.merge方式分表(不好) 2. 使用 sql union 3 使用Sphinx全文检索引擎 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. 根据个人经验,MySQL执行一个sql的过程如下: 1,接收到sql;2,把sql放到排队队列中 ;3,执行sql;4,返回执行结果.在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间,第二,