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

MySQL数据库性能优化之分区分表分库

  分表是分散数据库压力的好方法。
  分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库。
  当然,首先要知道什么情况下,才需要分表。个人觉得单表记录条数达到百万到千万级别时就要使用分表了。
  分表的分类
  **1、纵向分表**
  将本来可以在同一个表的内容,人为划分为多个表。(所谓的本来,是指按照关系型数据库的第三范式要求,是应该在同一个表的。)
  分表理由:根据数据的活跃度进行分离,(因为不同活跃的数据,处理方式是不同的)
  案例:
  对于一个博客系统,文章标题,作者,分类,创建时间等,是变化频率慢,查询次数多,而且最好有很好的实时性的数据,我们把它叫做冷数据。而博客的浏览量,回复数等,类似的统计信息,或者别的变化频率比较高的数据,我们把它叫做活跃数据。所以,在进行数据库结构设计的时候,就应该考虑分表,首先是纵向分表的处理。
  这样纵向分表后:
  首先存储引擎的使用不同,冷数据使用MyIsam 可以有更好的查询数据。活跃数据,可以使用Innodb ,可以有更好的更新速度。
  其次,对冷数据进行更多的从库配置,因为更多的操作时查询,这样来加快查询速度。对热数据,可以相对有更多的主库的横向分表处理。
  其实,对于一些特殊的活跃数据,也可以考虑使用memcache ,redis之类的缓存,等累计到一定量再去更新数据库。或者mongodb 一类的nosql 数据库,这里只是举例,就先不说这个。
  **2、横向分表**
  字面意思,就可以看出来,是把大的表结构,横向切割为同样结构的不同表,如,用户信息表,user_1,user_2等。表结构是完全一样,但是,根据某些特定的规则来划分的表,如根据用户ID来取模划分。
  分表理由:根据数据量的规模来划分,保证单表的容量不会太大,从而来保证单表的查询等处理能力。
  案例:同上面的例子,博客系统。当博客的量达到很大时候,就应该采取横向分割来降低每个单表的压力,来提升性能。例如博客的冷数据表,假如分为100个表,当同时有100万个用户在浏览时,如果是单表的话,会进行100万次请求,而现在分表后,就可能是每个表进行1万个数据的请求(因为,不可能绝对的平均,只是假设),这样压力就降低了很多很多。
  延伸:为什么要分表和分区?
  日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。
  什么是分表?
  分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的子表名,然后去操作它。
  什么是分区?
  分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器。分区后,表面上还是一张表,但数据散列到多个位置了。app读写的时候操作的还是大表名字,db自动去组织分区的数据。
  **MySQL分表和分区有什么联系呢?**
  1、都能提高mysql的性高,在高并发状态下都有一个良好的表现。
  2、分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。
  3、分表技术是比较麻烦的,需要手动去创建子表,app服务端读写时候需要计算子表名。采用merge好一些,但也要创建子表和配置子表间的union关系。
  4、表分区相对于分表,操作方便,不需要创建子表。
  我们知道对于大型的互联网应用,数据库单表的数据量可能达到千万甚至上亿级别,同时面临这高并发的压力。Master-Slave结构只能对数据库的读能力进行扩展,写操作还是集中在Master中,Master并不能无限制的挂接Slave库,如果需要对数据库的吞吐能力进行进一步的扩展,可以考虑采用分库分表的策略。
  **1、分表**
  在分表之前,首先要选中合适的分表策略(以哪个字典为分表字段,需要将数据分为多少张表),使数据能够均衡的分布在多张表中,并且不影响正常的查询。在企业级应用中,往往使用org_id(组织主键)做为分表字段,在互联网应用中往往是userid。在确定分表策略后,当数据进行存储及查询时,需要确定到哪张表里去查找数据,
  数据存放的数据表 = 分表字段的内容 % 分表数量
  **2、分库**
  分表能够解决单表数据量过大带来的查询效率下降的问题,但是不能给数据库的并发访问带来质的提升,面对高并发的写访问,当Master无法承担高并发的写入请求时,不管如何扩展Slave服务器,都没有意义了。我们通过对数据库进行拆分,来提高数据库的写入能力,即所谓的分库。分库采用对关键字取模的方式,对数据库进行路由。
  数据存放的数据库=分库字段的内容%数据库的数量
  **3、即分表又分库**
  数据库分表可以解决单表海量数据的查询性能问题,分库可以解决单台数据库的并发访问压力问题。
  当数据库同时面临海量数据存储和高并发访问的时候,需要同时采取分表和分库策略。一般分表分库策略如下:
  中间变量 = 关键字%(数据库数量*单库数据表数量)
  库 = 取整(中间变量/单库数据表数量)
  表 = (中间变量%单库数据表数量)
  实例:
  1、分库分表
  很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子:
  复制代码 代码如下:
  <?php
  for($i=0;$i< 100; $i++ ){
  //echo "CREATE TABLE db2.members{$i} LIKE db1.members
  ";
  echo "INSERT INTO members{$i} SELECT * FROM members WHERE mid%100={$i}
  ";
  }
  ?>
  2、不停机修改mysql表结构
  同样还是members表,前期设计的表结构不尽合理,随着数据库不断运行,其冗余数据也是增长巨大,同事使用了下面的方法来处理:
  先创建一个临时表:
  /*创建临时表*/
  CREATE TABLE members_tmp LIKE members
  然后修改members_tmp的表结构为新结构,接着使用上面那个for循环来导出数据,因为1000万的数据一次性导出是不对的,mid是主键,一个区间一个区间的导,基本是一次导出5万条吧,这里略去了
  接着重命名将新表替换上去:
  /*这是个颇为经典的语句哈*/
  RENAME TABLE members TO members_bak,members_tmp TO members;
  就是这样,基本可以做到无损失,无需停机更新表结构,但实际上RENAME期间表是被锁死的,所以选择在线少的时候操作是一个技巧。经过这个操作,使得原先8G多的表,一下子变成了2G多。

