MySQL分库分表、主从复制、读写分离

一、为什么需要分库分表、读写分离?

随着数据库里表的数据量不断增大,查询所需的时间就会越来越长;另外,由于MySQL会对更改表的操作加锁,会阻塞其他操作。

所以从两方面考虑,对于数据量的问题,用分库分表解决;对于写操作会阻塞后续读操作,用读写分离解决。

用merge存储引擎来实现分表,不需要改动代码。做到读写分离,就需要使用MySQL提供的主从机制。在数据量非常非常大的情况下,可以采用分区理念,分为垂直和水平分区。

二、数据库分表

垂直划分和水平划分

  • 垂直切分---分模块使用字段不同的而划分不同字段结构的表;
  • 水平切分---分同一个模块下的多个结构相同的子表
2.1 垂直划分

把不同功能,不同使用频率的数据列分别放到不同的表中,但是如果同一个模块的数据量太大就会存在性能瓶颈
例如,把常用的字段放一个表,不常用的放一个表,把字段比较大的比如text的字段拆出来放一个表里面使用的话是根据具体业务来拆,查询时使用多表联查,可以再配合redis存储。

2.2 水平划分

垂直切分解决不了大表的瓶颈,如果同一个功能中表的数据量过大,就要对该表进行切分,为水平切分。例如,用户表user分为 user_1 , user_2分别存储男用户和女用户

三、数据库分库

3.1 垂直划分

基本的思路就是按照业务模块来划分出不同的数据库,而不是像早期一样将所有的数据表都放到同一个数据库中。例如,商场订单模块放主机1中数据库, 商品模块放主机2中数据库

3.2 水平划分

水平分库方式主要根据数据属性(如商品所属地市, 种类)拆分物理数据库,从而解决单库中数据量过大IO密集的问题。

四、读写分离和主从复制

在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。

读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。

MySQL读写分离一般通过中间件实现:

  • mysql_proxy:mysql_proxy是MySQL的一个开源项目,通过其自带的lua脚本进行sql判断。
  • Atlas:是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。
  • Amoeba:阿里巴巴开发。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 参考1参考2 前言 对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩...
    LittleTrue阅读 3,105评论 0 10
  • Sharding的基本思想其实就是采用分治的思想,要把一个数据库切分成多个部分放到不同的数据库(server)上,...
    jiangmo阅读 9,675评论 0 7
  • 终于感受到了旅途的愉快,在旅途中可以看到形形色色的人,有的是踌躇满志的小商贩,讲解他们如何发家致富,有的是志同...
    君行九剑阅读 439评论 0 0
  • 鼻炎主要表现内鼻粘膜充血或水肿,患者常可出现鼻塞、流鼻涕、鼻痒、鼻干燥等等,尤其是鼻涕流不停时,极度影响正常生活与...
    可爱木讷阅读 397评论 0 0
  • 第一天注册简书,也不知道写点什么,想起来昨晚做了个挺有意思的梦,索性就拿来跟大家分享一下好了! 梦中我跟两个小伙伴...
    大圣骑天阅读 551评论 0 0

友情链接更多精彩内容