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

我们为什么要分库分表?

  前言
  大家好,我是 捡田螺的小男孩 ,今天跟大家聊聊分库分表。 什么是分库分表 为什么需要分库分表 如何分库分表 什么时候开始考虑分库分表 分库分表会导致哪些问题 分库分表中间件简介 1. 什么是分库分表
  分库 :就是一个数据库分成多个数据库,部署到不同机器。
  分表 :就是一个数据库表分成多个表。
  2. 为什么需要分库分表2.1 为什么需要分库呢?
  如果业务量剧增,数据库可能会出现性能瓶颈,这时候我们就需要考虑拆分数据库。从这几方面来看: 磁盘存储
  业务量剧增,MySQL单机磁盘容量会撑爆,拆成多个数据库,磁盘使用率大大降低。 并发连接支撑
  我们知道数据库连接是有限的。在高并发的场景下,大量请求访问数据库,MySQL单机是扛不住的!当前非常火的 微服务架构 出现,就是为了应对高并发。它把 订单、用户、商品 等不同模块,拆分成多个应用,并且把单个数据库也拆分成多个不同功能模块的数据库( 订单库、用户库、商品库 ),以分担读写压力。 2.2 为什么需要分表?
  数据量太大的话,SQL的查询就会变慢。如果一个查询SQL 没命中索引 ,千百万数据量级别的表可能会拖垮整个数据库。
  即使SQL命中了索引,如果表的数据量 超过一千万 的话, 查询也是会明显变慢的 。这是因为索引一般是B+树结构,数据千万级别的话,B+树的高度会增高,查询就变慢啦。
  小伙伴们是否还记得,MySQL的B+树的高度怎么计算的呢?  顺便复习一下吧
  InnoDB存储引擎最小储存单元是页,一页大小就是16k。B+树叶子存的是数据,内部节点存的是键值+指针。索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而再去数据页中找到需要的数据,B+树结构图如下:
  假设B+树的高度为2的话,即有一个根结点和若干个叶子结点。这棵B+树的存放总记录数为=根结点指针数*单个叶子节点记录行数。 如果一行记录的数据大小为1k,那么单个叶子节点可以存的记录数  =16k/1k =16 .非叶子节点内存放多少指针呢?我们假设主键ID为 bigint类型,长度为8字节 (面试官问你int类型,一个int就是32位,4字节 ),而指针大小在InnoDB源码中设置为6字节,所以就是 8+6=14  字节,16k/14B =16*1024B/14B = 1170
  因此,一棵高度为2的B+树,能存放 1170 * 16=18720 条这样的数据记录。同理一棵高度为3 的B+树,能存放1170 *1170 *16 =21902400 ,大概可以存放两千万左右的记录。B+树高度一般为1-3层,如果B+到了4层,查询的时候会多查磁盘的次数,SQL就会变慢。
  因此单表数据量太大,SQL查询会变慢,所以就需要考虑分表啦。 3. 如何分库分表3.1 垂直拆分
  3.1.1 垂直分库
  在业务发展初期,业务功能模块比较少,为了快速上线和迭代,往往采用单个数据库来保存数据。数据库架构如下:
  但是随着业务蒸蒸日上,系统功能逐渐完善。这时候,可以按照系统中的不同业务进行拆分,比如拆分成 用户库、订单库、积分库、商品库 ,把它们部署在不同的数据库服务器,这就是 垂直分库 。
  垂直分库,将原来一个单数据库的压力分担到不同的数据库,可以很好应对高并发场景。数据库垂直拆分后的架构如下:
  3.1.2 垂直分表
  如果一个单表包含了几十列甚至上百列,管理起来很混乱,每次都 select * 的话,还占用IO资源。这时候,我们可以将一些不常用的、数据较大或者长度较长的列拆分到另外一张表。
  比如一张用户表,它包含 user_id、user_name、mobile_no、age、email、nickname、address、user_desc ,如果email、address、user_desc 等字段不常用,我们可以把它拆分到另外一张表,命名为用户详细信息表。这就是垂直分表
  3.2 水平拆分3.2.1 水平分库
  水平分库是指,将表的数据量切分到不同的数据库服务器上,每个服务器具有相同的库和表,只是表中的数据集合不一样。它可以有效地缓解单机单库的性能瓶颈和压力。
  用户库的水平拆分架构如下:
  3.2.2 水平分表
  如果一个表的数据量太大,可以按照某种规则(如 hash取模、range ),把数据切分到多张表去。
  一张订单表,按 时间range 拆分如下:
  3.3. 水平分库分表策略
  分库分表策略一般有几种,使用于不同的场景: range范围 hash取模 range+hash取模混合 3.3.1 range范围
  range,即范围策略划分表。比如我们可以将表的主键,按照从 0~1000万 划分为一个表,1000~2000万 划分到另外一个表。如下图:
  当然,有时候我们也可以按时间范围来划分,如不同年月的订单放到不同的表,它也是一种range的划分策略。
  这种方案的优点: 这种方案有利于扩容,不需要数据迁移。假设数据量增加到5千万,我们只需要水平增加一张表就好啦,之前 0~4000万 的数据,不需要迁移。
  缺点: 这种方案会有热点问题,因为订单id是一直在增大的,也就是说最近一段时间都是汇聚在一张表里面的。比如最近一个月的订单都在 1000万~2000 万之间,平时用户一般都查最近一个月的订单比较多,请求都打到order_1 表啦,这就导致数据热点 问题。3.3.2 hash取模
  hash取模策略:指定的路由key(一般是user_id、订单id作为key)对分表总数进行取模,把数据分散到各个表中。
  比如原始订单表信息,我们把它分成4张分表:
  比如id=1,对4取模,就会得到1,就把它放到 t_order_1 ;id=3,对4取模,就会得到3,就把它放到 t_order_3 ;
  这种方案的优点: hash取模的方式,不会存在明显的热点问题。
  缺点: 如果一开始按照hash取模分成4个表了,未来某个时候,表数据量又到瓶颈了,需要扩容,这就比较棘手了。比如你从4张表,又扩容成 8 张表,那之前id=5 的数据是在(5%4=1 ,即t_order_1 ),现在应该放到(5%8=5 ,即t_order_5 ),也就是说历史数据要做迁移了 。3.3.3 range+hash取模混合
  既然range存在热点数据问题,hash取模扩容迁移数据比较困难,我们可以综合两种方案一起嘛,取之之长,弃之之短。
  比较简单的做法就是,在拆分库的时候,我们可以先用 range范围 方案,比如订单id在 0~4000万 的区间,划分为订单库1 ;id在4000万~8000万 的数据,划分到订单库2 ,将来要扩容时,id在8000万~1.2亿 的数据,划分到订单库3 。然后订单库内,再用hash取模的策略,把不同订单划分到不同的表。
  4. 什么时候才考虑分库分表呢?4.1 什么时候分表?
  如果你的系统处于快速发展时期,如果每天的订单流水都新增几十万,并且,订单表的查询效率明变慢时,就需要规划分库分表了。一般B+树索引高度是2~3层最佳,如果 数据量千万级别 ,可能高度就变4层了,数据量就会明显变慢了。不过业界流传,一般500万数据就要 考虑分表 了。 4.2 什么时候分库
  业务发展很快,还是多个服务共享一个单体数据库,数据库成为了性能瓶颈,就需要考虑分库了。比如订单、用户等,都可以抽取出来,新搞个应用(其实就是微服务思想),并且拆分数据库(订单库、用户库)。 5. 分库分表会导致哪些问题
  分库分表之后,也会存在一些问题: 事务问题 跨库关联 排序问题 分页问题 分布式ID 5.1 事务问题
  分库分表后,假设两个表在不同的数据库,那么本地事务已经无效啦,需要使用分布式事务了。 5.2 跨库关联
  跨节点Join的问题:解决这一问题可以分两次查询实现 5.3 排序问题
  跨节点的count,order by,group by以及聚合函数等问题:可以分别在各个节点上得到结果后在应用程序端进行合并。 5.4 分页问题方案1:在个节点查到对应结果后,在代码端汇聚再分页。 方案2:把分页交给前端,前端传来pageSize和pageNo,在各个数据库节点都执行分页,然后汇聚总数量前端。这样缺点就是会造成空查,如果分页需要排序,也不好搞。 5.5 分布式ID
  数据库被切分后,不能再依赖数据库自身的主键生成机制啦,最简单可以考虑UUID,或者使用雪花算法生成分布式ID。 6. 分库分表中间件
  目前流行的分库分表中间件比较多: cobar Mycat Sharding-JDBC Atlas TDDL(淘宝) vitess
  最后
  如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看,您的支持是我坚持写作最大的动力。
  来源:https://mp.weixin.qq.com/s/JmgRkVM5J6Wj8lbqH6iX1g

