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

面试没有分库分表经验,就看这篇

  背景
  分库分表的产生背景主要源于大规模互联网应用的需求。随着互联网应用的不断发展,数据量和访问量不断增加,单一的数据库往往无法满足应用的需求。传统的垂直扩展方式(增加更多的硬件资源)存在成本高、扩展能力受限等问题,因此水平扩展方式逐渐成为了主流。
  同时,互联网应用的访问模式也日益复杂。传统的主从复制架构难以满足高并发、高可用、高扩展等需求。而分库分表可以通过将数据分散到多个数据库中,并通过一定的策略将请求路由到合适的数据库上,从而提高系统的性能和可用性。
  因此,分库分表成为了互联网应用中常用的数据库扩展方案之一。
  什么是分库分表
  分库分表是一种数据库拆分技术,旨在通过将数据分散存储在多个数据库中,从而提高数据库的性能和扩展性。
  分库:一个大型数据库被分成多个较小的数据库,每个数据库被称为"分库"。
  分表:每个分库又被进一步分成多个表,每个表被称为"分表"。
  这种拆分可以在多个物理服务器上进行,也可以在同一台服务器的不同实例上进行。  分库分表的进化
  现在我们详细说一下从单库的进化过程和好处。
  最开始单数据库,但是随着业务量的提升,整体QPS不断增大。假设这时候的单机硬件资源无法再提高,那我们就可以考虑增加从库,将读压力转移到从库上。
  但是随着业务进一步增长,主库的写压力也越来越大,这时候会出现两种情况:单表数据量过多,大表查询速度变慢;或者总体的IOPS压力已经很大。
  对于单表查询压力过大的问题,我们可以判断查询的数据是否可以按照创建时间区分为冷热数据,如果可以优先考虑分区表。如果查询场景复杂我们可以考虑拆表,即使是在同一个数据库中,拆表也可以有效降低索引层级,加快查询速度。但是如果是IOPS压力大,则无法很好的缓解这个问题,证明单机性能已经到了瓶颈需要进行分库。  表分区(Table partitioning)和分区表(Partitioned table)是两个相关但不同的概念。
  表分区是指将一个大表(Table)划分成更小的、可管理的部分,这些部分被称为分区(Partition)。每个分区都包含表的一部分数据,可以根据不同的分区策略进行划分,例如按时间、按地理位置等。
  分区表是指已经进行了分区的表。在分区表中,每个分区都被视为一个独立的表,可以对每个分区进行单独的操作,例如查询、添加、删除等。分区表的分区结构使得数据访问更加高效,可以只查询或操作特定的分区,而不需要扫描整个表。
  因此,表分区和分区表的区别在于,表分区是一种数据管理技术,用于将大表划分成更小的、可管理的部分,而分区表是指已经进行了分区的表,可以根据分区结构进行更加高效的数据访问和操作。
  为什么一般不使用分区表?
  1)分区表如果查询条件没有分区键,很容易出现全表锁 2)一旦数据量并发量上来,如果在分区表实施关联,就是一个灾难 3)自己分库分表,行为更可控
  一旦可以拆库,那复杂性就会大大提升。之前即使是分表至少写数据可以在一个数据库中进行,有本地事务保证数据的一致性。但是分成多个数据库之后,就失去了这种保证。并且可能因为不知道数据在哪些分库上,在查询数据的时候也有可能会造成访问多个数据库节点,这就需要我们采用合理的数据分配方式、
  如果分库逐渐产生了性能问题,我们可以进一步拆表,或者继续拆库。这就需要我们的数据分片方案具有良好的扩展性,为未来的数据量增长提供预方案。当然,我们并不能无限制的去拆库,毕竟存储资源是有限的。
  上面的演进思路主要是从性能上来考虑。其实我们还容易忽略一个问题就是可用性上。机器总是有可能发生意外的,尤其现在我们都采用云服务器,我们的数据安全不能依赖于服务商。
  除了传统的部署架构层面提升可用性,比如主从结构、主主结构,我们还可以从数据的拆分上来考虑,毕竟鸡蛋不要放在一个篮子里。
  如果数据拆成了4份,单个数据库发生故障,影响范围就是25%,如果没有进行分库那就是100%不可用。、
  总的来说,分库分表大大提升了数据库的性能以及可用性。  准备阶段判断是否需要分库分表
  其实在上一段关于分库分表的进化历程,已经讲述了关于分库分表方案的选择思路。
  一般来说,在数据库层我们至少都采用了主从的高可用架构,分区表又不常使用,所以这里更多考虑是采用分库还是分表,这需要根据我们当前系统的具体情况来做选择。
  场景方案 单表数据量过大,总体QPS不高分表单库 IOPS 过高、QPS过高、数据库连接数不够用分库 总体数据量过高、连接数不足分库分表 确定分片方案
  在我们确定了是选择分库还是分表之后就需要对具体的分片规模做选择,分多少库多少表,这直接关系到我们的资源情况以及数据切分方案。  分表数量
  如果选择分表方案,需要确定要分多少表,这需要根据我们的数据的增长速度、业务目标以及设计使用年限来做规划。
  我们这里以订单系统作为业务背景,假设我们系统初始情况下单日有1w订单量,但是按照现有的业务发展速度,计划到年底增加到单日10w订单,系统设计目标是5年,那么我们就需要按照10w来计算。  估算数据量: 10w*365*5 = 18250w  5年后我们将拥有18250w数据,假设单表500w数据。 计算分表数: 18250/500=36.5 考虑到未来业务的增长,那我们就按照 64 张表来拆分 分库数量
  如果选择分库,思路跟分表有一些不同,除了考虑数据量的拆分,我们还需要考虑到一些高并发场景,比如搞一些营销活动或者遇到节日。这种情况下业务的QPS会大量增加,我们需要根据高峰QPS估算业务资源配置情况,适当增加资源。
  比如日常峰值 300QPS,但是节日高峰时候会达到20倍也就是6k,如果每个连接的平均查询耗时是0.2秒,则每个数据库连接的最大并发数是5,则平均连接数为6000/5 = 1200。如果单个数据库最大连接数是500,那么我们需要至1200/500=2.4,所以取近似 4个数据库。
  对于数据库最大连接数的配置,我们需要根据库服务器的硬件配置以及结合业务压测来确认。  切分维度选择
  一般来说,我们对于数据的切分有两个维度,水平切分和垂直切分,当然他们也可以结合使用  水平切分
  水平切分(Horizontal Sharding)是将一个大型数据库表按照某个规则(如数据范围、哈希值、轮询等)分成多个较小的表,分布在多个数据库节点上。例如,将一个用户表按照用户ID分成多个小表,每个小表存储一部分用户数据,分布在不同的数据库节点上。水平切分可以解决单个数据库性能瓶颈和单点故障问题,提高数据库的可扩展性和可用性。
  简单来说,水平切分就是按照一定规则把一个表不同行拆分到不同表中。
  垂直切分
  垂直切分(Vertical Sharding)是将一个大型数据库表按照业务功能(如用户信息、订单信息、商品信息等)拆分成多个表,每个表存储不同的字段和数据。例如,将一个包含用户信息、订单信息和商品信息的大型表拆分成三个小表,每个小表只存储对应的信息。垂直切分可以将数据库的读写压力分散到不同的表和数据库节点上,提高数据库的性能和可维护性。
  除了数据量角度,也可以从频繁写入的角度来看。如果一张表有20个字段,其中只有5个字段需要频繁修改,那么可以考虑把这5个字段拆分到子表。避免在修改这5个数据时,影响到其余15个字段的查询行锁定。
  简单来说,垂直切分就是把一张表不同字段拆分到不同的表里。
  Sharding 方案
  除了在同一个数据库去垂直拆分表,其他方案都逃不过一个问题:选择哪个列作为拆分表的依据?sharding 的算法是什么?  选择拆分的列
  选择一个合适的列作为分库分表的依据非常重要,我们可以称其为 Sharding Key。他的选择直接影响到了我们的数据分布均匀程度以及以后的查询效率。
  通常来说互联网C端应用都是直接面对客户,用户在App端的操作很多都是在查询自己的数据,所以所以比如用户系统的表做切分,我们可以选择用户id这个列来做 Sharding Key。并且用户id通常来说都是有序自增的,如果用户量很大的情况下,在不同分片中的数据分布也会较为均匀。
  如果是B端系统有些场景可能会不一样些。比如现在有一个ERP系统,每天会产生大量的计划单数据,但是这些数据主要是给工厂和运营人员去使用的,并没有那么高的并发量。而且这种数据有个特点,只关注近期的数据,这种情况下我们就可以按照创建时间去分片。  不同维度数据怎么查询
  分库分表一个狠大的弊端就是查询数据非常不方便。
  如果是订单系统可能就会更复杂一些,当我们同样使用用户id做切分后,但是如果需要按照订单id查询呢?那就不知道这个订单属于哪个用户,该从哪个分片去查询,那就只能把每个分片都去查询一遍,可向这个效率有多低。
  既然这样,我不用用户id作为sharding key了,换成订单id可以吧。虽然解决了订单id的查询问题,但是现在只有用户id又怎么查询呢?这显然是行不通的。
  首先可以肯定一件事情,每一条订单数据一定包含一个列就是用户id,我们的问题在于知道订单id却不知道在哪个分片,那我们在订单生成规则里附加一下对应用户的id信息不就可以了嘛。比如下面的订单id生成规则:
  6位日期+2位版本号+4位用户id后四位+8位订单号
  总结一下 :我们的解决思路是把其他维度数据的生成规则中带有 Sharding Key的一部分,这样就知道了分片信息。
  但是如果条件不止一个呢?我还想按照商户维度去查询,希望看到每个商家售卖出的商品数据,或者年度的报表数据。或者按照发货的快递号去查询,快递号都是快递公司生成的,你总不能按照自己的规则去改写把。
  这种情况下,可以采用空间换时间的思维去解决。  可以把需要查询的数据同时同步到一个按照商家id分片的读库里,专门用作查询目的。  或者可以将数据同步给数仓,数据部门去处理这些信息,然后生成对应的报表信息。  或者专门做一个快递单号和订单号的映射表,需要根据快递号查询可以先去这个映射表中找到对应id,然后再找到对应的分库。
  至于选择什么分片算法,我们下篇继续,请继续关注!
  原文链接;https://mp.weixin.qq.com/s/j9bHzVGpaeKZoR_rSygX7A

