范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

面试官分库分表,真的有必要吗?

  关于数据库分库分表的面试题已经是烂大街了,面经小册各路神仙的经验分享也是不绝于耳。当然现有的技术解决方案已经是很成熟了。
  但是想要使用的得心应手,首先应该搞清楚三个问题?为什么使用分库分表?何时使用分库分表?如何分库分表?为什么使用分库分表?
  答案很简单:当数据库出现性能瓶颈。顾名思义就是数据库扛不住了。
  数据库出现瓶颈,对外表现有以下几个方面?高并发场景下,大量请求阻塞,大量请求都需要操作数据库,导致连接数不够了,请求处于阻塞状态。SQL操作变慢(慢SQL增多)如果数据库中存在一张上亿数据量的表,一条 SQL 没有命中索引会全表扫描,这个查询耗时会非常久。随着业务流量变大存储出现问题,单库数据量越来越大,给存储造成巨大压力。
  从机器角度,性能瓶颈不外乎就是CPU、磁盘、内存、网络这些,要解决性能瓶颈最简单粗暴的方式就是提升机器性能,但是通过这种方式投入产出比往往不高,也不划算,所以重点还是要从软件层面去解决问题。
  数据库相关优化方案
  数据库优化方案很多,主要分为两大类:软件层面、硬件层面。软件层面包括:SQL 调优、表结构优化、读写分离、数据库集群、分库分表等;硬件层面主要是增加机器性能。
  分库分表其实不是数据库优化方案的最终解决办法,一般来说说能用优化SQL、表结构优化、读写分离等手段解决问题,就不要分库分表,因为分库分表会带来更多需要解决的问题,比如说分布式事务,查询难度增大等。何时使用分库分表?
  什么时候我们才会选择分库分表?前面已经说了,除了分库分表以外那些软件手段搞不定的时候,我们才会选择分库分表。
  我们心中可能会有这些疑问?使用分库分表,我们的评判依据是什么?一张表存储了多少数据的时候,才需要考虑分库分表?数据增长速度很快,每天产生多少数据,才需要考虑做分库分表?
  阿里巴巴开发手册有推荐的思路:单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
  注意:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。如何分库分表?
  当前针对分库分表有很多解决方案。这里分两个方面来展开说说:分库 和 分表。分库
  很多项目前期为了快速迭代,多个应用公用一套数据库,随着业务量增加,系统访问压力增大,系统拆分就势在必行。
  为了保证业务平滑,系统架构重构也是分了几个阶段进行。多应用单数据库
  第一个阶段将商城系统单体架构按照功能模块拆分为子服务,比如:Portal 服务、用户服务、订单服务、库存服务等。
  多应用单数据库如上图,多个服务共享一个数据库,这样做的目的是底层数据库访问逻辑可以不用动,将影响降到最低。多应用多数据库
  随着业务推广力度加大,数据库终于成为了瓶颈,这个时候多个服务共享一个数据库基本不可行了。我们需要将每个服务相关的表拆出来单独建立一个数据库,这其实就是"分库"了。
  单数据库的能够支撑的并发量是有限的,拆成多个库可以使服务间不用竞争,提升服务的性能。
  从一个大的数据中分出多个小的数据库,每个服务都对应一个数据库,这就是系统发展到一定阶段必要要做的"分库"操作。分表
  说完了分库,那什么时候才会分表呢?
  如果系统处于高速发展阶段,拿商城系统来说,一天下单量可能几十万,那数据库中的订单表增长就特别快,增长到一定阶段数据库查询效率就会出现明显下降。
  因此当表数据增长过快,根据阿里巴巴开发规范中超过500w的数据就要考虑分表了,当然这只是一个经验值,具体要不要分表还要看业务考虑未来三年的一个业务增量。
  如何分表?
  分表有几个维度,一是水平切分和垂直切分,二是单库内分表和多库内分表。水平拆分和垂直拆分
  拿商品表来说,表中分为几类属性:一类是基础属性,例如:商品名称、通用名,商品编码等信息。二类是规格属性:尺寸、型号等信息。三类是拓展属性:描述商品特征的一些属性。我们可以将其拆分为基础信息表、拓展属性表、属性信息表等。这几张表结构不同并且相互独立。但是从这个角度没有解决因为数据量过大而带来的性能问题,因此我们还需要继续做水平拆分。
  水平拆分表的方法很多种,比如说1w条数据,我们拆分为两个表,id 为基数的放在user1,id为偶数的放在user2中,这样的拆分方式就是水平拆分。
  其他水平拆分的方式也很多,除了上面按照 id 来拆分,还可以按照时间维度拆分,比如订单表,可以按照每日、每月等进行拆分。每日表:只存储当天你的数据。每月表:可以起一个定时任务将前一天的数据全部迁移到当月表。历史表:同样可以用定时任务把时间超过 30 天的数据迁移到 history表。
  总结一下水平拆分和垂直拆分的特点:垂直切分:基于表或者字段划分,表结构不同。水平拆分:基于数据划分,表结构相同,数据不同。根据表中字段的某一列特性,分而治之。
  水平拆分也分两种拆分方式。单库内拆分和多库内拆分单库内拆分和多库内拆分
  拿针对用户表的拆分来举例,之前的单个用户表按照某种规则拆分为多个子表,多个子表存在于同一数据库中。比如下面用户表拆分为用户1表、用户2表。
  单库内拆分是在一个数据库中,将一张表拆分为多个子表,一定程度上可以解决单表查询的性能问题,但是也会遇到另外一个问题:但数据库的数据瓶颈。
  所以在行业内更多的将子表拆分到多个数据库中,如下图,用户表拆分为4个子表,4个子表分两批存在两个不同的数据库中,根据一定的规则进行路由。
  多库拆分用一句话概括:主要是为了减少单张表数据量大小,解决单表数据量过大带来的性能问题。
  但是分库分表也带来许多问题。分库分表带来的问题
  既然分库分表方案那么好,那我们是不是在项目初期就应该采用这种方案呢?莫慌,虽然分库分表解决了很多性能问题,但是同时也给系统带来了很多复杂性。下面我展开说说1. 跨库关联查询
  之前单体项目,我们想查询一些数据,无脑join就好了,只要数据模型设计没啥问题,关联查询起来其实还是很简单的。现在不一样了,分库分表后的数据可能不在一个数据库,那我们如何关联查询呢?
  下面推荐几种方式去解决这个问题:字段冗余:把需要关联的字段放到主表中,避免join操作,但是关联字段更新,也会引发冗余字段的更新;数据抽象:通过ETL 等将数据汇总聚合,生成新的表;全局表:一般是一些基础表可以在每个数据库都放一份;应用层组装:将基础数据查出来,通过应用程序计算组装;同特征的数据在一张表:举个例子:同一个用户的数据在同一个库中,比如说我们对订单按照用户id进行分表,订单主表、订单拓展信息表、跟订单有关联查询的表都按照用户id 进行分表,那么同一个用户的订单数据肯定在同一个数据库中,订单维度的关联查询就不存在跨库的问题了。2. 分布式事务
  单数据库我们可以用本地事务搞定,使用多数据库就只能通过分布式事务解决了。
  常用的解决方案有:基于可靠消息(MQ)的最终一致性方案、二段式提交(XA)、柔性事务。
  当然分布式事务相关开源项目推荐两个:Seata 、TX-LCN
  比较推荐 Seata,阿里出品、大厂加持、如果需要企业级版本支持也是有的。3. 排序、分表、函数计算问题
  使用SQL 时,order by 、limit 等关键字需要特殊处理,一般都是采用数据分片的思路:现在每个分片路由上执行函数、然后将每个分片路由的结果汇总再计算,然后得出最终结果。
  开源的解决方案当然也有不少,比较推荐shardingsphere,无论是基于client 或者 基于数据库proxy的都有支持。4. 分布式ID
  既然分库分表了,主键id已经不能唯一确定我们的业务数据了,随之而来的就是分布式id,顾名思义就是在多个数据库多张表中唯一确定的ID。
  常见的分布式Id 解决方案有:UUID基于全局数据库自增的ID表基于Redis缓存生成全局ID雪花算法(Snowflake)百度uid-generator(雪花算法的变种)美团Leaf(雪花算法的变种)滴滴Tinyid
  这些解决方案后面有专门的文章去介绍,这里不过多展开。5. 多数据源
  分库分表之后可能面临从多个数据库中获取数据,一般的解决方案有,基于 client 适配 和 基于 proxy 适配。
  比较成熟并且常用的中间件有:shardingsphere(apache顶级项目相当成熟,文档完善)MyCat (社区不太活跃、不推荐)总结
  如果遇到数据库问题,建议不要着急分库分表。原则是:能不分库分表就不要做。先看下能否通过常规优化手段解决问题。
  如上所述,引入分库分表虽然可以解决数据库瓶颈问题,但是也给系统带来巨大的复杂性,不是非必须不要使用。设计系统我们一向要本着高可拓展去设计,但是不要过度设计和超前设计。适合当前系统的设计才是最好的。
  作者:爪哇干货分享
  链接:https://juejin.cn/post/7186448714779590711