今年火了一种靴子新穿法,叫靴子裹裤子,瞧三木的街拍,多美虽然我总是告诫大家平时穿衣不要盲目跟风,适合自己才可以。但适当尝试一些当下很流行的新穿搭,反而能给人一种眼前一亮的效果,可以大大提升整个造型时髦度和辨识度。比如冬季的靴子,很多人都个子越矮越要会穿衣,为你分享27套冬季优雅搭配,时尚保暖显气质相信很多人对胖女孩或者小个子女生都存有偏见,觉得无论是身材胖还是个头矮,在穿衣打扮上一定都没有什么优势,也难以穿得精彩。其实随着时尚发展,这些偏见早就过时了,很多在时尚圈崭露头角圈悲催是悲催者的明信片,2021世界乒羽足篮坛最失意的6个人2021年就要过去了,这一年世界体坛举办了许多大赛,产生了很多世界冠军。那么,细细盘点这一年的世界乒坛世界羽坛世界足坛和世界篮坛,哪些人最失意呢?笔者以为,不外乎以下6个人。对于世奥运冠军玩指压板,被迫穿冰鞋不敢动,这档综艺刷新我对冠军认识你见过冬奥短道速滑冠军,在赛道上奔跑吗?见过短跑冠军上冰,在滑冰场摔倒吗?大家也知道,最近冬奥会快到了。飘本身是一个不怎么喜欢运动的人。夏季运动还有点了解,冬季运动更是一窍不通。而蒙古著名歌手吉布呼楞发声对因兴奋剂问题禁赛摔跤手的看法蒙古国大呼拉尔前委员吉布呼楞发声,表达了他对由于先后2次被兴奋剂检测问题被取消8年摔跤权的额奥云包勒德的看法。他说我不认识这个兄弟,虽然未曾谋面,他也是我们的弟弟。他是我们340万辽篮功勋外援巴斯退役,马尚准备复出,蒋指导暂不随队出征长春CBA三则消息,一是前辽宁男篮功勋大前锋巴斯在个人社媒官宣,就此退役,不在参加比赛!1985年出生的布兰登巴斯已经36岁,据悉,巴斯退役后将会专心开办篮球培训营。辽宁球迷不会忘记,复兴可期!巴萨下赛季打造梦幻三叉戟,签哈兰德困难不在转会费欧冠小组赛末轮客战拜仁这样的生死战,西甲主场打埃尔切这样的弱旅,哈维皆让登贝莱首发。倒不是巴萨当年花了1。5亿欧元买来的新星真的打出了超过姆巴佩的水准,而是蜀中无大将,廖化当先锋。现在归化他还来得及吗?35岁伊沃今天中超3次过人太强悍中超联赛今天开启了第18轮保级组的争夺,而在下午结束的一场保级组强强对话中,河南嵩山龙门就2比0完胜上海申花,球队35岁的老将伊沃再次首发出场,他在比赛中不仅策动了第1个进球,而且年龄大了要适当忌口!为你总结4种食物,为了健康能少吃就少吃年纪大了就得多吃肉,这样才能营养丰富。瞎说,年纪大了预防心血管疾病,就得少吃,别在这里瞎误导别人。秦大爷和刘大爷就吃饭的问题,当着大家伙儿的面吵起来,两人话赶话的甚至打起来,要不是如果不差钱,冬至过后,家人的饮食要做4个改变!身体暖暖过寒冬导语如果不差钱,冬至过后,家人的饮食要做4个改变!身体暖暖过寒冬这时间过得真快,前几天还在想冬至吃什么馅的饺子,昨天就过完了!总感觉今年的冬天比以往的更冷一些,虽然家里供暖有234人过50岁,建议做好这4件事,可以延缓衰老,对身体健康有好处孔子曰三十而立,四十而不惑,五十而知天命,五十岁是一个充满智慧的年纪,这个阶段的人,经历了生活的各种打磨,看清了生命的意义,也有了丰富的人生阅历,懂得了生存之道。这样一个关键时刻,
儿童多动症会发展成精神病吗?关爱儿童健康多动症会发展成精神疾病吗?多动症的孩子通常不会发展成精神疾病或者是神经病。因为多动症和精神疾病属于两种不同的疾病。多动症并不会刺激神经系统引起精神疾病的发生。动症是因为大脑发育异常新工体首秀有多火爆?46818人现场观战中超金牌球市归来北京时间4月15日,新北京工人体育场正式对公众亮相,历时两年多改造后新工体迎来首场比赛,在中超新赛季揭幕之夜,国安遗憾未能取得开门红,最终主场11战平梅州客家。虽然结果并不圆满,但济南科创金融论坛现场,济南基金行业白皮书正式发布2023济南科创金融论坛日前在济南举行,在论坛举办现场,作为济南科创金融建设的成果之一,继20202021年之后,4月15日,又一本集聚着济南基金行业人汗水和智慧的行业白皮书202压力山大!国美减持这家A股公司还钱中关村(000931)迎来国美减持时刻。4月14日晚间公告显示,中关村的控股股东国美控股拟减持公司不超6的股份。其中,以集中竞价交易方式减持不超过1506。25万股,即不超过公司总安阳试胆石被当地政府摧毁,网友称是毁坏自然景观,不负责任什么叫试胆石?其实是天然形成的一块悬空的石板,薄薄的一层,脚下便是悬崖峭壁。欧美的很多年轻人特别喜欢在试胆石上打卡拍照,看起来很美很震撼。这样的地质奇观虽然有不少,但是完美的却比较辣白菜的正宗做法,10几年老配方,所有家庭都适用,全家都爱吃辣白菜是一种朝鲜半岛的风味美食,爱看韩剧的朋友们应该对剧中经常出现的食物印象比较深刻。最常见的韩国泡菜就是发酵的辣白菜,吃起来很爽口。色白带红,四季皆宜。辣白菜火锅辣白菜炒饭辣白菜神马来了,上新!近日,甘肃省博物馆推出新品神马咖啡,其可爱又魔性的形象受到游客热捧。前几年来甘博参观时就喝过铜奔马文化咖啡,没想到这次来又品尝到了这么可爱的新品。来自浙江的游客王令梅说,而且这次又五十多岁夫妻俩在广西北海旅行,买到假珍珠后,丈夫居然不慌不忙旅行的意义不单是欣赏沿途的风景,我认为了解当地的风土人情,接触各种人与事,体味世间百态,这才是我喜欢旅行的真正原因。我的旅行计划,在念大学时期便开始萌发,我想在一个时期内能够基本走杨毅预测京辽系列赛辽宁主线两人状态差,北京有机会淘汰辽宁CBA季后赛附加赛已经结束,上海队北京队广州队和广厦队如愿晋级八强。那么四分之一决赛的对阵是上半区,浙江队VS广州队,深圳队VS上海队。下半区,广东队VS广厦队,辽宁队VS北京队。乡村爱情16年,9位女星现状,有人丈夫入狱,有人无戏可拍2006年乡村爱情在央视一套黄金时段播出,该剧聚焦在东北一个小山村之中,通过村里青年的婚姻爱情人情冷暖,乡邻关系,展现了农村家长里短接地气的故事。此剧播出后火遍大街小巷,独树一格的更像人?智己NOA开启AI司机模式NOA是干嘛的?和你有什么关系?家人们,家人们刚看了这智己NOA的发布会,高速高架NOA即将上线。我真的是被燃到了。汽车智能化的时代离我们又近了一点。智己的NOA,简单的理解就是AI的司