电讯报曼城对科瓦西奇感兴趣,瓜迪奥拉很欣赏他直播吧2月28日讯据每日电讯报报道,曼城队对切尔西中场科瓦西奇有感兴趣,主帅瓜迪奥拉十分欣赏球员,曼城将有可能与切尔西展开竞争。科瓦西奇是目前切尔西阵中几位在2024年即将合同到期(星空有约)3月2日傍晚,夜空中最亮的两颗星星浪漫相拥新华社天津2月28日电(记者周润健)夜空中最亮的两颗星星金星与木星浪漫相拥是一种怎样的视觉感受?机会来了。3月2日傍晚时分,这两颗明亮的天体会在西方天空近距离相合,上演星星相吸。天人山人海书山书海出版风向标释放复苏信号这是2月24日拍摄的第35届北京图书订货会现场。新华社记者鞠焕宗摄展示图书40万余种参展参观人数超10万人次举办文化活动300余场中国出版协会中国书刊发行业协会主管主办的第35届北紫金e评多一些建设性批评当前,各地正在开展党组织民主生活会组织生活会,批评和自我批评是其中的关键环节之一。批评和自我批评是党的优良传统,是净化党内风气的锐利武器,是促进自我革命的苦口良药。用好这一武器和良卡特生涯荣誉文斯卡特(VinceCarter,1977年1月26日),出生于佛罗里达州代顿海滩市,前美国篮球运动员,司职得分后卫小前锋,现为NBA职业篮球评论员,外号加拿大飞人半人半神扣篮王。有人豪掷千金有人ampampquot玩不起ampampquot!基金公司打广告找到了新阵地,吸粉效果如何?近日,证券时报券商中国记者在出差途中注意到,机场已经成为了基金公司品牌宣传的又一个重要阵地。在走向登机口的路上,由公司格言品牌标志APP下载二维码组成的基金公司广告墙格外吸睛。类似开拓汽车配套产业链新天地来源经济日报图为天津市企业研发的纯太阳能驱动的天津号高等级智能网联汽车。(资料图片)从汽车坐垫到动力电池组,从传统零散配件到整车研发,从智能网联汽车到自主创新天津号太阳能汽车过去1红星耀中华视频加载中来自南非的杜安睿17岁时便有了一个中国梦,迟迟未能实现。二十年后,他终于如愿来到中国,如今他已在中国生活七年,成为活跃在短视频平台的云南阿杜。他着迷于云南多姿多彩的民族文伦纳德威少完成了很棒的工作,他一直在推动比赛的节奏快船以175176不敌国王。赛后,快船球员科怀伦纳德接受媒体采访,谈到了本场比赛。这么高分的比赛真的是太疯狂了,每个人都在不断地命中投篮。这真的太扯了。伦纳德在采访中表示。在谈到队记者手记关门兔收容车和老朋友新华社广州2月27日电(记者王浩明)26日的横琴马拉松,当记者跑过终点线,回头看看,终于松了一口气。21公里,记者一路被关门兔和收容车追着跑,最终2小时50分完赛,距离半马关门时间记者签威少是因为球队渴望控卫,然而却不让他来终结比赛今日,NBA常规赛快船124134不敌掘金。本场比赛,威斯布鲁克首发出战25分钟,投篮10中6,其中三分球2中1,罚球4中4,砍下17分5篮板4助攻5抢断。但是在第四节和加时赛都没
微软收购动视暴雪,醉送之意不在索尼而在苹果今年年初游戏行业发生了一件大事,那就是微软方面宣布以史无前例的687亿美元巨资收购动视暴雪。而这一举措除了或将改变游戏业的版图外,关于这次收购的审查也可谓是好戏连台。日前,索尼方面暗黑不朽近6千共鸣度账号卖61000,值吗?迄今为止,国服暗黑不朽已经运营了三个月左右,但在最近退坑狂潮蜂拥而至。原因是不少老玩家账号起来了,就陆续开始想变现了。其次,同是暗黑类手游的火炬之光无限和十三月开服,选择变多了,退一个可以让智能手机变成游戏机的手柄?GAMESIRX2Pro游戏手柄开箱简约大气的方形包装,清晰明了的产品介绍,和最吸引我的手柄造型,以及那颗绿色的微软西瓜认证图标。打开包装后里面有一个GAMESIRX2Pro游戏手搞笑合集有你们真是老板的福气!快来看看工作中的卧龙凤雏哈哈关注我,想与你分享更多有趣的内容。拿来吧你!看来大师兄又触犯天条了!小伙子最后的姿势也很帅!烈焰红唇杯,单身的你值得拥有!原来,它是在向我求救!游戏玩多了总会有些奇奇怪怪的后遗症,守望先锋归来角色堡垒和托比昂10月25日回归今天(10月20日),守望先锋的商务总监兼暴雪副总裁乔恩斯佩克特(JonSpector)宣布,守望先锋归来中的角色堡垒和托比昂将于10月25日回归,地图渣镇也将于当天重新开放。守望咒术回战首度与大阪环球影城合作,展示咒术师与恶灵的激战大阪环球影城(USJ)在2022年9月16日起推出了以咒术回战为主题的全新游乐设施咒术回战THEREAL4D,这是大阪环球影城与咒术回战的首次合作,游戏中不仅可以体验到3D影像,为心脑血管心跳慢更健康?有这些症状抓紧就医很多人认为,心率过快是疾病信号,而心跳率是健康的标识,更有利于健康长寿,事实真的是这样吗?正常情况下,心脏的跳动是由起搏和传导系统的最高司令部窦房结发动的,称为窦性心律。心率过快过不熬夜,是对身体最大的自律近日,JAMANetwOpen杂志发表的研究表明,女性睡得晚和夜间睡眠时间短会导致全身肥胖和腹部肥胖的风险增加。也就是说,睡得晚,会变胖。你有多久没睡一个好觉了?我们总是在白天拼命膝骨关节炎的三个阶段,您在哪个阶段?1什么是膝骨关节炎?膝骨关节炎是膝关节软骨退行性病变和骨质增生为特征的慢性关节疾病。膝关节炎的损伤包括两个部分,一个是膝关节里面的软骨,这个大家都知道。但是还有一个也很重要,就是关50岁以后,还活力充沛的人,平时多半有这4个好习惯过了50岁依然精神状态好,保持富有活力状态,是因为生活中有坚持良好的习惯,通过不断调节来延缓衰老,提高器官功能,坚持下来自然远离疾病,没有疾病困扰,保持精神旺盛不成问题。因此,在保胆囊结石术后我们该怎么吃?一个功能丧失的胆囊,类似于一个装满石子污泥的盲袋,一个不时发生感染的盲袋,一个纤维增厚丧失功能流通不畅的淤塞湖,这样的胆囊该不该保留?不该!胆囊结石的治疗包括保守治疗及手术治疗,手