为什么国产机喜欢堆硬件,iPhone喜欢拼软件?如果大家仔细去看国产安卓机iPhone,会发现一个有趣的现象,那就是国产机的亮点基本上都是聚焦在硬件上,通过硬件来体现创新,技术实力。而苹果的亮点,除了A15这颗芯片,大多是体现在如何区分旗舰机与高端机?外行人只看配置,内行人更注重这4点很多人认为买手机只能区分旗舰机和千元机,但其实进入旗舰门槛后也有种类细分,真正能称得上高端机的往往是该机型的顶配,那么除了配置区别外,高端机还在各种纬度超越入门旗舰,今天小编就来讲6个你不知道的微信冷知识,个个都很实用!带你1分钟熟知微信微信作为生活中常用的通讯工具,除了聊天发朋友圈打视频,你们还知道哪些实用技巧呢?今天就来给大家分享6个少数人知道的微信冷知识,实用且强大,赶快去试试吧!1转发微信语音消息我们都知道阿里造驴快递困局老龄化与机器人特约撰稿张明扬2021年,中国经济及社会政策变化的一大关键词,就是老龄化社会。正是因为中国社会正迅速变老,才有了三孩政策,以及与提升生育率密切相关的教育双减,也有了正进入读秒时段的重磅!最严限电令下,对亚马逊卖家有哪些影响?近期,广东江苏青海宁夏广西云南四川河南重庆内蒙古等地开始对能耗双控目标开展限电控能耗举措。当下正值跨境外贸旺季,此次限电令,让卖家上游产业受到直接影响。从国家发改委发布2021年上扫地机器人不止会扫地,深兰科技上这5款改变你的思维定式在疫情防控常态化的上半年,深圳广州长沙等多个城市启动或增加了无人智能清洁设备的采购。在新基建城市更新环卫短板等诸多利好政策的加持下,环卫行业智能化转型升级已成为大势所趋。在此背景下台积电肥羊入虎口?韩媒曝美国出狠招上缴库存订单商业机密由于全球芯片荒迟迟未缓解,美国商务部上周再次举行半导体高峰会,包括台积电三星英特尔等半导体大厂都与会。韩媒指出,此次美国态度转趋强硬,以提高芯片供应链透明度为由,要求台积电三星等晶日本专利厅揭晓谷歌新平板设计畅想Pixel6与Android12附体近日公布的一项专利表明,搜索巨头Google也为一款极具未来感的Pixel平板电脑申请了设计专利。不过最让我们感到有意思的,莫过于基于Android12移动操作系统的UI畅想。据悉小米公司正式发布新机,9月30号全渠道开售,定价仅2599元起早期手机厂商们即将发布新机之前,都会特别注重保密,有关新机的外观与配置信息都会等到发布会那一天才公开,但是现如今不少手机厂商们渐渐发现这种策略并不好,与其一天公布所有信息,还不如提限电冲击蔓延!苹果特斯拉供货商生产线停摆9月27日消息,受能耗双控影响,包括江苏浙江广东辽宁等地相继传出缺电,多家企业停工数天,许多苹果特斯拉关键供货商都被迫暂停生产线。这让iPhone等电子产品在需求旺季面临了全新供应特斯拉老板马斯克又把温哥华小女友甩了!去年刚为他生下一个儿子特斯拉CEO又分手了?除了成功的事业以外,这位亿万富豪最让人津津乐道的就是他的风流史了。不少吃瓜群众表示对这一结局感到很意外,但这一切似乎又在情理之中。毕竟这位情场浪子已经结过三次
有感慈善回归圣坛,卢俊卿再捐2亿扶贫一个曾经被人骂成慈善骗子的人,而今却荣膺改革开放40年中国最具影响力的十大公益人物!人类进步史似乎就是一部反转史。由中国故事全球传播理事会中国经济新闻联播GBD公共外交文化交流中心百岁山对女排绝对真爱,世联赛香港站又又又来应援了6月4日晚2030分,中国女排在世界联赛香港站首轮中对阵日本,作为宿敌此战在开打前便备受期待,在上月的瑞士精英赛中女排二线以13输给日本,遗憾错失了赛季开门红,此番一线阵容上场交锋叮咚课堂团队再升级教育部专家程晓堂教授全程指导教研设计据悉,专注AI少儿英语教育领域的叮咚课堂已与教育部专家程晓堂教授达成合作,程教授正式成为其学术顾问,将全程指导叮咚课堂英语课程研发和内容体系设计。近日,程晓堂教授到访叮咚课堂总部,从小红书国风合作初窥百年青年思潮史对传统,从打破到回归今年是五四运动的百年诞辰。辞旧迎新,春节里当代青年对于中国福等年俗文化的旧俗新解,可以初窥出他们对于传统文化的理解和传承。说到历史与文化,在螺旋上升和曲折向前的历史进程中,青年群体最受欢迎魔幻暗黑小说入围名单公布,第一名出人意料说起小说,不得不提玄幻小说中一个重要的分支,魔幻暗黑系列。它属于严肃奇幻的范畴,通常特征有气氛沉闷悲剧性展开残酷的描写不合理的世界观。在奇幻文学作品当中,以恐怖题材的发挥较多。以下一个三公里灯塔计划,见证城市守护者内心的渴望一提到春节过年,人们脑海里大都会浮现出阖家欢乐的幸福景象,这是亲朋好友团聚的重要时刻,没有人想缺席。在全国人民都沉浸在一派热闹祥和的气氛之中时,有一些人却默默的收起自己对家人的思念这个APP被央视点名?竟然是深耕信息化教育的它!近日,一篇名为这块屏幕可能改变命运的视频文章刷屏通过远程教学,贫困地区的学生和成都七中的学生同步上课。一块屏幕像纽带般连接了优质师资与贫困山区的孩子们,视频更是催泪刷爆朋友圈。一块华人运通又在谋划大事?竟让陶氏化学CEOCTO接连拜访一个是进入世界五百强的高科技化学新材料公司,一个是势头强劲的造车新力量。在今年年初,陶氏化学全球CEO吉姆菲特林(JimFitterling)来到了访华之行的唯一一家新能源车企华人燕之屋携手创意中国第二季,助力文创项目扬帆起航创意中国2年度创意盛典于1月16日晚进行了终极巅峰对决,厦门燕之屋生物工程有限公司执行董事兼CEO李友全先生,作为合作伙伴的身份受邀出席并担任年度创意盛典最具人气奖的颁奖嘉宾。二十这个APP被央视点名?竟然是深耕信息化教育的它!近日,一篇名为这块屏幕可能改变命运的视频文章刷屏通过远程教学,贫困地区的学生和成都七中的学生同步上课。一块屏幕像纽带般连接了优质师资与贫困山区的孩子们,视频更是催泪刷爆朋友圈。一块天然配方喂养黄天鹅可生食标准获妈妈们认可近日,在国家动物健康与食品安全创新联盟组织的全产业链谈可生食蛋直播研讨会上,专家们指出可生食鸡蛋标准,是鲜鸡蛋的更高标准,是我国鸡蛋品质升级的方向随着人们对食品安全的日益注重,可生