前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL分库分表

MySQL分库分表

作者头像
素履coder
发布2022-09-07 14:31:46
4.4K0
发布2022-09-07 14:31:46
举报
文章被收录于专栏:素履coder素履coder

1. 为什么要分库分表#

① 从连接数来看,根据官方文档,5.1.17以上版本,单台mysql数据库的连接数默认是151,上限为10w,虽然可以在上限范围内人为的设置最大连接数,或者建立连接池进行一定程度优化,但单台数据库的性能总是有瓶颈的,当请求量过大的时候,若连接数不够,则会处于阻塞状态

② 从硬件方面来看,服务器的内存、磁盘、网络等资源也是有限的,若所有数据都挤在一台服务器里面很容易造成磁盘空间不足,网络请求时间长等问题,虽然可以提升硬件性能,但是会加大成本。

③ 从查询效率来看,一张表如果没有控制数据量大小,在查询的时候会导致查询时间过长,如果还没有命中索引,那时间就更长了。

④ 在读写分离中,一台master数据库下可以挂多个slave数据库,master主要用来写数据,然后同步到各台slave,slave主要用来读数据,这样可以提高QPS。但由于写只是在master进行,当写操作过多的时候,会影响到master的稳定性,若master挂了,slave也跟着挂。所以此时master就有分库的必要,若只是读的压力大,则可以考虑添加slave数据库。

⑤ 从业务方面来看,随着业务的不断扩大,服务也要由以前的单体服务进化为微服务,数据库自然也要增加,不可能永远只用一个数据库。

1.1 优点#

分库可以减轻单库的访问压力,提高稳定性,在高并发访问的时候可以增大连接负载,提升查询效率

分表可以解决单表存储量过大,查询效率低下的问题,降低锁表概率

1.2 缺点#

会增加跨表或跨库联合查询复杂度

需要引入分布式事务,复杂度增加了,对于性能有影响

跨库join困难

在不同库表查到数据后还要再应用层聚合,容易造成合并困难

比如水平分表分库会造成字段冗余

order by、limit 等操作困难度增加

2. 什么是分库分表#

2.1 分库#

2.1.1 垂直分库#

垂直分库一般是根据业务来划分,比如一个系统分成很多个模块,有日志模块、用户模块、产品模块、工厂模块、物料模块等等,每个模块占用一个数据库,这些不同数据库可以分散放在不同的服务器,也可以全都放在一个服务器,这得看具体的业务和硬件性能

2.1.2 水平分库#

水平分库是指把一个数据库分成多个数据库,这些数据库的数据库表结构相同,主要目的是为了避免集中访问单个数据库,缓解单机数据库的瓶颈和压力。

2.2 分表#

2.2.1 垂直分表#

垂直分表主要指把一张表中的字段分开组成独立的表,用某个相同的字段把这些表关联起来,划分依据可以如下:

① 若某个字段存储的信息占用空间大,可以把这个字段用一张表独立出去

② 可以依据字段的访问频繁度把字段独立到新表,因为频繁查表容易导致锁表,会影响到其它查询不频繁的字段

③ 单表中的字段太多,也可以考虑垂直分表

④ ……

2.2.2 水平分表#

水平分表不用拆字段,而是新建字段一样的表,根据各种划分方法把数据分别放在不同表中,划分依据可以如下:

① 可以根据时间水平分表,比如按年、月,往往最近一两年的数据访问频繁,为热数据,前几年的访问较少,为冷数据,分表可以实现冷热数据的分离

② 根据不同业务有选择性的划分

③ 根据不同算法,比如哈希计算id,自动路由到不同表

④ ……

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 为什么要分库分表#
    • 1.1 优点#
      • 1.2 缺点#
      • 2. 什么是分库分表#
        • 2.1 分库#
          • 2.1.1 垂直分库#
          • 2.1.2 水平分库#
        • 2.2 分表#
          • 2.2.1 垂直分表#
          • 2.2.2 水平分表#
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档