#为什么MySQL数据量大了要分库分表#
是这样的。随着用户量的激增和时间的堆砌,存在数据库里面的数据越来越多,此时的数据库就会产生瓶颈,出现资源报警、查询慢等场景。
首先单机数据库所能承载的连接数、I/O及网络的吞吐等都是有限的,所以当并发量上来了之后,数据库就渐渐顶不住了。再则,如果单表的数据量过大,查询的性能也会下降。因为数据越多 B+ 树就越高,树越高则查询 I/O 的次数就越多,那么性能也就越差。因为上述的原因,不得已就得上分库分表了。把以前存在一个数据库实例里的数据拆分成多个数据库实例,部署在不同的服务器中,这是分库。把以前存在一张表里面的数据拆分成多张表,这是分表。一般而言:分表:是为了解决由于单张表数据量多大,而导致查询慢的问题。大致三、四千万行数据就得拆分,不过具体还是得看每一行的数据量大小,有些字段都很小的可能支持更多行数,有些字段大的可能一千万就顶不住了。
分库:是为了解决服务器资源受单机限制,顶不住高并发访问的问题,把请求分配到多台服务器上,降低服务器压力。顺着这个思路,再接着追问几个常见面试题。你们一般怎么分库的?一般分库都是按照业务划分的,比如订单库、用户库等等。有时候会针对一些特殊的库再作切分,比如一些活动相关的库都做了拆分。因为做活动的时候并发可能会比较高,怕影响现有的核心业务,所以即使有关联,也会单独做拆分。
那你觉得分库会带来什么问题呢? 首先是事务的问题。我们使用关系型数据库,有很大一点在于它保证事务完整性。而分库之后单机事务就用不上了,必须使用分布式事务来解决,而分布式事务基本的都是残缺的(我之前文章把分布式事务汇总了一波,后台搜索分布式事务就有了)。这是很重要的一点需要考虑。 连表 JOIN 问题在一个库中的时候我们还可以利用 JOIN 来连表查询,而跨库了之后就无法使用 JOIN 了。此时的解决方案就是在业务代码中进行关联,也就是先把一个表的数据查出来,然后通过得到的结果再去查另一张表,然后利用代码来关联得到最终的结果。这种方式实现起来稍微比较复杂,不过也是可以接受的。还有可以适当的冗余一些字段。比如以前的表就存储一个关联 ID,但是业务时常要求返回对应的 Name 或者其他字段。这时候就可以把这些字段冗余到当前表中,来去除需要关联的操作。那你们怎么分表的?分表其实有两种:垂直分表水平分表垂直分表,来看个图,很直观:
垂直分表就是把一些不常用的大字段剥离出去。像上面的例子:用户名是很常见的搜索结果,性别和年龄占用的空间又不大,而地址和个人简介占用的空间相对而言就较大,我们都知道一个数据页的空间是有限的,把一些无用的数据拆分出去,一页就能存放更多行的数据。内存存放更多有用的数据,就减少了磁盘的访问次数,性能就得到提升。水平分表,则是因为一张表内的数据太多了,上文也提到了数据越多 B+ 树就越高,访问的性能就差,所以进行水平拆分。
其实不管这些,浅显的理解下,在一百个数据里面找一个数据快,还是在一万个数据里面找一个数据快?即使有索引,那厚的书目录多,翻目录也慢~那分表会有什么问题?垂直分表还好,就是需要关联一下,而水平分表就有点麻烦了。 排序、count、分页问题如果一个用户的数据被拆分到多个表中,那查询结果分页就不像以前单张表那样直接就能查出来了,像 count 操作也是一样的。只能由业务代码来实现或者用中间件将各表中的数据汇总、排序、分页然后返回。像 count 操作的结果其实可以缓存下来,然后每次数据增删都更新计数。
路由问题分表的路由可以分:Hash 路由范围路由路由表Hash 路由,其实就是选择表中的某一列,然后进行 Hash 运算,将 Hash 运算得到的结果再对子表数进行取模,这样就能均匀的将数据分到不同的子表上。这跟 HashMap 选哪个桶是一样的原理。优点就是数据分布均匀。缺点就是增加子表的时候麻烦,想想 HashMap的扩容,是不是得搬迁数据?这个分表也是一样的,我们可都知道,数据迁移一件麻烦事!范围路由,其实很简单,可以是时间,也可以是地址,表示一定的范围的即可。比如本来一张 User 表,我可以分 User_HZ、User_BJ、User_SH,按照地名来划分 User。再比如 log 表,我可以将表分为 log_202103、 log_202104,把日志按照年月来划分。优点就是相对而言比较容易扩展,比如现在来个 GZ,那就加个 User_GZ。如果到了 5 月,那就建个 log_202105。缺点就是数据可能分布不均匀,例如 BJ 的用户特别多或者某个月搞了促销,日志量特别大,等等。路由表,就是专门搞个表来记录路由信息,来看个图就很清楚了。
从图中我们就能得知,UserID 为 2 的用户数据在要去 User_3 这个用户表查询。优点就是灵活咯,如果要迁移数据,直接迁移然后路由表一改就完事儿了~缺点就是得多查一次,每次查询都需要访问路由表,不过这个一般会做缓存的。 全局主键问题以前单表的时候很简单,就是主键自增,现在分表了之后就有点尴尬了。所以需要一些手段来保证全局主键唯一。还是自增,只不过自增步长设置一下。比如现在有三张表,步长设置为3,三张表 ID 初始值分别是1、2、3。 这样第一张表的 ID 增长是 1、4、7。第二张表是2、5、8。第三张表是3、6、9,这样就不会重复了。UUID,这种最简单,但是不连续的主键插入会导致严重的页分裂,性能比较差。分布式 ID,比较出名的就是 Twitter 开源的 sonwflake 雪花算法,具体就不展开了,不然就又是一篇文章了,简单点利用 redis 来递增也行。
那上面说的路由问题的 Sharding-Key 如何设计呢?我们分表是按照某个列来拆分的,那个列就是 Sharding-Key,查询的时候必须带上这个列才行。例如上面提到的 log_202103,那表明查询条件一定得带上日期,这样才能找到正确的表。所以设计上得考虑查询的条件来作为 Sharding-Key。举个常常会被问的订单表 Sharding-Key 例子。你想着查找订单的时候会通过订单号去找,所以应该利用订单 ID 来作为 Sharding-Key。但是你想想,你打开外卖软件想查找你的历史订单的时候,你是没有订单 ID 的,你只有你的 UserID,那此时只能把所有子表都通过 UserID 遍历一遍,这样效率就很低了!所以你想着那用 UserID 来作为 Sharding-Key 吧!
但是,商家呢?商家肯定关心自己今天卖了多少单,所以他也要查找订单,但他只有自己的商家 ID,所以如果要查询订单,只能把所有子表都通过商家 ID 遍历一遍,这样效率就很低了!所以 Sharding-Key 是满足不了所有查询需求的,只能曲线救国。一般做法就是冗余数据。将订单同步到另一张表中给商家使用,这个表按商家 ID 来作为 Sharding-Key,也可以将数据同步到 ES 中。一般而言这里的数据同步都是异步处理,不会影响正常流程。