强硬信号浮现!美债收益再创阶段新高,美股疲弱,中国资产却走强!什么情况?点蓝字关注,不迷路当地时间3月1日,美股三大指数收盘涨跌不一。道指涨0。02,标普500指数跌0。47,纳指跌0。66。大型科技股多数下跌,亚马逊英伟达跌超2。热门中概股表现强劲,求解经济民生关切2023两会十大经济热点前瞻点蓝字关注,不迷路民之所望,政之所向。今年的全国两会,是在全面贯彻落实党的二十大精神开局之年和中国式现代化蓝图铺展后召开的重要会议。开局关乎全局,起步决定进程,两会期间代表委员将围经济总量再上新台阶新动能不断成长经济总量再上新台阶新动能不断成长透视2022年国民经济和社会发展统计公报经济总量突破120万亿元,跃上新台阶全社会研究与试验发展经费(RD)连续7年保持两位数增长全国居民人均可支配俄罗斯能源部批准监测石油出口价格的新程序来源央视新闻客户端俄罗斯能源部3月1日发布公告表示,该部批准了监测俄罗斯石油出口价格的新程序。为落实俄罗斯总统普京就不友好国家对俄石油及石油产品出口实施价格上限采取特别经济措施的总全国政协委员赵心竹全职妈妈学历高稳定务实,再就业有优势全国政协十四届一次会议即将召开,全国政协委员深圳市中意集团有限公司董事长赵心竹准备了将全职妈妈的心声带到全国两会。她在提案中提到,目前就业扶持政策服务对象主要集中在高校毕业生残疾人卜房者说丨新手买房如何避坑?重点关注这些问题视频加载中买房货不对板精装交付降标315来临之际,今天我们就来教教大家买房如何避坑,记得重点关注这些问题。一五证是否有公示?五证中,最重要的是国有土地使用证商品房预售许可证,这两个58同城安居客发布2月国民安居指数报告中证网讯(记者董添)3月2日,58同城安居客发布2023年2月国民安居指数报告。报告显示,2023年2月,全国重点监测65城中,有26城新房价格环比上涨。全国新房热度上升明显,环比情满九道弯29,30叶菲雪中送炭,大茂感激涕零,杨母认孩子情满九道弯29集预告杨树茂因为工地被查封,他全部的资产都压在了工地上,现在日子比较艰难,他与谢志强只能靠跑出租为生。这天有人敲门,谢志强打开门,竟然是叶菲。她进门就说,今天最多能提2023年3月2日,新闻摘要今天是2023年3月2日,让我们来关注五大国际新闻。一,警报再次拉响。近日,美军四架军机在台岛周边附近,其中一架美军雇佣兵的军机逼近了广东汕头。24小时之内,解放军出动了30多架次覆盖37个部门514项应用海南社保卡一卡通用案例在全国复制推广海南日报讯(记者易宗平通讯员李京赟)海南社会保障卡一卡通用作为制度创新案例,得到国家发改委商务部等部门采纳并在全国复制推广。这是日前在全省人力资源和社会保障工作电视电话会议上发布的湖北美院教师被指盗用学生作品参展!学校已成立专班调查核实近日,湖北美术学院雕塑系一名学生实名发文称,自己的课堂作品被学院老师署名盗用,引发关注。3月2日,湖北美术学院工作人员向南都记者表示,正在调查此事。湖北美术学院称已成立专班调查核实
长江上游最大江心岛油菜花开春意浓春日时节,广阳岛上油菜花开得正艳。何蓬磊摄游客在广阳岛赏花游玩。何蓬磊摄广阳岛上,金灿灿的油菜花与田野小径相映成趣。何蓬磊摄游客在广阳岛赏花拍照。何蓬磊摄游客在广阳岛赏花游玩。何蓬财政部透露政策风向标,国企或不再与四大续约?国企或不再与四大会计师事务所续约2月22日,据彭博社报道,CZB等机构对国有企业提出指导性意见,由于在信息安全方面存在风险,要求使用四大国际会计师事务所的国有企业在合同到期后不再与南京观察荐读南京主城向更新要高质量云上顶山智理百姓幸福网长江左岸,如何建起一座世界级产业基地新华日报南京观察(第180期)要闻精彩试读南京主城向更新要高质量随着当下经济增长正在企稳向上,挖掘经济增长的潜力和动力推动经济整体好转正在成为各级政府的第一要务。对于人口占南京近四近日,潘长江因跳舞辣眼,又被网友骂上热搜,还是唯利是图惹的祸近日,潘长江一段撅屁股跳舞的视频又上了热搜,让网友直呼太辣眼。网友之所以对潘长江如此的苛刻,还得从著名的潘嘎之交说起。潘长江到底干了什么?给还不知道这个梗的朋友简单回顾一下。演小兵长江救援志愿队人数涨了4倍,年轻人在队中占一半激流勇进是长江救援志愿队的精神,只要有1的希望,我们就付出100的努力。每当成功挽救生命,大家都无比自豪。长江救援志愿队队长张建民长江救援志愿队总队长张建民(前排右五)与队员在大桥印度尼西亚打算将出口禁令扩大到铝土矿铜等佐科欲发展国内下游产业,但面临贸易摩擦风险工人们站在那里俯瞰印度尼西亚巴布亚省的格拉斯伯格铜矿印度尼西亚总统佐科佐科维维多多今年采取了进一步措施,限制高需求商品的出口,以努力促进资各国国君都是怎么驾崩的?晋景公未进半点甸地麦,已杀一个桑田巫。晋景公是晋国第二十六任国君,春秋霸主晋文公的孙子,他灭掉忠臣赵盾的后代赵同赵括全家,即赵氏孤儿中,灭掉赵氏一族的当政者。在晋景公晚年时,得了一路透社欧洲向美国传输数据安全禁令暂缓执行放脸书数据业务一码中国小康网03月07日讯老马周二,欧洲主要监管机构表示,一项促进欧盟公民个人数据安全传输到美国的新协议可能不会立马生效,避免Facebook的跨大西洋数据流动暂停。脸书母公司老板扎晋国国都古绛之争绛究竟在哪?故绛古绛(故绛,作为历史文化方面的名词使用,意思是过去的晋国都城。古绛,作为地名方面使用,意思是说古老的晋国都城)一翼城之故绛翼城曰绛故城址即今翼城县天马村曲村遗址。周穆王五十二年清朝极刑二龙吐须一碗面条下肚,刑者要生不能,想死不成在古代,想要维护自己的权势,有一个非常严酷的手段刑罚。不论是皇家还是各地官员,从来都以研究刑罚至极而让人谈之色变。有人总结过清朝的十大酷刑,但无非是剥皮腰斩车裂俱五刑凌迟宫刑烹煮缢杨士奇大明第一届内阁首辅,宰相必起于州部,引领文官集团崛起仁宗朱高炽从世子到太子,再到皇帝的一路上,好比天选之子,各种人保驾护航,朱棣靖难老班底金忠首席智囊姚广孝都支持朱高炽,除此以外,还有三人一直对朱高炽忠心耿耿杨士奇杨荣杨溥。杨士奇太