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

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多。

朋友圈文案微信置顶文案1今天你快乐了吗。2什么都明白的人最温柔也最冷漠。3别急着失望总有人跨越山海为你而来4好好生活慢慢相遇5别让平凡的生活耗尽你对生活的向往。6再相逢希望我们都在高处7在意那么多我还怎网络直播镜头下的中年人,讨生活的样子真像一条狗在早期的娱乐直播游戏直播旅游直播等,电商直播进一步成为直播届的主流。淘宝抖音腾讯快手等纷纷入场,力图占据市场主力。直播平台通过网红内容吸引聚集广大网友的社交流量,结合传统电商供应链星融网探索未来天地一体化的互联网络空间这是一篇关于天地一体化信息网络空间探索的科普小文,引出人类对空间信息网络的探索,介绍了星链鸿雁虹云等星基网络,未来天地一体化的星融网,以及我国星融网发展情况。什么是未来天地一体化的买灯送车,买月影家居张继科壕送宏光miniEV!让家充满爱新手小白在面临装修时是不是都一头雾水?尤其是灯具的选择时,超多的样式摆在面前,挑的头都大了!!今天给各位姐妹安利一下我自己家用的灯饰!月影家居品牌的1999元全屋铜灯套餐!!你没有茂名知名富豪掌舵香港最大的镍钴贸易企业,如今身价百亿茂名知名富豪掌舵香港最大的镍钴贸易企业,如今身价百亿推荐语茂名,广东省地级市,是一座拥有全地形特征的中国优秀旅游城市,北有高山草甸原始森林,南有百里银滩千年渔港,再加上温泉农业人文合江第一富豪打造贵州地产龙头企业,如今身价百亿合江第一富豪打造贵州地产龙头企业,如今身价百亿推荐语合江县,隶属四川省泸州市,是长江上游置县最早的三个县之一长江出川第一港口县。除此之外,合江县景色秀美,有多处国家级森林公园省级风中国直播界女首富诞生白手起家创业,如今坐拥90亿财富中国直播界女首富出现白手起家创业,如今坐拥90亿财富推荐语虽然如今距离双11还有十几天二十天的时间,但今年各大电商平台一改往日的营销策略,将双十一战线拉长,早早就开始了一系列的打折广东河源第一富豪从草根逆袭为投资大佬,身价880亿广东河源首富出现从草根逆袭为投资大佬,身价880亿推荐语河源,广东省地级市,多年来先后荣获全国文明城市提名城市中国优秀旅游城市国家级生态保护与建设示范区等。除此之外,河源更是地如其福建蕉城第一富豪身价超过马云马化腾,打造新能源龙头企业福建蕉城第一富豪身价超过马云马化腾,打造新能源龙头企业推荐语福建蕉城区,地处福建省东北部的鹫峰山南麓三都澳之滨。蕉城依山傍海,风光秀丽,旅游资源独特,历史悠久,文化底蕴深厚,素有海雷州低调富豪打造广州商业地产龙头企业,坐拥百亿财富广东雷州低调富豪打造广州商业地产龙头企业,坐拥百亿财富推荐语雷州,广东省辖县级市,由湛江市代管。雷州历史悠久,远在四五千年以前的新石器时代便有人类繁衍生息,历来是雷州半岛的政治经济37岁和马云做生意,大赚277亿,何小鹏如今怎样了?37岁便和马云做生意,大赚277亿,湖北富豪何小鹏如今怎样了?推荐语众所周知,相对于湖南而言,湖北人相对低调,更喜欢闷声发大财。特别是自改革开放以来,湖北地区诞生的富豪真是数不胜数
多项技术领跑国产黑科技,中兴手机无法再低调了今天的手机行业,让我们欣喜地感受到了科技兴则民族兴,科技强则国家强的真正意义。曾经依靠模仿和低价的中国品牌,正在通过技术的沉淀和创新,打破曾经以苹果三星等国外厂商主导的手机市场,开荣耀智慧屏正式宣布,无广告时代的到来!时代将迎来大巨变随着如今各大厂商越发的强大下,许多厂商不仅进军了各个领域,还主攻影视领域。也让电视领域有了质的飞跃,电视作为智能家居控制最为关键的一环,不仅要做到让用户享受到性能的乐趣,同时也不要曾毓群,宁德时代创始人,造电池成为中国第二富豪2021年5月,根据福布斯富豪榜,宁德时代创始人曾毓群以身家345亿美元,超过李嘉诚跻身香港首富。2021年7月28日,曾毓群力压腾讯马化腾和阿里巴巴马云,成为中国第二大富豪。曾毓杨惠妍,碧桂园的继承人,中国最富有的女性2020年排在福布斯中国最富有女性榜的第1位是杨惠妍,她是碧桂园集团的继承人,现在的她每天进账7亿,甚至还坐拥54万亩土地。杨惠妍的父亲是碧桂园主席杨国强。杨国强农民出身,年少时家马云,阿里巴巴创始人,从教师逆袭为中国首富在大家的印象里,马云是一个神话般的人物,一位乡村老师逆袭成中国首富。外媒评价马云,则是觉得他是一个像巴菲特一样有智慧的人。1964年9月10日马云生于浙江省杭州市,2021年的个人孙飘扬钟慧娟夫妇,中国药界的黄金搭档你没用他的产品,甚至没听过他的企业,而他们身家达2500亿成首富。这就是孙飘扬钟慧娟夫妇。他俩都来自连云港,分别领导恒瑞医药和翰森制药。在医药界,恒瑞医药的地位,堪比BAT在互联网宗庆后先生,娃哈哈创始人,中国的饮料教父宗庆后先生,娃哈哈创始人,中国的饮料教父!他生于1945年,苏北的宿迁市,宗庆后家族,祖上身世显赫曾出过宋朝名将大清绿营将领和地方官员。宗庆后的爷爷是张作霖的财政部长,父亲在国民党游戏NPC有了自我意识,未来在游戏能跟AI谈恋爱吗?当一个游戏里的NPC有一天突然自问我是谁?我从哪里来?要到哪里去?如果哪一天他不按预先设定的程序行动,那之后会发生什么?在失控玩家这部好莱坞电影中,这个蓝衣小哥某一天突然觉醒AI,九道门丨三眼让你快速看懂云计算8月26日,作为全球最大专业会计团体之一的澳洲会计师公会发布了2021年企业科技应用调查。数据显示,在过去一年里,我国内地企业应用人工智能商业智能软件客户关系管理软件数据分析及可视十三年云上变迁,谁会成为Gartner云魔力象限的新引领者?自2009以来,Gartner一年一度的云基础设施魔力象限就成为观察全球云计算产业格局的风向标之一。与其他关注行业市场份额的报告相比,该象限以横轴纵轴两个方向,将云计算公司的技术产三百云积极拓展大数据智能化创新应用加快推动数字经济发展随着数字经济的发展和技术的成熟,数据应用逐步从数据处理分析向决策迈进,进入数据智能应用时代。数据智能是指基于中台体系,融合大数据人工智能云计算物联网等多种技术,利用数据实现智能决策