巴黎上世纪10年代-20年代的时尚/文艺杂志Gazette du Bon Ton一直是我的心头好,这事关注我够久的人都知道。我特别喜欢里面不同供稿作者写的与时尚相关的小文,以时尚为眼,却发散在更深远的地方,都具有很高的文艺价值。一年多之前我就试图开始翻译,想翻几篇发在gz号上分享我的小众快乐,但是不时会被个别处歧义卡住,不想不负责任乱翻,故而仍未发表……

flag+1[晕]

#故纸集#

【眉下切开案例】眉下切我拍过视频写过gz号,不再细说了

解答几个细节小问题:
❶眉毛切掉的部位由于连皮带毛囊,所以眉毛就没有了,眉毛少的宝宝再权衡一下
❷眉下切大家观察切掉部分的形状就能看出来,更针对双眼皮后半部分下垂
❸价格在33-50万日元区间(汇率可以看zfb

保志名/苏雅宏/酒井伦明/坂田和明/酒井直彦/铁铄/松本茂/八衫/山本/广比/永井宏志/加藤一实
#日本整形攻略[超话]##日本整容##日本整形攻略##日本整形##日本医美##日本医美翻译# ​​​


发布     👍 0 举报 写留言 🖊   
✋热门推荐
  • 说实话,封城四十四天了,心情还是挺焦虑的。有句话说“读万卷书行万里路”很庆幸自己之前十几年去了世界那么多地方,看过很多不一样的风景。
  • 答案:❌有的人觉得食物加热后会有营养流失,因此生鸡蛋的营养更丰富。实际上,生鸡蛋不太好消化,而且也容易被细菌污染,有一定的安全风险。
  • ”“如果你真的忘了她,你得向我证明”虽然说老公为了回归确实需要让妻子放下担心,但是如果妻子始终处于一个焦虑的状态,那这段婚姻也很艰难。说到最后我想提醒大家,当然
  • 面对探索中的工艺、设备和没有借鉴的操作模式,齐巍下定了“就是没有石头可摸,也一定蹚过这条河”的决心。④最后,想知道到底发生了什么的,微信转我188肯德基疯狂星期
  •   继续扎根基层,为海南自贸港建设贡献力量  “记得2019年7月份,当时正逢脱贫攻坚大比武检查,有一天妻子突然打来电话,说要去海口住院动手术,希望我回去陪她。
  • 陈松伶在节目中说到:我婆婆没有把我当成女儿,甚至乎在家庭里面,我并不是她会关心的一个对象,她会关心她的外甥女、她的侄女,我可能完全没有在十名以内。不管因为什么原
  • 抽奖情报:▸转 + 关▸奖品列表:① 寿屋 彩虹社 虚拟YouTuber 叶② Myethos G.A.D 鸦③ Myethos G.A.D 貂④ Myeth
  • “关系铁”成为快手达人商业价值共性2021年光合创作者大会公布数据显示,快手70%的GMV来自私域,62%的内容触达来自私域,70%的互动来自私域,高频互动激活
  • 目前持仓上周四干的种子和周五春天换的金城,大满仓中,今天看情况决定去留,别追,你没先手,又去追,我冲高走了又把你留山顶了,又是我的错了。还是我昨天晚上说的那个观
  • 当时因为菩萨相救。心怀感恩便经常去寺庙拜佛捐款。
  • (所以他确定是意外落海的吗)海盗帽子搭配上毕业舞会绶带,酷~☠️ 家有100+本Maisy小鼠波波|版本对比我俩都是Maisy迷 见到Maisy就是收收收一开始
  • ”非要比作人的话,你也应该是拿跟猫智力差不多的作比较——不会说话的两三岁小孩。”大鹏:“你要看钱的话,电影你要进组得3个月,前面还得准备一个月,就是4个月,4个
  • 此外,安谋科技表示鉴于被公司罢免的前 CEO 吴雄昂先生拒不履行董事会决议、肆意挑战法律底线、拒不交出公司管理权,为避免公司和股东利益因此受到侵害、保护公司员工
  • 我非常的喜欢,因为我喜欢以舞蹈表演完成的K-pop ”③媒体C歌曲的种类丰富,不会感到单调成员们的声音也有很不一样的特色在这方面感到不错最吸引我眼光的成员是
  • ♡ 贼好吃的布丁 吃了好久才发 [doge]❤️杭州茉芙甜品屋 12.21[心]#杭州美食探店 测评 推荐or吐槽# #唯有美食不可辜负# #让我养胖你
  • 财富留给子孙,子孙不一定守得住;书本留给子孙,子孙不一定肯去读;唯有积德修善缘,才是为子孙留后福的长久之计。[兔子] 一颗善心,没有恶念,就是最好的护身符了,种
  • #国庆假#day2昨天上午我和老公带着孩子去参观了公公的学校,小玖的爷爷是一名人民教师,在校园里见到了一群可爱有朝气活力的小红领巾们,还在爷爷学校的食堂吃了美味
  • 在那个没有整容,没有美颜滤镜的年代,这样的美人才能称得上是真正的美人,如果刘亦菲的妈妈年轻时也进入娱乐圈,发展的话肯定也能收获不少粉丝。从图片中可以看得出来,曾
  • 对于死亡的那个人来说自己用生命救了爱人不算be吧 留下来的人才最痛苦 失忆了不是好事吗 认识新的人 真心相爱过就够了④追妻火葬场 最后没追到 火葬场的前提不是
  • 【这就是这次双子座水逆的前兆,双子对应的就是新闻传播,也是人言可畏,这个5月估计会有各种假新闻、辟谣和反转,此起彼伏】还记得去年5月袁老去世的假新闻先散播出来么