iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL常用分库分表方案汇总
  • 364
分享到

MySQL常用分库分表方案汇总

2024-04-02 19:04:59 364人浏览 泡泡鱼
摘要

目录一、数据库瓶颈二、分库分表2、水平分表3、垂直分库4、垂直分表三、分库分表工具四、分库分表步骤五、分库分表问题 1、非partition key的查询问题2、非partition

一、数据库瓶颈

不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。

1、IO瓶颈

第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。

第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 -> 分库。

2、CPU瓶颈

第一种:sql问题,如SQL中包含join,group by,order by,非索引字段条件查询等,增加CPU运算的操作 -> SQL优化,建立合适的索引,在业务Service层进行业务计算。

第二种:单表数据量太大,查询时扫描的行太多,SQL效率低,CPU率先出现瓶颈 -> 水平分表。

二、分库分表

1、水平分库

概念:以字段为依据,按照一定策略(hash、range等),将一个库中的数据拆分到多个库中。

结果:

  • 每个库的结构都一样;
  • 每个库的数据都不一样,没有交集;
  • 所有库的并集是全量数据;

场景:系统绝对并发量上来了,分表难以根本上解决问题,并且还没有明显的业务归属来垂直分库。

分析:库多了,io和cpu的压力自然可以成倍缓解。

2、水平分表

概念:以字段为依据,按照一定策略(hash、range等),将一个表中的数据拆分到多个表中。

结果:

  • 每个表的结构都一样;
  • 每个表的数据都不一样,没有交集;
  • 所有表的并集是全量数据;

场景:系统绝对并发量并没有上来,只是单表的数据量太多,影响了SQL效率,加重了CPU负担,以至于成为瓶颈。推荐:一次SQL查询优化原理分析

分析:表的数据量少了,单次SQL执行效率高,自然减轻了CPU的负担。

3、垂直分库

概念:以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。

结果:

  • 每个库的结构都不一样;
  • 每个库的数据也不一样,没有交集;
  • 所有库的并集是全量数据;

场景:系统绝对并发量上来了,并且可以抽象出单独的业务模块。

分析:到这一步,基本上就可以服务化了。

例如,随着业务的发展一些公用的配置表、字典表等越来越多,这时可以将这些表拆到单独的库中,甚至可以服务化。再有,随着业务的发展孵化出了一套业务模式,这时可以将相关的表拆到单独的库中,甚至可以服务化。

4、垂直分表

概念:以字段为依据,按照字段的活跃性,将表中字段拆到不同的表(主表和扩展表)中。

结果:

  • 每个表的结构都不一样;
  • 每个表的数据也不一样,一般来说,每个表的字段至少有一列交集,一般是主键,用于关联数据;
  • 所有表的并集是全量数据;

场景:系统绝对并发量并没有上来,表的记录并不多,但是字段多,并且热点数据和非热点数据在一起,单行数据所需的存储空间较大。以至于数据库缓存的数据行减少,查询时会去读磁盘数据产生大量的随机读IO,产生IO瓶颈。

分析:可以用列表页和详情页来帮助理解。垂直分表的拆分原则是将热点数据(可能会冗余经常一起查询的数据)放在一起作为主表,非热点数据放在一起作为扩展表。这样更多的热点数据就能被缓存下来,进而减少了随机读IO。拆了之后,要想获得全部数据就需要关联两个表来取数据。

但记住,千万别用join,因为join不仅会增加CPU负担并且会讲两个表耦合在一起(必须在一个数据库实例上)。关联数据,应该在业务Service层做文章,分别获取主表和扩展表数据然后用关联字段关联得到全部数据。

三、分库分表工具

  • sharding-sphere:jar,前身是sharding-jdbc;
  • TDDL:jar,Taobao Distribute Data Layer;
  • Mycat:中间件

注:工具的利弊,请自行调研,官网和社区优先。

四、分库分表步骤

根据容量(当前容量和增长量)评估分库或分表个数 -> 选key(均匀)-> 分表规则(hash或range等)-> 执行(一般双写)-> 扩容问题(尽量减少数据的移动)。

五、分库分表问题

1、非partition key的查询问题

基于水平分库分表,拆分策略为常用的hash法。

端上除了partition key只有一个非partition key作为条件查询

映射法

基因法

注:写入时,基因法生成user_id,如图。关于xbit基因,例如要分8张表,23=8,故x取3,即3bit基因。根据user_id查询时可直接取模路由到对应的分库或分表。

根据user_name查询时,先通过user_name_code生成函数生成user_name_code再对其取模路由到对应的分库或分表。id生成常用snowflake算法

端上除了partition key不止一个非partition key作为条件查询

映射法

冗余法

注:按照order_id或buyer_id查询时路由到db_o_buyer库中,按照seller_id查询时路由到db_o_seller库中。感觉有点本末倒置!有其他好的办法吗?改变技术栈呢?

后台除了partition key还有各种非partition key组合条件查询

NoSQL

冗余法


2、非partition key跨库跨表分页查询问题

基于水平分库分表,拆分策略为常用的hash法。

注:用NoSQL法解决(ES等)。

3、扩容问题

基于水平分库分表,拆分策略为常用的hash法。

水平扩容库(升级从库法)

注:扩容是成倍的。

水平扩容表(双写迁移法)

第一步:(同步双写)修改应用配置和代码,加上双写,部署;

第二步:(同步双写)将老库中的老数据复制到新库中;

第三步:(同步双写)以老库为准校对新库中的老数据;

第四步:(同步双写)修改应用配置和代码,去掉双写,部署;

注:双写是通用方案。

六、分库分表总结

分库分表,首先得知道瓶颈在哪里,然后才能合理地拆分(分库还是分表?水平还是垂直?分几个?)。且不可为了分库分表而拆分。

选key很重要,既要考虑到拆分均匀,也要考虑到非partition key的查询。

只要能满足需求,拆分规则越简单越好。

到此这篇关于Mysql常用分库分表方案汇总的文章就介绍到这了,更多相关mysql 分库分表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL常用分库分表方案汇总

本文链接: https://www.lsjlt.com/news/156742.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL常用分库分表方案汇总
    目录一、数据库瓶颈二、分库分表2、水平分表3、垂直分库4、垂直分表三、分库分表工具四、分库分表步骤五、分库分表问题 1、非partition key的查询问题2、非partition...
    99+
    2024-04-02
  • MySQL:互联网公司常用分库分表方案汇总!
    一、数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以...
    99+
    2024-04-02
  • MySQL常用分库分表方案有哪些
    这篇文章主要为大家展示了“MySQL常用分库分表方案有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL常用分库分表方案有哪些”这篇文章吧。一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈...
    99+
    2023-06-25
  • MySQL常见优化方案汇总
    目录思考sql优化的几个地方,我把他做了个分类,方便理解key_len计算方式简单介绍一、优化点1:字段优化覆盖索引尽量用二、优化点2:where优化1.尽量全值匹配2.最...
    99+
    2024-04-02
  • MySQL分区表管理命令汇总
    目录一、ANALYZE和CHECK PARTITION 分析和检查分区二、REPAIR 修复分区三、OPTIMIZE 分区四、REBUILD分区五、新增和删除分区前言: 分区是一种表...
    99+
    2024-04-02
  • MySQL分库分表总结讲解
    项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询变慢,而且由于表的锁机制导致应用操作也受到严重影响,出现了数据库性能瓶颈。 当出现这种情况时,我们可以考虑分库分表,即将单个数据...
    99+
    2024-04-02
  • Mysql常用函数大全(分类汇总讲解)
    一、数学函数 ABS(x)   返回x的绝对值 BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x)&...
    99+
    2024-04-02
  • Python常用库汇总
    fuzzywuzzy ,字符串模糊匹配。   esmre ,正则表达式的加速器。   colorama 主要用来给文本添加各种颜色,并且非常简单易用。   Prettytable 主要用于在终端或浏览器端构建格式化的输出。   dif...
    99+
    2023-01-31
    常用 Python
  • 大表分库分表总结
    本篇内容介绍了“大表分库分表总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.前言为什么需要做分库分表...
    99+
    2024-04-02
  • SQLServer分页方法汇总
    根据SalesOrderID排序,取第16-18行这3条记录。 方法一:(最常用的分页代码, top / not in) SELECT TOP 3 [SalesOrder...
    99+
    2024-04-02
  • mysql 数据汇总与分组
    我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成。 这种类型的检索例子有以下几种: ...
    99+
    2024-04-02
  • Android 常见bug汇总及解决方案
    目录1、关于使用OkHttp运行时出现的错误2、图片轮播控件com.youth.banner使用Glide异步加载图片时发生的崩溃3、接入容联七陌客服系统,进入客服界面时闪退问题4、...
    99+
    2024-04-02
  • Oracle常见问题解决方案汇总
    1、Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务 数据库服务器崩了,而且尝试重启服务和重启机器都解决不了问题 打开cmd窗口 C:\Users\hxt&g...
    99+
    2024-04-02
  • MySql 之 常用命令汇总
    MySql 常用命令汇总 用户管理:一、数据库操作:二、创建表:三、修改表:四、插入数据:五、更新数据:六、删除数据:七、条件控制:八、MySQL的正则表达式:九、MySQL的一些函数:十、分组查询:十一、UNION规则——...
    99+
    2023-08-18
    mysql
  • 常用的mysql命令汇总
    这篇文章主要讲解了“常用的mysql命令汇总”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常用的mysql命令汇总”吧!一、连接MySQL &nb...
    99+
    2024-04-02
  • 常用的Docker命令及示例汇总分析
    目录1、容器生命周期管理(1)docker run(2)start/stop/restart(3)docker kill(4)docker rm(5)pause/unpause(6)...
    99+
    2024-04-02
  • MySQL分库分表的几种方式
    目录一、为什么要分库分表二、什么是分库分表三、分库分表的几种方式1.垂直拆分2. 水平拆分四、分库分表带来的问题五、分库分表技术如何选型一、为什么要分库分表 如果一个网站业务快速发展...
    99+
    2024-04-02
  • mysql常用命令汇总介绍
    设置更改mysqlroot密码 首次进入mysql数据库, ! 可以将mysql绝对路径加入到环境变量中, 还可以设置开机加载, 重新加载环境变量让mysql生效 重新登录 mysql...
    99+
    2024-04-02
  • Mysql和ES数据同步方案汇总
    文章目录 前言一、Mysql和ES各自的特点为什么选用Mysql为什么选用 ES 二、数据同步方案1.同步双写2.异步双写(MQ方式)3.基于Mysql表定时扫描同步4.基于Binlog实...
    99+
    2023-09-03
    mysql ES 数据同步 Logstash Canal
  • MySQL详细汇总常用函数
    目录MySQL常用函数一、数字函数二、字符串函数三、时间函数四、系统函数五、聚合函数MySQL常用函数 一、数字函数 附加:ceil(x) 如ceil(1.23) 值为2 可以写成...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作